From 48bbb8afdbeeca014b4b4d93732a3b886509f714 Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Tue, 8 Jan 2013 14:39:09 +0100 Subject: [PATCH] Re-fixed indenting (post-merge) --- src/conn_http_live.cpp | 212 ++++++++++++++++++------------------- src/conn_ts.cpp | 191 ++++++++++++++++----------------- src/converters/dtsc2ts.cpp | 157 ++++++++++++++------------- 3 files changed, 278 insertions(+), 282 deletions(-) diff --git a/src/conn_http_live.cpp b/src/conn_http_live.cpp index 230ff793..2f7ccc76 100644 --- a/src/conn_http_live.cpp +++ b/src/conn_http_live.cpp @@ -27,9 +27,9 @@ /// Holds everything unique to HTTP Connectors. namespace Connector_HTTP { /// Parses the list of keyframes into 10 second fragments - std::vector keyframesToFragments( JSON::Value & metadata ) { + std::vector keyframesToFragments(JSON::Value & metadata){ std::vector result; - if( metadata.isNull() ) { + if (metadata.isNull()){ return result; } result.push_back(0); @@ -46,37 +46,36 @@ namespace Connector_HTTP { /// Returns a m3u or m3u8 index file std::string BuildIndex(std::string & MovieId, JSON::Value & metadata){ std::stringstream Result; - std::vector fragIndices = keyframesToFragments( metadata ); + std::vector fragIndices = keyframesToFragments(metadata); int longestFragment = 0; for (int i = 1; i < fragIndices.size(); i++){ - int fragDuration = metadata["keytime"][fragIndices[i]].asInt() - metadata["keytime"][fragIndices[i-1]].asInt(); + int fragDuration = metadata["keytime"][fragIndices[i]].asInt() - metadata["keytime"][fragIndices[i - 1]].asInt(); if (fragDuration > longestFragment){ longestFragment = fragDuration; } } if (metadata.isMember("length") && metadata["length"].asInt() > 0){ - Result << - "#EXTM3U\r\n" - //"#EXT-X-VERSION:1\r\n" + Result << "#EXTM3U\r\n" + //"#EXT-X-VERSION:1\r\n" "#EXT-X-MEDIA-SEQUENCE:1\r\n" //"#EXT-X-ALLOW-CACHE:YES\r\n" "#EXT-X-TARGETDURATION:" << (longestFragment / 1000) + 1 << "\r\n"; - //"#EXT-X-PLAYLIST-TYPE:VOD\r\n"; + //"#EXT-X-PLAYLIST-TYPE:VOD\r\n"; int lastDuration = 0; bool writeOffset = true; - fragIndices.push_back( metadata["keytime"][metadata["keytime"].size()-1].asInt() + 1 ); - for (int i = 0; i < fragIndices.size() - 1; i++) { - Result << "#EXTINF:" << (metadata["keytime"][fragIndices[i]].asInt() - lastDuration) / 1000 << "." << std::setw(3) << std::setfill('0') << ((metadata["keytime"][fragIndices[i]].asInt() - lastDuration) % 1000) << ",\r\n" - << fragIndices[i] << "_" << fragIndices[i+1] - fragIndices[i] << ".ts\r\n"; + fragIndices.push_back(metadata["keytime"][metadata["keytime"].size() - 1].asInt() + 1); + for (int i = 0; i < fragIndices.size() - 1; i++){ + Result << "#EXTINF:" << (metadata["keytime"][fragIndices[i]].asInt() - lastDuration) / 1000 << "." << std::setw(3) << std::setfill('0') + << ((metadata["keytime"][fragIndices[i]].asInt() - lastDuration) % 1000) << ",\r\n" << fragIndices[i] << "_" + << fragIndices[i + 1] - fragIndices[i] << ".ts\r\n"; lastDuration = metadata["keytime"][fragIndices[i]].asInt(); } Result << "#EXT-X-ENDLIST"; }else{ - Result << - "#EXTM3U\r\n" - "#EXT-X-VERSION:4\r\n" - "#EXT-X-MEDIA-SEQUENCE:1\r\n" - "#EXT-X-TARGETDURATION:" << ((metadata["video"]["keyms"].asInt() + metadata["video"]["keyvar"].asInt()) / 1000) + 1 << "\r\n"; + Result << "#EXTM3U\r\n" + "#EXT-X-VERSION:4\r\n" + "#EXT-X-MEDIA-SEQUENCE:1\r\n" + "#EXT-X-TARGETDURATION:" << ((metadata["video"]["keyms"].asInt() + metadata["video"]["keyvar"].asInt()) / 1000) + 1 << "\r\n"; } #if DEBUG >= 8 std::cerr << "Sending this index:" << std::endl << Result.str() << std::endl; @@ -114,7 +113,7 @@ namespace Connector_HTTP { bool FirstIDRInKeyFrame; MP4::AVCC avccbox; bool haveAvcc = false; - + std::vector fragIndices; int Segment = -1; @@ -162,11 +161,11 @@ namespace Connector_HTTP { temp = HTTP_R.url.find("_", temp) + 1; int frameCount = atoi(HTTP_R.url.substr(temp, HTTP_R.url.find(".ts", temp) - temp).c_str()); //if( !fragIndices.size() ) { - //fragIndices = keyframesToFragments( Strm.metadata ); + //fragIndices = keyframesToFragments( Strm.metadata ); //} #if DEBUG >= 4 - fprintf( stderr, "Fragment number %d\n", Segment); + fprintf(stderr, "Fragment number %d\n", Segment); //fprintf( stderr, "Fragment indices %d\n", fragIndices.size() ); //fprintf( stderr, "Seeking to fragment %d\n", fragIndices[Segment-1] + 1 ); #endif @@ -176,7 +175,7 @@ namespace Connector_HTTP { sstream << "f " << Segment + 1 << "\n"; #if DEBUG >= 4 - fprintf( stderr, "Frame count %d\n", frameCount); + fprintf(stderr, "Frame count %d\n", frameCount); #endif for (int i = 0; i < frameCount; i++){ sstream << "o \n"; @@ -187,10 +186,10 @@ namespace Connector_HTTP { streamname = HTTP_R.url.substr(5, HTTP_R.url.find("/", 5) - 5); if ( !Strm.metadata.isNull()){ HTTP_S.Clean(); - if (HTTP_R.url.find(".m3u8") != std::string::npos) { - HTTP_S.SetHeader("Content-Type", "application/vnd.apple.mpegurl");//m3u8 + if (HTTP_R.url.find(".m3u8") != std::string::npos){ + HTTP_S.SetHeader("Content-Type", "application/vnd.apple.mpegurl"); //m3u8 }else{ - HTTP_S.SetHeader("Content-Type", "audio/mpegurl");//m3u + HTTP_S.SetHeader("Content-Type", "audio/mpegurl"); //m3u } HTTP_S.SetHeader("Cache-Control", "no-cache"); if (Strm.metadata.isMember("length")){ @@ -262,10 +261,10 @@ namespace Connector_HTTP { receive_marks = true; } std::string manifest = BuildIndex(streamname, Strm.metadata); - if (HTTP_R.url.find(".m3u8") != std::string::npos) { - HTTP_S.SetHeader("Content-Type", "application/vnd.apple.mpegurl");//m3u8 + if (HTTP_R.url.find(".m3u8") != std::string::npos){ + HTTP_S.SetHeader("Content-Type", "application/vnd.apple.mpegurl"); //m3u8 }else{ - HTTP_S.SetHeader("Content-Type", "audio/mpegurl");//m3u + HTTP_S.SetHeader("Content-Type", "audio/mpegurl"); //m3u } HTTP_S.SetBody(manifest); conn.SendNow(HTTP_S.BuildResponse("200", "OK")); @@ -291,10 +290,10 @@ namespace Connector_HTTP { HTTP_S.SetBody(""); HTTP_S.SetHeader("Content-Length", TSBuf.str().size()); conn.SendNow(HTTP_S.BuildResponse("200", "OK")); - conn.SendNow(TSBuf.str().c_str(),TSBuf.str().size()); + conn.SendNow(TSBuf.str().c_str(), TSBuf.str().size()); TSBuf.str(""); Flash_RequestPending--; -fprintf( stderr, "Sent %d packets\n", PacketNumber ); + fprintf(stderr, "Sent %d packets\n", PacketNumber); PacketNumber = 0; #if DEBUG >= 3 fprintf(stderr, "Done\n"); @@ -302,93 +301,56 @@ fprintf( stderr, "Sent %d packets\n", PacketNumber ); } TSBuf.str(""); } - if( !haveAvcc ) { - avccbox.setPayload( Strm.metadata["video"]["init"].asString() ); + if ( !haveAvcc){ + avccbox.setPayload(Strm.metadata["video"]["init"].asString()); haveAvcc = true; } if (Strm.lastType() == DTSC::VIDEO || Strm.lastType() == DTSC::AUDIO){ - if( Strm.lastType() == DTSC::VIDEO ) { + if (Strm.lastType() == DTSC::VIDEO){ DTMIData = Strm.lastData(); - if( Strm.getPacket(0).isMember("keyframe") ) { -fprintf( stderr, " Received Keyframe of size %d\n", Strm.lastData().size() ); + if (Strm.getPacket(0).isMember("keyframe")){ + fprintf(stderr, " Received Keyframe of size %d\n", Strm.lastData().size()); IsKeyFrame = true; FirstIDRInKeyFrame = true; - } else { + }else{ IsKeyFrame = false; FirstKeyFrame = false; } - if( IsKeyFrame ) { - TimeStamp = ( Strm.getPacket(0)["time"].asInt() * 27000 ); + if (IsKeyFrame){ + TimeStamp = (Strm.getPacket(0)["time"].asInt() * 27000); } int TSType; bool FirstPic = true; - while( DTMIData.size() ) { - ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) + - (DTMIData[2] << 8) + DTMIData[3]; - DTMIData.erase(0,4);//Erase the first four characters; + while (DTMIData.size()){ + ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) + (DTMIData[2] << 8) + DTMIData[3]; + DTMIData.erase(0, 4); //Erase the first four characters; TSType = (int)DTMIData[0] & 0x1F; - if( TSType == 0x05 ) { - if( FirstPic ) { - ToPack += avccbox.asAnnexB( ); + if (TSType == 0x05){ + if (FirstPic){ + ToPack += avccbox.asAnnexB(); FirstPic = false; - } - if( IsKeyFrame ) { + } + if (IsKeyFrame){ //if( !FirstKeyFrame && FirstIDRInKeyFrame ) { // ToPack += (char)0x00; // FirstIDRInKeyFrame = false; //} - ToPack.append(TS::NalHeader,4); + ToPack.append(TS::NalHeader, 4); } - } else if ( TSType == 0x01 ) { - if( FirstPic ) { + }else if (TSType == 0x01){ + if (FirstPic){ //ToPack += (char)0x00; FirstPic = false; } - ToPack.append(TS::NalHeader,4); - } else { - ToPack.append(TS::NalHeader,4); + ToPack.append(TS::NalHeader, 4); + }else{ + ToPack.append(TS::NalHeader, 4); } - ToPack.append(DTMIData,0,ThisNaluSize); - DTMIData.erase(0,ThisNaluSize); + ToPack.append(DTMIData, 0, ThisNaluSize); + DTMIData.erase(0, ThisNaluSize); } WritePesHeader = true; - while( ToPack.size() ) { - if ((PacketNumber % 42) == 0) { - PackData.DefaultPAT(); - TSBuf.write(PackData.ToString(), 188); - PackData.DefaultPMT(); - TSBuf.write(PackData.ToString(), 188); - PacketNumber += 2; - } - PackData.Clear(); - PackData.PID( 0x100 ); - PackData.ContinuityCounter( VideoCounter ); - VideoCounter ++; - if( WritePesHeader ) { - PackData.UnitStart( 1 ); - if( IsKeyFrame ) { - PackData.RandomAccess( 1 ); - PackData.PCR( TimeStamp ); - } else { - PackData.AdaptationField( 1 ); - } - PackData.AddStuffing( 184 - (20+ToPack.size()) ); - PackData.PESVideoLeadIn( ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90 ); - WritePesHeader = false; - } else { - PackData.AdaptationField( 1 ); - PackData.AddStuffing( 184 - (ToPack.size()) ); - } - PackData.FillFree( ToPack ); - TSBuf.write(PackData.ToString(), 188); - PacketNumber ++; - } - } else if( Strm.lastType() == DTSC::AUDIO ) { - WritePesHeader = true; - DTMIData = Strm.lastData(); - ToPack = TS::GetAudioHeader( DTMIData.size(), Strm.metadata["audio"]["init"].asString() ); - ToPack += DTMIData; - while( ToPack.size() ) { + while (ToPack.size()){ if ((PacketNumber % 42) == 0){ PackData.DefaultPAT(); TSBuf.write(PackData.ToString(), 188); @@ -397,23 +359,59 @@ fprintf( stderr, " Received Keyframe of size %d\n", Strm.lastData().size() ); PacketNumber += 2; } PackData.Clear(); - PackData.PID( 0x101 ); - PackData.ContinuityCounter( AudioCounter ); - AudioCounter ++; - if( WritePesHeader ) { - PackData.UnitStart( 1 ); - PackData.AddStuffing( 184 - (14 + ToPack.size()) ); - PackData.PESAudioLeadIn( ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90 ); + PackData.PID(0x100); + PackData.ContinuityCounter(VideoCounter); + VideoCounter++; + if (WritePesHeader){ + PackData.UnitStart(1); + if (IsKeyFrame){ + PackData.RandomAccess(1); + PackData.PCR(TimeStamp); + }else{ + PackData.AdaptationField(1); + } + PackData.AddStuffing(184 - (20 + ToPack.size())); + PackData.PESVideoLeadIn(ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90); WritePesHeader = false; - } else { - PackData.AdaptationField( 1 ); - PackData.AddStuffing( 184 - ToPack.size() ); + }else{ + PackData.AdaptationField(1); + PackData.AddStuffing(184 - (ToPack.size())); } - PackData.FillFree( ToPack ); + PackData.FillFree(ToPack); TSBuf.write(PackData.ToString(), 188); - PacketNumber ++; + PacketNumber++; } - } + }else if (Strm.lastType() == DTSC::AUDIO){ + WritePesHeader = true; + DTMIData = Strm.lastData(); + ToPack = TS::GetAudioHeader(DTMIData.size(), Strm.metadata["audio"]["init"].asString()); + ToPack += DTMIData; + while (ToPack.size()){ + if ((PacketNumber % 42) == 0){ + PackData.DefaultPAT(); + TSBuf.write(PackData.ToString(), 188); + PackData.DefaultPMT(); + TSBuf.write(PackData.ToString(), 188); + PacketNumber += 2; + } + PackData.Clear(); + PackData.PID(0x101); + PackData.ContinuityCounter(AudioCounter); + AudioCounter++; + if (WritePesHeader){ + PackData.UnitStart(1); + PackData.AddStuffing(184 - (14 + ToPack.size())); + PackData.PESAudioLeadIn(ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90); + WritePesHeader = false; + }else{ + PackData.AdaptationField(1); + PackData.AddStuffing(184 - ToPack.size()); + } + PackData.FillFree(ToPack); + TSBuf.write(PackData.ToString(), 188); + PacketNumber++; + } + } } } if (pending_manifest && !Strm.metadata.isNull()){ @@ -422,10 +420,10 @@ fprintf( stderr, " Received Keyframe of size %d\n", Strm.lastData().size() ); if (Strm.metadata.isMember("length")){ receive_marks = true; } - if (HTTP_R.url.find(".m3u8") != std::string::npos) { - HTTP_S.SetHeader("Content-Type", "application/vnd.apple.mpegurl");//m3u8 + if (HTTP_R.url.find(".m3u8") != std::string::npos){ + HTTP_S.SetHeader("Content-Type", "application/vnd.apple.mpegurl"); //m3u8 }else{ - HTTP_S.SetHeader("Content-Type", "audio/mpegurl");//m3u + HTTP_S.SetHeader("Content-Type", "audio/mpegurl"); //m3u } std::string manifest = BuildIndex(streamname, Strm.metadata); HTTP_S.SetBody(manifest); diff --git a/src/conn_ts.cpp b/src/conn_ts.cpp index 4ae34fb1..f7547668 100644 --- a/src/conn_ts.cpp +++ b/src/conn_ts.cpp @@ -20,11 +20,10 @@ #include //TS support #include //DTSC support #include //For initdata conversion - /// The main function of the connector /// \param conn A connection with the client /// \param streamname The name of the stream -int TS_Handler( Socket::Connection conn, std::string streamname ) { +int TS_Handler(Socket::Connection conn, std::string streamname){ std::string ToPack; TS::Packet PackData; std::string DTMIData; @@ -39,171 +38,173 @@ int TS_Handler( Socket::Connection conn, std::string streamname ) { bool FirstIDRInKeyFrame; MP4::AVCC avccbox; bool haveAvcc = false; - + DTSC::Stream Strm; bool inited = false; Socket::Connection ss; - - while(conn.connected()) { - if( !inited ) { + + while (conn.connected()){ + if ( !inited){ ss = Util::Stream::getStream(streamname); - if (!ss.connected()){ - #if DEBUG >= 1 + if ( !ss.connected()){ +#if DEBUG >= 1 fprintf(stderr, "Could not connect to server!\n"); - #endif +#endif conn.close(); break; } - ss.SendNow( "p\n" ); - #if DEBUG >= 3 + ss.SendNow("p\n"); +#if DEBUG >= 3 fprintf(stderr, "Everything connected, starting to send video data...\n"); - #endif +#endif inited = true; } if (ss.spool()){ while (Strm.parsePacket(ss.Received())){ - if( !haveAvcc ) { - avccbox.setPayload( Strm.metadata["video"]["init"].asString() ); + if ( !haveAvcc){ + avccbox.setPayload(Strm.metadata["video"]["init"].asString()); haveAvcc = true; } - if( Strm.lastType() == DTSC::VIDEO ) { + if (Strm.lastType() == DTSC::VIDEO){ DTMIData = Strm.lastData(); - if( Strm.getPacket(0).isMember("keyframe") ) { + if (Strm.getPacket(0).isMember("keyframe")){ IsKeyFrame = true; FirstIDRInKeyFrame = true; - } else { + }else{ IsKeyFrame = false; FirstKeyFrame = false; } - if( IsKeyFrame ) { - TimeStamp = ( Strm.getPacket(0)["time"].asInt() * 27000 ); + if (IsKeyFrame){ + TimeStamp = (Strm.getPacket(0)["time"].asInt() * 27000); } int TSType; bool FirstPic = true; - while( DTMIData.size() ) { - ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) + - (DTMIData[2] << 8) + DTMIData[3]; - DTMIData.erase(0,4);//Erase the first four characters; + while (DTMIData.size()){ + ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) + (DTMIData[2] << 8) + DTMIData[3]; + DTMIData.erase(0, 4); //Erase the first four characters; TSType = (int)DTMIData[0] & 0x1F; - if( TSType == 0x05 ) { - if( FirstPic ) { - ToPack += avccbox.asAnnexB( ); + if (TSType == 0x05){ + if (FirstPic){ + ToPack += avccbox.asAnnexB(); FirstPic = false; - } - if( IsKeyFrame ) { - if( !FirstKeyFrame && FirstIDRInKeyFrame ) { - ToPack.append(TS::NalHeader,4); + } + if (IsKeyFrame){ + if ( !FirstKeyFrame && FirstIDRInKeyFrame){ + ToPack.append(TS::NalHeader, 4); FirstIDRInKeyFrame = false; - } else { - ToPack.append(TS::ShortNalHeader,3); + }else{ + ToPack.append(TS::ShortNalHeader, 3); } } - } else if ( TSType == 0x01 ) { - if( FirstPic ) { - ToPack.append(TS::NalHeader,4); + }else if (TSType == 0x01){ + if (FirstPic){ + ToPack.append(TS::NalHeader, 4); FirstPic = false; - } else { - ToPack.append(TS::ShortNalHeader,3); + }else{ + ToPack.append(TS::ShortNalHeader, 3); } - } else { - ToPack.append(TS::NalHeader,4); + }else{ + ToPack.append(TS::NalHeader, 4); } - ToPack.append(DTMIData,0,ThisNaluSize); - DTMIData.erase(0,ThisNaluSize); + ToPack.append(DTMIData, 0, ThisNaluSize); + DTMIData.erase(0, ThisNaluSize); } WritePesHeader = true; - while( ToPack.size() ) { - if ( ( PacketNumber % 42 ) == 0 ) { + while (ToPack.size()){ + if ((PacketNumber % 42) == 0){ PackData.DefaultPAT(); - conn.SendNow( PackData.ToString(), 188 ); + conn.SendNow(PackData.ToString(), 188); PackData.DefaultPMT(); - conn.SendNow( PackData.ToString(), 188 ); + conn.SendNow(PackData.ToString(), 188); PacketNumber += 2; } PackData.Clear(); - PackData.PID( 0x100 ); - PackData.ContinuityCounter( VideoCounter ); - VideoCounter ++; - if( WritePesHeader ) { - PackData.UnitStart( 1 ); - if( IsKeyFrame ) { - PackData.RandomAccess( 1 ); - PackData.PCR( TimeStamp ); - } else { - PackData.AdaptationField( 1 ); + PackData.PID(0x100); + PackData.ContinuityCounter(VideoCounter); + VideoCounter++; + if (WritePesHeader){ + PackData.UnitStart(1); + if (IsKeyFrame){ + PackData.RandomAccess(1); + PackData.PCR(TimeStamp); + }else{ + PackData.AdaptationField(1); } - PackData.AddStuffing( 184 - (20+ToPack.size()) ); - PackData.PESVideoLeadIn( ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90 ); + PackData.AddStuffing(184 - (20 + ToPack.size())); + PackData.PESVideoLeadIn(ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90); WritePesHeader = false; - } else { - PackData.AdaptationField( 1 ); - PackData.AddStuffing( 184 - (ToPack.size()) ); + }else{ + PackData.AdaptationField(1); + PackData.AddStuffing(184 - (ToPack.size())); } - PackData.FillFree( ToPack ); - conn.SendNow( PackData.ToString(), 188 ); - PacketNumber ++; + PackData.FillFree(ToPack); + conn.SendNow(PackData.ToString(), 188); + PacketNumber++; } - } else if( Strm.lastType() == DTSC::AUDIO ) { + }else if (Strm.lastType() == DTSC::AUDIO){ WritePesHeader = true; DTMIData = Strm.lastData(); - ToPack = TS::GetAudioHeader( DTMIData.size(), Strm.metadata["audio"]["init"].asString() ); + ToPack = TS::GetAudioHeader(DTMIData.size(), Strm.metadata["audio"]["init"].asString()); ToPack += DTMIData; - while( ToPack.size() ) { - if ( ( PacketNumber % 42 ) == 0 ) { + while (ToPack.size()){ + if ((PacketNumber % 42) == 0){ PackData.DefaultPAT(); - conn.SendNow( PackData.ToString(), 188 ); + conn.SendNow(PackData.ToString(), 188); PackData.DefaultPMT(); - conn.SendNow( PackData.ToString(), 188 ); + conn.SendNow(PackData.ToString(), 188); PacketNumber += 2; } PackData.Clear(); - PackData.PID( 0x101 ); - PackData.ContinuityCounter( AudioCounter ); - AudioCounter ++; - if( WritePesHeader ) { - PackData.UnitStart( 1 ); - PackData.AddStuffing( 184 - (14 + ToPack.size()) ); - PackData.PESAudioLeadIn( ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90 ); + PackData.PID(0x101); + PackData.ContinuityCounter(AudioCounter); + AudioCounter++; + if (WritePesHeader){ + PackData.UnitStart(1); + PackData.AddStuffing(184 - (14 + ToPack.size())); + PackData.PESAudioLeadIn(ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90); WritePesHeader = false; - } else { - PackData.AdaptationField( 1 ); - PackData.AddStuffing( 184 - (ToPack.size()) ); + }else{ + PackData.AdaptationField(1); + PackData.AddStuffing(184 - (ToPack.size())); } - PackData.FillFree( ToPack ); - conn.SendNow( PackData.ToString(), 188 ); - PacketNumber ++; + PackData.FillFree(ToPack); + conn.SendNow(PackData.ToString(), 188); + PacketNumber++; } } } } } - fprintf( stderr, "Exiting\n" ); + fprintf(stderr, "Exiting\n"); return 0; } int main(int argc, char ** argv){ Util::Config conf(argv[0], PACKAGE_VERSION); - conf.addOption("streamname",JSON::fromString("{\"arg\":\"string\",\"arg_num\":1,\"help\":\"The name of the stream that this connector will transmit.\"}")); + conf.addOption("streamname", + JSON::fromString("{\"arg\":\"string\",\"arg_num\":1,\"help\":\"The name of the stream that this connector will transmit.\"}")); conf.addConnectorOptions(8888); conf.parseArgs(argc, argv); Socket::Server server_socket = Socket::Server(conf.getInteger("listen_port"), conf.getString("listen_interface")); - if (!server_socket.connected()){return 1;} + if ( !server_socket.connected()){ + return 1; + } conf.activate(); - + while (server_socket.connected() && conf.is_active){ Socket::Connection S = server_socket.accept(); - if (S.connected()){//check if the new connection is valid -fprintf(stderr,"Incoming connection\n"); + if (S.connected()){ //check if the new connection is valid + fprintf(stderr, "Incoming connection\n"); pid_t myid = fork(); - if (myid == 0){//if new child, start MAINHANDLER - return TS_Handler(S,conf.getString("streamname")); - }else{//otherwise, do nothing or output debugging text - #if DEBUG >= 3 + if (myid == 0){ //if new child, start MAINHANDLER + return TS_Handler(S, conf.getString("streamname")); + }else{ //otherwise, do nothing or output debugging text +#if DEBUG >= 3 fprintf(stderr, "Spawned new process %i for socket %i\n", (int)myid, S.getSocket()); - #endif +#endif } } - }//while connected + } //while connected server_socket.close(); return 0; -}//main +} //main diff --git a/src/converters/dtsc2ts.cpp b/src/converters/dtsc2ts.cpp index ea4322d5..3aa3355e 100644 --- a/src/converters/dtsc2ts.cpp +++ b/src/converters/dtsc2ts.cpp @@ -10,12 +10,11 @@ #include //TS support #include //DTSC support #include //For initdata conversion - #define VIDEO_SCALING ( 27000000.0 / (double)DTSCStream.metadata["video"]["fpks"].asInt()) #define AUDIO_SCALING ( 27000000.0 / (double)DTSCStream.metadata["audio"]["rate"].asInt()) -int main( ) { - char charBuffer[1024*10]; +int main(){ + char charBuffer[1024 * 10]; unsigned int charCount; std::string StrData; std::string ToPack; @@ -33,126 +32,124 @@ int main( ) { bool FirstIDRInKeyFrame; MP4::AVCC avccbox; bool haveAvcc = false; - - - while( std::cin.good() ) { - if ( DTSCStream.parsePacket( StrData ) ) { - if( !haveAvcc ) { - avccbox.setPayload( DTSCStream.metadata["video"]["init"].asString() ); + + while (std::cin.good()){ + if (DTSCStream.parsePacket(StrData)){ + if ( !haveAvcc){ + avccbox.setPayload(DTSCStream.metadata["video"]["init"].asString()); haveAvcc = true; } - if( DTSCStream.lastType() == DTSC::VIDEO ) { + if (DTSCStream.lastType() == DTSC::VIDEO){ DTMIData = DTSCStream.lastData(); - if( DTSCStream.getPacket(0).isMember("keyframe") ) { + if (DTSCStream.getPacket(0).isMember("keyframe")){ IsKeyFrame = true; FirstIDRInKeyFrame = true; - } else { + }else{ IsKeyFrame = false; FirstKeyFrame = false; } - if( IsKeyFrame ) { - TimeStamp = ( DTSCStream.getPacket(0)["time"].asInt() * 27000 ); + if (IsKeyFrame){ + TimeStamp = (DTSCStream.getPacket(0)["time"].asInt() * 27000); } int TSType; bool FirstPic = true; - while( DTMIData.size() ) { - ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) + - (DTMIData[2] << 8) + DTMIData[3]; - DTMIData.erase(0,4);//Erase the first four characters; + while (DTMIData.size()){ + ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) + (DTMIData[2] << 8) + DTMIData[3]; + DTMIData.erase(0, 4); //Erase the first four characters; TSType = (int)DTMIData[0] & 0x1F; - if( !( TSType == 0x09 ) ) { - if( TSType == 0x05 ) { - if( FirstPic ) { - ToPack += avccbox.asAnnexB( ); + if ( !(TSType == 0x09)){ + if (TSType == 0x05){ + if (FirstPic){ + ToPack += avccbox.asAnnexB(); FirstPic = false; - } - if( IsKeyFrame ) { - if( !FirstKeyFrame && FirstIDRInKeyFrame ) { - ToPack.append(TS::NalHeader,4); + } + if (IsKeyFrame){ + if ( !FirstKeyFrame && FirstIDRInKeyFrame){ + ToPack.append(TS::NalHeader, 4); FirstIDRInKeyFrame = false; - } else { - ToPack.append(TS::ShortNalHeader,3); + }else{ + ToPack.append(TS::ShortNalHeader, 3); } } - } else if ( TSType == 0x01 ) { - if( FirstPic ) { - ToPack.append(TS::NalHeader,4); + }else if (TSType == 0x01){ + if (FirstPic){ + ToPack.append(TS::NalHeader, 4); FirstPic = false; - } else { - ToPack.append(TS::ShortNalHeader,3); + }else{ + ToPack.append(TS::ShortNalHeader, 3); } - } else { - ToPack.append(TS::NalHeader,4); + }else{ + ToPack.append(TS::NalHeader, 4); } - ToPack.append(DTMIData,0,ThisNaluSize); + ToPack.append(DTMIData, 0, ThisNaluSize); } - DTMIData.erase(0,ThisNaluSize); + DTMIData.erase(0, ThisNaluSize); } WritePesHeader = true; - while( ToPack.size() ) { - if ( ( PacketNumber % 42 ) == 0 ) { + while (ToPack.size()){ + if ((PacketNumber % 42) == 0){ PackData.DefaultPAT(); - std::cout.write( PackData.ToString(), 188 ); + std::cout.write(PackData.ToString(), 188); PackData.DefaultPMT(); - std::cout.write( PackData.ToString(), 188 ); + std::cout.write(PackData.ToString(), 188); PacketNumber += 2; } PackData.Clear(); - PackData.PID( 0x100 ); - PackData.ContinuityCounter( VideoCounter ); - VideoCounter ++; - if( WritePesHeader ) { - PackData.UnitStart( 1 ); - if( IsKeyFrame ) { - PackData.RandomAccess( 1 ); - PackData.PCR( TimeStamp ); - } else { - PackData.AdaptationField( 1 ); + PackData.PID(0x100); + PackData.ContinuityCounter(VideoCounter); + VideoCounter++; + if (WritePesHeader){ + PackData.UnitStart(1); + if (IsKeyFrame){ + PackData.RandomAccess(1); + PackData.PCR(TimeStamp); + }else{ + PackData.AdaptationField(1); } - PackData.AddStuffing( 184 - (20+ToPack.size()) ); - PackData.PESVideoLeadIn( ToPack.size(), DTSCStream.getPacket(0)["time"].asInt() * 90 ); + PackData.AddStuffing(184 - (20 + ToPack.size())); + PackData.PESVideoLeadIn(ToPack.size(), DTSCStream.getPacket(0)["time"].asInt() * 90); WritePesHeader = false; - } else { - PackData.AdaptationField( 1 ); - PackData.AddStuffing( 184 - (ToPack.size()) ); + }else{ + PackData.AdaptationField(1); + PackData.AddStuffing(184 - (ToPack.size())); } - PackData.FillFree( ToPack ); - std::cout.write( PackData.ToString(), 188 ); - PacketNumber ++; + PackData.FillFree(ToPack); + std::cout.write(PackData.ToString(), 188); + PacketNumber++; } - } else if( DTSCStream.lastType() == DTSC::AUDIO ) { + }else if (DTSCStream.lastType() == DTSC::AUDIO){ WritePesHeader = true; DTMIData = DTSCStream.lastData(); - ToPack = TS::GetAudioHeader( DTMIData.size(), DTSCStream.metadata["audio"]["init"].asString() ); + ToPack = TS::GetAudioHeader(DTMIData.size(), DTSCStream.metadata["audio"]["init"].asString()); ToPack += DTMIData; - while( ToPack.size() ) { - if ( ( PacketNumber % 42 ) == 0 ) { + while (ToPack.size()){ + if ((PacketNumber % 42) == 0){ PackData.DefaultPAT(); - std::cout.write( PackData.ToString(), 188 ); + std::cout.write(PackData.ToString(), 188); PackData.DefaultPMT(); - std::cout.write( PackData.ToString(), 188 ); + std::cout.write(PackData.ToString(), 188); PacketNumber += 2; } PackData.Clear(); - PackData.PID( 0x101 ); - PackData.ContinuityCounter( AudioCounter ); - AudioCounter ++; - if( WritePesHeader ) { - PackData.UnitStart( 1 ); - PackData.AddStuffing( 184 - (14 + ToPack.size()) ); - PackData.PESAudioLeadIn( ToPack.size(), DTSCStream.getPacket(0)["time"].asInt() * 90 ); + PackData.PID(0x101); + PackData.ContinuityCounter(AudioCounter); + AudioCounter++; + if (WritePesHeader){ + PackData.UnitStart(1); + PackData.AddStuffing(184 - (14 + ToPack.size())); + PackData.PESAudioLeadIn(ToPack.size(), DTSCStream.getPacket(0)["time"].asInt() * 90); WritePesHeader = false; - } else { - PackData.AdaptationField( 1 ); - PackData.AddStuffing( 184 - ToPack.size() ); + }else{ + PackData.AdaptationField(1); + PackData.AddStuffing(184 - ToPack.size()); } - PackData.FillFree( ToPack ); - std::cout.write( PackData.ToString(), 188 ); - PacketNumber ++; + PackData.FillFree(ToPack); + std::cout.write(PackData.ToString(), 188); + PacketNumber++; } } - } else { - std::cin.read(charBuffer, 1024*10); + }else{ + std::cin.read(charBuffer, 1024 * 10); charCount = std::cin.gcount(); StrData.append(charBuffer, charCount); }