Merge branch 'master' of octo.ddvtech.com:pls
This commit is contained in:
commit
27a0f58cc9
3 changed files with 46 additions and 2 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -8,3 +8,5 @@ Connector_RTSP/Connector_RTSP
|
|||
*~
|
||||
bin/*
|
||||
gearbox/plugins/001_putserversup.sh
|
||||
AMF_Tester/AMFtest
|
||||
AMF_Creator/AMFtest
|
||||
|
|
1
Connector_HTTP/amf.cpp
Symbolic link
1
Connector_HTTP/amf.cpp
Symbolic link
|
@ -0,0 +1 @@
|
|||
../util/amf.cpp
|
|
@ -21,6 +21,7 @@ enum {HANDLER_NONE, HANDLER_PROGRESSIVE, HANDLER_FLASH, HANDLER_APPLE, HANDLER_M
|
|||
#include "../util/server_setup.cpp"
|
||||
#include "../util/http_parser.cpp"
|
||||
#include "../util/MP4/interface.cpp"
|
||||
#include "amf.cpp"
|
||||
|
||||
static const std::string base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
std::string base64_encode(std::string const input) {
|
||||
|
@ -52,6 +53,44 @@ int FlvGetTimestamp( FLV_Pack * tag ) {
|
|||
return ( (tag->data[7] << 24 ) + (tag->data[4] << 16 ) + (tag->data[5] << 8 ) + (tag->data[6] ) );
|
||||
}
|
||||
|
||||
std::string GetMetaData( ) {
|
||||
AMFType amfreply("container", (unsigned char)AMF0_DDV_CONTAINER);
|
||||
amfreply.addContent(AMFType("onMetaData",(unsigned char)AMF0_STRING));
|
||||
amfreply.addContent(AMFType("",(unsigned char)AMF0_ECMA_ARRAY));
|
||||
amfreply.getContentP(1)->addContent(AMFType("trackinfo", (unsigned char)AMF0_STRICT_ARRAY));
|
||||
amfreply.getContentP(1)->getContentP(0)->addContent(AMFType("arrVal"));
|
||||
// amfreply.getContentP(1)->getContentP(0)->getContentP(0)->addContent(AMFType("timescale",(double)1000));
|
||||
// amfreply.getContentP(1)->getContentP(0)->getContentP(0)->addContent(AMFType("length",(double)59641700));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(0)->addContent(AMFType("language","eng"));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(0)->addContent(AMFType("sampledescription", (unsigned char)AMF0_STRICT_ARRAY));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(0)->getContentP(1)->addContent(AMFType("arrVal"));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(0)->getContentP(1)->getContentP(0)->addContent(AMFType("sampletype","avc1"));
|
||||
amfreply.getContentP(1)->getContentP(0)->addContent(AMFType("arrVal"));
|
||||
// amfreply.getContentP(1)->getContentP(0)->getContentP(1)->addContent(AMFType("timescale",(double)44100));
|
||||
// amfreply.getContentP(1)->getContentP(0)->getContentP(1)->addContent(AMFType("length",(double)28630000));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(1)->addContent(AMFType("language","eng"));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(1)->addContent(AMFType("sampledescription", (unsigned char)AMF0_STRICT_ARRAY));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(1)->getContentP(1)->addContent(AMFType("arrVal"));
|
||||
amfreply.getContentP(1)->getContentP(0)->getContentP(1)->getContentP(1)->getContentP(0)->addContent(AMFType("sampletype","mp4a"));
|
||||
amfreply.getContentP(1)->addContent(AMFType("audiochannels",(double)2));
|
||||
amfreply.getContentP(1)->addContent(AMFType("audiosamplerate",(double)44100));
|
||||
amfreply.getContentP(1)->addContent(AMFType("videoframerate",(double)251));
|
||||
amfreply.getContentP(1)->addContent(AMFType("aacaot",(double)2));
|
||||
amfreply.getContentP(1)->addContent(AMFType("avclevel",(double)12));
|
||||
amfreply.getContentP(1)->addContent(AMFType("avcprofile",(double)77));
|
||||
amfreply.getContentP(1)->addContent(AMFType("audiocodecid","mp4a"));
|
||||
amfreply.getContentP(1)->addContent(AMFType("videocodecid","avc1"));
|
||||
amfreply.getContentP(1)->addContent(AMFType("width",(double)1280));
|
||||
amfreply.getContentP(1)->addContent(AMFType("height",(double)720));
|
||||
amfreply.getContentP(1)->addContent(AMFType("frameWidth",(double)1280));
|
||||
amfreply.getContentP(1)->addContent(AMFType("frameHeight",(double)720));
|
||||
amfreply.getContentP(1)->addContent(AMFType("displayWidth",(double)1280));
|
||||
amfreply.getContentP(1)->addContent(AMFType("displayHeight",(double)720));
|
||||
// amfreply.getContentP(1)->addContent(AMFType("moovposition",(double)35506700));
|
||||
// amfreply.getContentP(1)->addContent(AMFType("duration",(double)596.458));
|
||||
return amfreply.Pack( );
|
||||
}
|
||||
|
||||
std::string BuildManifest( std::string MetaData, std::string MovieId, int CurrentMediaTime ) {
|
||||
Interface * temp = new Interface;
|
||||
std::string Result="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns=\"http://ns.adobe.com/f4m/1.0\">\n";
|
||||
|
@ -61,13 +100,14 @@ std::string BuildManifest( std::string MetaData, std::string MovieId, int Curren
|
|||
Result += "<streamType>live</streamType>\n";
|
||||
Result += "<deliveryType>streaming</deliveryType>\n";
|
||||
Result += "<bootstrapInfo profile=\"named\" id=\"bootstrap1\">";
|
||||
Result += base64_encode(temp->GenerateLiveBootstrap(CurrentMediaTime));
|
||||
// Result += base64_encode(temp->GenerateLiveBootstrap(CurrentMediaTime));
|
||||
Result += "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";
|
||||
Result += "</bootstrapInfo>\n";
|
||||
Result += "<media streamId=\"1\" bootstrapInfoId=\"bootstrap1\" url=\"";
|
||||
Result += MovieId;
|
||||
Result += "/\">\n";
|
||||
Result += "<metadata>";
|
||||
Result += base64_encode(MetaData);
|
||||
Result += base64_encode(GetMetaData());
|
||||
Result += "</metadata>\n";
|
||||
Result += "</media>\n";
|
||||
Result += "</manifest>\n";
|
||||
|
@ -76,6 +116,7 @@ std::string BuildManifest( std::string MetaData, std::string MovieId, int Curren
|
|||
}
|
||||
|
||||
int mainHandler(int CONN_fd){
|
||||
// GetMetaData( ); return 0;
|
||||
int handler = HANDLER_PROGRESSIVE;
|
||||
bool ready4data = false;//set to true when streaming starts
|
||||
bool inited = false;
|
||||
|
|
Loading…
Add table
Reference in a new issue