Fixed code style for recent commits.
This commit is contained in:
parent
88e52ad936
commit
9aad5dc9fb
6 changed files with 83 additions and 73 deletions
|
@ -64,7 +64,7 @@ namespace Buffer {
|
||||||
|
|
||||||
while (usr->S.connected()){
|
while (usr->S.connected()){
|
||||||
usleep(5000); //sleep 5ms
|
usleep(5000); //sleep 5ms
|
||||||
if( !usr->myRing->playCount || !usr->Send()){
|
if ( !usr->myRing->playCount || !usr->Send()){
|
||||||
if (usr->S.spool()){
|
if (usr->S.spool()){
|
||||||
while (usr->S.Received().size()){
|
while (usr->S.Received().size()){
|
||||||
//delete anything that doesn't end with a newline
|
//delete anything that doesn't end with a newline
|
||||||
|
@ -108,18 +108,18 @@ namespace Buffer {
|
||||||
usr->myRing->waiting = false;
|
usr->myRing->waiting = false;
|
||||||
usr->myRing->starved = false;
|
usr->myRing->starved = false;
|
||||||
usr->myRing->b = thisStream->getStream()->msSeek(ms);
|
usr->myRing->b = thisStream->getStream()->msSeek(ms);
|
||||||
if (usr->myRing->playCount > 0 ) {
|
if (usr->myRing->playCount > 0){
|
||||||
usr->myRing->playCount = 0;
|
usr->myRing->playCount = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'f': { //frame-seek
|
case 'f': { //frame-seek
|
||||||
fprintf( stderr, "Received a frame-seek\n" );
|
fprintf(stderr, "Received a frame-seek\n");
|
||||||
unsigned int frameno = JSON::Value(usr->S.Received().get().substr(2)).asInt();
|
unsigned int frameno = JSON::Value(usr->S.Received().get().substr(2)).asInt();
|
||||||
usr->myRing->waiting = false;
|
usr->myRing->waiting = false;
|
||||||
usr->myRing->starved = false;
|
usr->myRing->starved = false;
|
||||||
usr->myRing->b = thisStream->getStream()->frameSeek(frameno);
|
usr->myRing->b = thisStream->getStream()->frameSeek(frameno);
|
||||||
if (usr->myRing->playCount > 0 ) {
|
if (usr->myRing->playCount > 0){
|
||||||
usr->myRing->playCount = 0;
|
usr->myRing->playCount = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -129,8 +129,8 @@ namespace Buffer {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'o': { //once-play
|
case 'o': { //once-play
|
||||||
fprintf( stderr, "Received a play-once\n" );
|
fprintf(stderr, "Received a play-once\n");
|
||||||
if (usr->myRing->playCount >= 0 ) {
|
if (usr->myRing->playCount >= 0){
|
||||||
usr->myRing->playCount++;
|
usr->myRing->playCount++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -196,7 +196,7 @@ namespace Buffer {
|
||||||
if (thisStream->getIPInput().connected()){
|
if (thisStream->getIPInput().connected()){
|
||||||
if (thisStream->getIPInput().spool()){
|
if (thisStream->getIPInput().spool()){
|
||||||
bool packed_parsed = false;
|
bool packed_parsed = false;
|
||||||
do {
|
do{
|
||||||
thisStream->getWriteLock();
|
thisStream->getWriteLock();
|
||||||
if (thisStream->getStream()->parsePacket(thisStream->getIPInput().Received())){
|
if (thisStream->getStream()->parsePacket(thisStream->getIPInput().Received())){
|
||||||
thisStream->getStream()->outPacket(0);
|
thisStream->getStream()->outPacket(0);
|
||||||
|
@ -207,7 +207,7 @@ namespace Buffer {
|
||||||
packed_parsed = false;
|
packed_parsed = false;
|
||||||
usleep(1000); //1ms wait
|
usleep(1000); //1ms wait
|
||||||
}
|
}
|
||||||
} while(packed_parsed);
|
}while (packed_parsed);
|
||||||
}else{
|
}else{
|
||||||
usleep(1000); //1ms wait
|
usleep(1000); //1ms wait
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,8 @@ namespace Buffer {
|
||||||
conf.addOption("reportstats",
|
conf.addOption("reportstats",
|
||||||
JSON::fromString("{\"default\":0, \"help\":\"Report stats to a controller process.\", \"short\":\"s\", \"long\":\"reportstats\"}"));
|
JSON::fromString("{\"default\":0, \"help\":\"Report stats to a controller process.\", \"short\":\"s\", \"long\":\"reportstats\"}"));
|
||||||
conf.addOption("time",
|
conf.addOption("time",
|
||||||
JSON::fromString("{\"default\":0, \"arg\": \"integer\", \"help\":\"Buffer a specied amount of time in ms.\", \"short\":\"t\", \"long\":\"time\"}"));
|
JSON::fromString(
|
||||||
|
"{\"default\":0, \"arg\": \"integer\", \"help\":\"Buffer a specied amount of time in ms.\", \"short\":\"t\", \"long\":\"time\"}"));
|
||||||
conf.parseArgs(argc, argv);
|
conf.parseArgs(argc, argv);
|
||||||
|
|
||||||
std::string name = conf.getString("stream_name");
|
std::string name = conf.getString("stream_name");
|
||||||
|
@ -259,7 +260,7 @@ namespace Buffer {
|
||||||
}
|
}
|
||||||
|
|
||||||
while (buffer_running && SS.connected() && conf.is_active){
|
while (buffer_running && SS.connected() && conf.is_active){
|
||||||
fprintf( stderr, "Still running\n" );
|
fprintf(stderr, "Still running\n");
|
||||||
//check for new connections, accept them if there are any
|
//check for new connections, accept them if there are any
|
||||||
//starts a thread for every accepted connection
|
//starts a thread for every accepted connection
|
||||||
incoming = SS.accept(true);
|
incoming = SS.accept(true);
|
||||||
|
|
|
@ -66,11 +66,11 @@ bool Buffer::user::Send(){
|
||||||
} //cancel if not connected
|
} //cancel if not connected
|
||||||
if (myRing->waiting){
|
if (myRing->waiting){
|
||||||
Stream::get()->waitForData();
|
Stream::get()->waitForData();
|
||||||
if( !myRing->waiting ) {
|
if ( !myRing->waiting){
|
||||||
if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){
|
if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){
|
||||||
myRing->playCount --;
|
myRing->playCount--;
|
||||||
if (!myRing->playCount){
|
if ( !myRing->playCount){
|
||||||
fprintf( stderr, "Sending Pausemark\n" );
|
fprintf(stderr, "Sending Pausemark\n");
|
||||||
JSON::Value pausemark;
|
JSON::Value pausemark;
|
||||||
pausemark["datatype"] = "pause_marker";
|
pausemark["datatype"] = "pause_marker";
|
||||||
pausemark["time"] = Stream::get()->getStream()->getPacket(myRing->b)["time"].asInt();
|
pausemark["time"] = Stream::get()->getStream()->getPacket(myRing->b)["time"].asInt();
|
||||||
|
@ -79,9 +79,9 @@ bool Buffer::user::Send(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (myRing->updated){
|
if (myRing->updated){
|
||||||
fprintf( stderr, "Sent new metadata\n" );
|
fprintf(stderr, "Sent new metadata\n");
|
||||||
Stream::get()->getReadLock();
|
Stream::get()->getReadLock();
|
||||||
S.SendNow( Stream::get()->getStream()->metadata.toNetPacked() );
|
S.SendNow(Stream::get()->getStream()->metadata.toNetPacked());
|
||||||
Stream::get()->dropReadLock();
|
Stream::get()->dropReadLock();
|
||||||
myRing->updated = false;
|
myRing->updated = false;
|
||||||
}
|
}
|
||||||
|
@ -105,18 +105,18 @@ bool Buffer::user::Send(){
|
||||||
return false;
|
return false;
|
||||||
} //no next buffer? go in waiting mode.
|
} //no next buffer? go in waiting mode.
|
||||||
myRing->b--;
|
myRing->b--;
|
||||||
if( myRing->updated ) {
|
if (myRing->updated){
|
||||||
fprintf( stderr, "Sent new metadata\n" );
|
fprintf(stderr, "Sent new metadata\n");
|
||||||
Stream::get()->getReadLock();
|
Stream::get()->getReadLock();
|
||||||
S.SendNow( Stream::get()->getStream()->metadata.toNetPacked() );
|
S.SendNow(Stream::get()->getStream()->metadata.toNetPacked());
|
||||||
Stream::get()->dropReadLock();
|
Stream::get()->dropReadLock();
|
||||||
myRing->updated = false;
|
myRing->updated = false;
|
||||||
}
|
}
|
||||||
Stream::get()->dropReadLock();
|
Stream::get()->dropReadLock();
|
||||||
if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){
|
if (Stream::get()->getStream()->getPacket(myRing->b).isMember("keyframe") && myRing->playCount > 0){
|
||||||
myRing->playCount --;
|
myRing->playCount--;
|
||||||
if (!myRing->playCount){
|
if ( !myRing->playCount){
|
||||||
fprintf( stderr, "Sending Pausemark\n" );
|
fprintf(stderr, "Sending Pausemark\n");
|
||||||
JSON::Value pausemark;
|
JSON::Value pausemark;
|
||||||
pausemark["datatype"] = "pause_marker";
|
pausemark["datatype"] = "pause_marker";
|
||||||
pausemark["time"] = Stream::get()->getStream()->getPacket(myRing->b)["time"].asInt();
|
pausemark["time"] = Stream::get()->getStream()->getPacket(myRing->b)["time"].asInt();
|
||||||
|
@ -125,7 +125,7 @@ bool Buffer::user::Send(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}//completed a send
|
} //completed a send
|
||||||
Stream::get()->dropReadLock();
|
Stream::get()->dropReadLock();
|
||||||
return true;
|
return true;
|
||||||
} //send
|
} //send
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace Connector_HTTP {
|
||||||
}else{
|
}else{
|
||||||
asrt.setUpdate(true);
|
asrt.setUpdate(true);
|
||||||
}
|
}
|
||||||
asrt.setVersion(0);//1
|
asrt.setVersion(0); //1
|
||||||
//asrt.setQualityEntry(empty, 0);
|
//asrt.setQualityEntry(empty, 0);
|
||||||
if (metadata.isMember("keynum")){
|
if (metadata.isMember("keynum")){
|
||||||
asrt.setSegmentRun(1, -1, 0);
|
asrt.setSegmentRun(1, -1, 0);
|
||||||
|
@ -49,16 +49,16 @@ namespace Connector_HTTP {
|
||||||
}else{
|
}else{
|
||||||
afrt.setUpdate(true);
|
afrt.setUpdate(true);
|
||||||
}
|
}
|
||||||
afrt.setVersion(0);//1
|
afrt.setVersion(0); //1
|
||||||
afrt.setTimeScale(1000);
|
afrt.setTimeScale(1000);
|
||||||
//afrt.setQualityEntry(empty, 0);
|
//afrt.setQualityEntry(empty, 0);
|
||||||
MP4::afrt_runtable afrtrun;
|
MP4::afrt_runtable afrtrun;
|
||||||
if (metadata.isMember("keynum")){
|
if (metadata.isMember("keynum")){
|
||||||
unsigned long long int firstAvail = metadata["keynum"].size() / 2;
|
unsigned long long int firstAvail = metadata["keynum"].size() / 2;
|
||||||
for (int i = firstAvail; i < metadata["keynum"].size() -2; i++ ) {
|
for (int i = firstAvail; i < metadata["keynum"].size() - 2; i++){
|
||||||
afrtrun.firstFragment = metadata["keynum"][i].asInt();
|
afrtrun.firstFragment = metadata["keynum"][i].asInt();
|
||||||
afrtrun.firstTimestamp = metadata["keytime"][i].asInt();
|
afrtrun.firstTimestamp = metadata["keytime"][i].asInt();
|
||||||
afrtrun.duration = metadata["keytime"][i+1].asInt() - metadata["keytime"][i].asInt();
|
afrtrun.duration = metadata["keytime"][i + 1].asInt() - metadata["keytime"][i].asInt();
|
||||||
afrt.setFragmentRun(afrtrun, i - firstAvail);
|
afrt.setFragmentRun(afrtrun, i - firstAvail);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
@ -80,7 +80,7 @@ namespace Connector_HTTP {
|
||||||
|
|
||||||
MP4::ABST abst;
|
MP4::ABST abst;
|
||||||
abst.setVersion(0);
|
abst.setVersion(0);
|
||||||
if( metadata.isMember("keynum") ) {
|
if (metadata.isMember("keynum")){
|
||||||
abst.setBootstrapinfoVersion(metadata["keynum"][0u].asInt());
|
abst.setBootstrapinfoVersion(metadata["keynum"][0u].asInt());
|
||||||
}else{
|
}else{
|
||||||
abst.setBootstrapinfoVersion(1);
|
abst.setBootstrapinfoVersion(1);
|
||||||
|
@ -134,23 +134,26 @@ namespace Connector_HTTP {
|
||||||
"<deliveryType>streaming</deliveryType>\n"
|
"<deliveryType>streaming</deliveryType>\n"
|
||||||
"<bootstrapInfo profile=\"named\" id=\"bootstrap1\">" + Base64::encode(GenerateBootstrap(MovieId, metadata, 1, 0, 0))
|
"<bootstrapInfo profile=\"named\" id=\"bootstrap1\">" + Base64::encode(GenerateBootstrap(MovieId, metadata, 1, 0, 0))
|
||||||
+ "</bootstrapInfo>\n"
|
+ "</bootstrapInfo>\n"
|
||||||
"<media streamId=\"1\" bootstrapInfoId=\"bootstrap1\" url=\"" + MovieId + "/\">\n"
|
"<media streamId=\"1\" bootstrapInfoId=\"bootstrap1\" url=\"" + MovieId
|
||||||
"<metadata>AgAKb25NZXRhRGF0YQgAAAAAAAl0cmFja2luZm8KAAAAAgMACXRpbWVzY2FsZQBA+GoAAAAAAAAGbGVuZ3RoAEGMcHoQAAAAAAhsYW5ndWFnZQIAA2VuZwARc2FtcGxlZGVzY3JpcHRpb24KAAAAAQMACnNhbXBsZXR5cGUCAARhdmMxAAAJAAAJAwAJdGltZXNjYWxlAEDncAAAAAAAAAZsZW5ndGgAQXtNvTAAAAAACGxhbmd1YWdlAgADZW5nABFzYW1wbGVkZXNjcmlwdGlvbgoAAAABAwAKc2FtcGxldHlwZQIABG1wNGEAAAkAAAkADWF1ZGlvY2hhbm5lbHMAQAAAAAAAAAAAD2F1ZGlvc2FtcGxlcmF0ZQBA53AAAAAAAAAOdmlkZW9mcmFtZXJhdGUAQDf/gi5SciUABmFhY2FvdABAAAAAAAAAAAAIYXZjbGV2ZWwAQD8AAAAAAAAACmF2Y3Byb2ZpbGUAQFNAAAAAAAAADGF1ZGlvY29kZWNpZAIABG1wNGEADHZpZGVvY29kZWNpZAIABGF2YzEABXdpZHRoAECQ4AAAAAAAAAZoZWlnaHQAQIMAAAAAAAAACmZyYW1lV2lkdGgAQJDgAAAAAAAAC2ZyYW1lSGVpZ2h0AECDAAAAAAAAAAxkaXNwbGF5V2lkdGgAQJDgAAAAAAAADWRpc3BsYXlIZWlnaHQAQIMAAAAAAAAADG1vb3Zwb3NpdGlvbgBBmxq2uAAAAAAIZHVyYXRpb24AQIKjqW3oyhIAAAk=</metadata>\n"
|
+ "/\">\n"
|
||||||
"</media>\n"
|
"<metadata>AgAKb25NZXRhRGF0YQgAAAAAAAl0cmFja2luZm8KAAAAAgMACXRpbWVzY2FsZQBA+GoAAAAAAAAGbGVuZ3RoAEGMcHoQAAAAAAhsYW5ndWFnZQIAA2VuZwARc2FtcGxlZGVzY3JpcHRpb24KAAAAAQMACnNhbXBsZXR5cGUCAARhdmMxAAAJAAAJAwAJdGltZXNjYWxlAEDncAAAAAAAAAZsZW5ndGgAQXtNvTAAAAAACGxhbmd1YWdlAgADZW5nABFzYW1wbGVkZXNjcmlwdGlvbgoAAAABAwAKc2FtcGxldHlwZQIABG1wNGEAAAkAAAkADWF1ZGlvY2hhbm5lbHMAQAAAAAAAAAAAD2F1ZGlvc2FtcGxlcmF0ZQBA53AAAAAAAAAOdmlkZW9mcmFtZXJhdGUAQDf/gi5SciUABmFhY2FvdABAAAAAAAAAAAAIYXZjbGV2ZWwAQD8AAAAAAAAACmF2Y3Byb2ZpbGUAQFNAAAAAAAAADGF1ZGlvY29kZWNpZAIABG1wNGEADHZpZGVvY29kZWNpZAIABGF2YzEABXdpZHRoAECQ4AAAAAAAAAZoZWlnaHQAQIMAAAAAAAAACmZyYW1lV2lkdGgAQJDgAAAAAAAAC2ZyYW1lSGVpZ2h0AECDAAAAAAAAAAxkaXNwbGF5V2lkdGgAQJDgAAAAAAAADWRpc3BsYXlIZWlnaHQAQIMAAAAAAAAADG1vb3Zwb3NpdGlvbgBBmxq2uAAAAAAIZHVyYXRpb24AQIKjqW3oyhIAAAk=</metadata>\n"
|
||||||
"</manifest>\n";
|
"</media>\n"
|
||||||
|
"</manifest>\n";
|
||||||
}else{
|
}else{
|
||||||
Result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
|
Result =
|
||||||
"<manifest xmlns=\"http://ns.adobe.com/f4m/1.0\">\n"
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
|
||||||
"<id>" + MovieId + "</id>\n"
|
"<manifest xmlns=\"http://ns.adobe.com/f4m/1.0\">\n"
|
||||||
"<duration>0.00</duration>\n"
|
"<id>" + MovieId + "</id>\n"
|
||||||
"<mimeType>video/mp4</mimeType>\n"
|
"<duration>0.00</duration>\n"
|
||||||
"<streamType>live</streamType>\n"
|
"<mimeType>video/mp4</mimeType>\n"
|
||||||
"<deliveryType>streaming</deliveryType>\n"
|
"<streamType>live</streamType>\n"
|
||||||
"<bootstrapInfo profile=\"named\" id=\"bootstrap1\" url=\"" + MovieId + ".bootstrap\"></bootstrapInfo>\n"
|
"<deliveryType>streaming</deliveryType>\n"
|
||||||
"<media bootstrapInfoId=\"bootstrap1\" url=\"" + MovieId + "/\">"
|
"<bootstrapInfo profile=\"named\" id=\"bootstrap1\" url=\"" + MovieId + ".bootstrap\"></bootstrapInfo>\n"
|
||||||
"<metadata>AgAKb25NZXRhRGF0YQgAAAAAAA9tZXRhZGF0YWNyZWF0b3ICABBBbmV2aWEgVmlhTW90aW9uAAhoYXNBdWRpbwEBAAhoYXNWaWRlbwEBAAhkdXJhdGlvbgBBIWWYAAAAAAAPYXVkaW9zYW1wbGVyYXRlAEBIAAAAAAAAAA1hdWRpb2RhdGFyYXRlAEBgAAAAAAAAAAxhdWRpb2NvZGVjaWQCAARtcDRhAAZhYWNhb3QAQAAAAAAAAAAABXdpZHRoAECQAAAAAAAAAAZoZWlnaHQAQIIAAAAAAAAADXZpZGVvZGF0YXJhdGUAQJ9AAAAAAAAADHZpZGVvY29kZWNpZAIABEFWQzEACmF2Y3Byb2ZpbGUAQFNAAAAAAAAACGF2Y2xldmVsAEA/AAAAAAAAAAAJ</metadata>\n"
|
"<media bootstrapInfoId=\"bootstrap1\" url=\"" + MovieId
|
||||||
"</media>\n"
|
+ "/\">"
|
||||||
"</manifest>\n";
|
"<metadata>AgAKb25NZXRhRGF0YQgAAAAAAA9tZXRhZGF0YWNyZWF0b3ICABBBbmV2aWEgVmlhTW90aW9uAAhoYXNBdWRpbwEBAAhoYXNWaWRlbwEBAAhkdXJhdGlvbgBBIWWYAAAAAAAPYXVkaW9zYW1wbGVyYXRlAEBIAAAAAAAAAA1hdWRpb2RhdGFyYXRlAEBgAAAAAAAAAAxhdWRpb2NvZGVjaWQCAARtcDRhAAZhYWNhb3QAQAAAAAAAAAAABXdpZHRoAECQAAAAAAAAAAZoZWlnaHQAQIIAAAAAAAAADXZpZGVvZGF0YXJhdGUAQJ9AAAAAAAAADHZpZGVvY29kZWNpZAIABEFWQzEACmF2Y3Byb2ZpbGUAQFNAAAAAAAAACGF2Y2xldmVsAEA/AAAAAAAAAAAJ</metadata>\n"
|
||||||
|
"</media>\n"
|
||||||
|
"</manifest>\n";
|
||||||
}
|
}
|
||||||
#if DEBUG >= 8
|
#if DEBUG >= 8
|
||||||
std::cerr << "Sending this manifest:" << std::endl << Result << std::endl;
|
std::cerr << "Sending this manifest:" << std::endl << Result << std::endl;
|
||||||
|
@ -219,7 +222,8 @@ namespace Connector_HTTP {
|
||||||
}
|
}
|
||||||
ss.setBlocking(false);
|
ss.setBlocking(false);
|
||||||
inited = true;
|
inited = true;
|
||||||
while ( !ss.spool()){}
|
while ( !ss.spool()){
|
||||||
|
}
|
||||||
Strm.parsePacket(ss.Received());
|
Strm.parsePacket(ss.Received());
|
||||||
}
|
}
|
||||||
if (HTTP_R.url.find(".bootstrap") != std::string::npos){
|
if (HTTP_R.url.find(".bootstrap") != std::string::npos){
|
||||||
|
@ -301,17 +305,17 @@ namespace Connector_HTTP {
|
||||||
if (ss.spool()){
|
if (ss.spool()){
|
||||||
while (Strm.parsePacket(ss.Received())){
|
while (Strm.parsePacket(ss.Received())){
|
||||||
/*
|
/*
|
||||||
if (Strm.getPacket(0).isMember("time")){
|
if (Strm.getPacket(0).isMember("time")){
|
||||||
if ( !Strm.metadata.isMember("firsttime")){
|
if ( !Strm.metadata.isMember("firsttime")){
|
||||||
Strm.metadata["firsttime"] = Strm.getPacket(0)["time"];
|
Strm.metadata["firsttime"] = Strm.getPacket(0)["time"];
|
||||||
}else{
|
}else{
|
||||||
if ( !Strm.metadata.isMember("length") || Strm.metadata["length"].asInt() == 0){
|
if ( !Strm.metadata.isMember("length") || Strm.metadata["length"].asInt() == 0){
|
||||||
Strm.getPacket(0)["time"] = Strm.getPacket(0)["time"].asInt() - Strm.metadata["firsttime"].asInt();
|
Strm.getPacket(0)["time"] = Strm.getPacket(0)["time"].asInt() - Strm.metadata["firsttime"].asInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Strm.metadata["lasttime"] = Strm.getPacket(0)["time"];
|
Strm.metadata["lasttime"] = Strm.getPacket(0)["time"];
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if (pending_manifest){
|
if (pending_manifest){
|
||||||
HTTP_S.Clean();
|
HTTP_S.Clean();
|
||||||
HTTP_S.SetHeader("Content-Type", "text/xml");
|
HTTP_S.SetHeader("Content-Type", "text/xml");
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace Connector_HTTP {
|
||||||
if (metadata.isNull()){
|
if (metadata.isNull()){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if( metadata.isMember( "keynum" ) ) {
|
if (metadata.isMember("keynum")){
|
||||||
for (int i = 0; i < metadata["keynum"].size(); i++){
|
for (int i = 0; i < metadata["keynum"].size(); i++){
|
||||||
result.push_back(metadata["keynum"][i].asInt());
|
result.push_back(metadata["keynum"][i].asInt());
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ namespace Connector_HTTP {
|
||||||
Result << "#EXTM3U\r\n"
|
Result << "#EXTM3U\r\n"
|
||||||
//"#EXT-X-VERSION:1\r\n"
|
//"#EXT-X-VERSION:1\r\n"
|
||||||
//"#EXT-X-ALLOW-CACHE:YES\r\n"
|
//"#EXT-X-ALLOW-CACHE:YES\r\n"
|
||||||
"#EXT-X-TARGETDURATION:" << (longestFragment / 1000) + 1 << "\r\n"
|
"#EXT-X-TARGETDURATION:" << (longestFragment / 1000) + 1 << "\r\n"
|
||||||
"#EXT-X-MEDIA-SEQUENCE:0\r\n";
|
"#EXT-X-MEDIA-SEQUENCE:0\r\n";
|
||||||
//"#EXT-X-PLAYLIST-TYPE:VOD\r\n";
|
//"#EXT-X-PLAYLIST-TYPE:VOD\r\n";
|
||||||
int lastDuration = 0;
|
int lastDuration = 0;
|
||||||
|
@ -159,7 +159,8 @@ namespace Connector_HTTP {
|
||||||
}
|
}
|
||||||
ss.setBlocking(false);
|
ss.setBlocking(false);
|
||||||
inited = true;
|
inited = true;
|
||||||
while ( !ss.spool()){}
|
while ( !ss.spool()){
|
||||||
|
}
|
||||||
Strm.parsePacket(ss.Received());
|
Strm.parsePacket(ss.Received());
|
||||||
}
|
}
|
||||||
if (HTTP_R.url.find(".m3u") == std::string::npos){
|
if (HTTP_R.url.find(".m3u") == std::string::npos){
|
||||||
|
@ -176,7 +177,7 @@ namespace Connector_HTTP {
|
||||||
ss.SendNow(sstream.str().c_str());
|
ss.SendNow(sstream.str().c_str());
|
||||||
Flash_RequestPending++;
|
Flash_RequestPending++;
|
||||||
}else{
|
}else{
|
||||||
if ( ss.spool()){
|
if (ss.spool()){
|
||||||
Strm.parsePacket(ss.Received());
|
Strm.parsePacket(ss.Received());
|
||||||
}
|
}
|
||||||
if (HTTP_R.url.find(".m3u8") != std::string::npos){
|
if (HTTP_R.url.find(".m3u8") != std::string::npos){
|
||||||
|
@ -340,12 +341,10 @@ namespace Connector_HTTP {
|
||||||
ContCounter = &AudioCounter;
|
ContCounter = &AudioCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//initial packet
|
//initial packet
|
||||||
PackData.Clear();
|
PackData.Clear();
|
||||||
PackData.PID(PIDno);
|
PackData.PID(PIDno);
|
||||||
PackData.ContinuityCounter((*ContCounter)++);
|
PackData.ContinuityCounter(( *ContCounter)++);
|
||||||
PackData.UnitStart(1);
|
PackData.UnitStart(1);
|
||||||
if (IsKeyFrame){
|
if (IsKeyFrame){
|
||||||
PackData.RandomAccess(1);
|
PackData.RandomAccess(1);
|
||||||
|
@ -360,14 +359,13 @@ namespace Connector_HTTP {
|
||||||
while (ToPack.size()){
|
while (ToPack.size()){
|
||||||
PackData.Clear();
|
PackData.Clear();
|
||||||
PackData.PID(PIDno);
|
PackData.PID(PIDno);
|
||||||
PackData.ContinuityCounter((*ContCounter)++);
|
PackData.ContinuityCounter(( *ContCounter)++);
|
||||||
PackData.AddStuffing(PackData.BytesFree() - ToPack.size());
|
PackData.AddStuffing(PackData.BytesFree() - ToPack.size());
|
||||||
PackData.FillFree(ToPack);
|
PackData.FillFree(ToPack);
|
||||||
TSBuf.write(PackData.ToString(), 188);
|
TSBuf.write(PackData.ToString(), 188);
|
||||||
PacketNumber++;
|
PacketNumber++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pending_manifest && !Strm.metadata.isNull()){
|
if (pending_manifest && !Strm.metadata.isNull()){
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace Connector_HTTP {
|
||||||
Result << "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" TimeScale=\"10000000\" ";
|
Result << "<SmoothStreamingMedia MajorVersion=\"2\" MinorVersion=\"0\" TimeScale=\"10000000\" ";
|
||||||
if (metadata.isMember("length") && metadata["length"].asInt() > 0){
|
if (metadata.isMember("length") && metadata["length"].asInt() > 0){
|
||||||
Result << "Duration=\"" << metadata["lastms"].asInt() << "\"";
|
Result << "Duration=\"" << metadata["lastms"].asInt() << "\"";
|
||||||
} else {
|
}else{
|
||||||
Result << "Duration=\"0\" IsLive=\"TRUE\" LookAheadFragmentCount=\"2\" ";
|
Result << "Duration=\"0\" IsLive=\"TRUE\" LookAheadFragmentCount=\"2\" ";
|
||||||
}
|
}
|
||||||
Result << ">\n";
|
Result << ">\n";
|
||||||
|
|
|
@ -154,9 +154,15 @@ int main(int argc, char ** argv){
|
||||||
conf.addOption("account",
|
conf.addOption("account",
|
||||||
JSON::fromString(
|
JSON::fromString(
|
||||||
"{\"long\":\"account\", \"short\":\"a\", \"arg\":\"string\" \"default\":\"\", \"help\":\"A username:password string to create a new account with.\"}"));
|
"{\"long\":\"account\", \"short\":\"a\", \"arg\":\"string\" \"default\":\"\", \"help\":\"A username:password string to create a new account with.\"}"));
|
||||||
conf.addOption("uplink", JSON::fromString("{\"default\":\"\", \"arg\":\"string\", \"help\":\"MistSteward uplink host and port.\", \"short\":\"U\", \"long\":\"uplink\"}"));
|
conf.addOption("uplink",
|
||||||
conf.addOption("uplink-name", JSON::fromString("{\"default\":\"" COMPILED_USERNAME "\", \"arg\":\"string\", \"help\":\"MistSteward uplink username.\", \"short\":\"N\", \"long\":\"uplink-name\"}"));
|
JSON::fromString(
|
||||||
conf.addOption("uplink-pass", JSON::fromString("{\"default\":\"" COMPILED_PASSWORD "\", \"arg\":\"string\", \"help\":\"MistSteward uplink password.\", \"short\":\"P\", \"long\":\"uplink-pass\"}"));
|
"{\"default\":\"\", \"arg\":\"string\", \"help\":\"MistSteward uplink host and port.\", \"short\":\"U\", \"long\":\"uplink\"}"));
|
||||||
|
conf.addOption("uplink-name",
|
||||||
|
JSON::fromString(
|
||||||
|
"{\"default\":\"" COMPILED_USERNAME "\", \"arg\":\"string\", \"help\":\"MistSteward uplink username.\", \"short\":\"N\", \"long\":\"uplink-name\"}"));
|
||||||
|
conf.addOption("uplink-pass",
|
||||||
|
JSON::fromString(
|
||||||
|
"{\"default\":\"" COMPILED_PASSWORD "\", \"arg\":\"string\", \"help\":\"MistSteward uplink password.\", \"short\":\"P\", \"long\":\"uplink-pass\"}"));
|
||||||
conf.parseArgs(argc, argv);
|
conf.parseArgs(argc, argv);
|
||||||
|
|
||||||
std::string account = conf.getString("account");
|
std::string account = conf.getString("account");
|
||||||
|
@ -169,7 +175,7 @@ int main(int argc, char ** argv){
|
||||||
Controller::Storage["account"][uname]["password"] = Secure::md5(pword);
|
Controller::Storage["account"][uname]["password"] = Secure::md5(pword);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string uplink_addr = conf.getString("uplink");
|
std::string uplink_addr = conf.getString("uplink");
|
||||||
std::string uplink_host = "";
|
std::string uplink_host = "";
|
||||||
int uplink_port = 0;
|
int uplink_port = 0;
|
||||||
|
@ -178,10 +184,11 @@ int main(int argc, char ** argv){
|
||||||
if (colon != std::string::npos && colon != 0 && colon != uplink_addr.size()){
|
if (colon != std::string::npos && colon != 0 && colon != uplink_addr.size()){
|
||||||
uplink_host = uplink_addr.substr(0, colon);
|
uplink_host = uplink_addr.substr(0, colon);
|
||||||
uplink_port = atoi(uplink_addr.substr(colon + 1, std::string::npos).c_str());
|
uplink_port = atoi(uplink_addr.substr(colon + 1, std::string::npos).c_str());
|
||||||
Controller::Log("CONF", "Connection to uplink enabled on host " + uplink_host + " and port " + uplink_addr.substr(colon + 1, std::string::npos));
|
Controller::Log("CONF",
|
||||||
|
"Connection to uplink enabled on host " + uplink_host + " and port " + uplink_addr.substr(colon + 1, std::string::npos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
time_t lastuplink = 0;
|
time_t lastuplink = 0;
|
||||||
time_t processchecker = 0;
|
time_t processchecker = 0;
|
||||||
Socket::Server API_Socket = Socket::Server(conf.getInteger("listen_port"), conf.getString("listen_interface"), true);
|
Socket::Server API_Socket = Socket::Server(conf.getInteger("listen_port"), conf.getString("listen_interface"), true);
|
||||||
|
|
Loading…
Add table
Reference in a new issue