diff --git a/src/connectors/conn_http_progressive_ogg.cpp b/src/connectors/conn_http_progressive_ogg.cpp index e7cf2547..0d86b56e 100644 --- a/src/connectors/conn_http_progressive_ogg.cpp +++ b/src/connectors/conn_http_progressive_ogg.cpp @@ -44,7 +44,6 @@ namespace Connector_HTTP { std::vector curSegTable; long long int currID = 0; long long int currGran = 0; - long long int prevID = 0; long long int prevGran = 0; std::string sendBuffer; bool OggEOS = false; @@ -169,17 +168,11 @@ namespace Connector_HTTP { progressive_has_sent_header = true; //setting sendReady to not ready sendReady.clear(); - - //prevID = Strm.getPacket()["trackid"].asInt(); - //prevGran = Strm.getPacket()["granule"].asInt(); } //parse DTSC to Ogg here if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){ currID = Strm.getPacket()["trackid"].asInt(); currGran = Strm.getPacket()["granule"].asInt(); - if (prevID == 0){ - prevID == currID; - } if (DTSCBuffer.count(currID) && !DTSCBuffer[currID].empty()){ prevGran = DTSCBuffer[currID][0]["granule"].asInt(); }else{ @@ -187,19 +180,12 @@ namespace Connector_HTTP { } if ((prevGran != 0 && (prevGran == -1 || currGran != prevGran)) ){ curOggPage.readDTSCVector(DTSCBuffer[currID], oggMeta.DTSCID2OGGSerial[currID], oggMeta.DTSCID2seqNum[currID]); - //conn.SendNow((char*)curOggPage.getPage(), curOggPage.getPageSize()); - sendBuffer += std::string((char*)curOggPage.getPage(), curOggPage.getPageSize()); + conn.SendNow((char*)curOggPage.getPage(), curOggPage.getPageSize()); DTSCBuffer[currID].clear(); sendReady.insert(currID); oggMeta.DTSCID2seqNum[currID]++; } - if (sendReady.size()==oggMeta.DTSCID2OGGSerial.size()){ - conn.SendNow(sendBuffer); - sendBuffer = ""; - sendReady.clear(); - } DTSCBuffer[currID].push_back(Strm.getPacket()); - prevID = currID; } if (Strm.lastType() == DTSC::PAUSEMARK){ conn.close(); diff --git a/src/converters/ogg2dtsc.cpp b/src/converters/ogg2dtsc.cpp index 69e81216..6d850947 100644 --- a/src/converters/ogg2dtsc.cpp +++ b/src/converters/ogg2dtsc.cpp @@ -20,7 +20,7 @@ namespace Converters{ codecType codec; std::string name; long long unsigned int dtscID; - long long unsigned int lastTime; + double lastTime; bool parsedHeaders; //Codec specific elements theora::header idHeader;//needed to determine keyframe @@ -30,8 +30,8 @@ namespace Converters{ std::string oggBuffer; OGG::Page oggPage; //Read all of std::cin to oggBuffer - int mspft;//microseconds per frame - int mspfv;//microseconds per frame vorbis + double mspft;//microseconds per frame + double mspfv;//microseconds per frame vorbis JSON::Value DTSCOut; JSON::Value DTSCHeader; DTSCHeader.null(); @@ -59,15 +59,13 @@ namespace Converters{ theora::header tempHead; tempHead.read(oggPage.getFullPayload(), oggPage.getPayloadSize()); mspft = (double)(tempHead.getFRD() * 1000) / tempHead.getFRN(); - std::cerr << "Snr " << sNum << "=theora" << std::endl; }else if(memcmp(oggPage.getFullPayload()+1, "vorbis", 6) == 0){ headerSeen += 1; headerWritten = false; - std::cerr << "Snr " << sNum << "=vorbis" << std::endl; trackData[sNum].codec = VORBIS; vorbis::header tempHead; tempHead.read(oggPage.getFullPayload(), oggPage.getPayloadSize()); - mspfv = 1000/tempHead.getAudioSampleRate(); + mspfv = ntohl(tempHead.getAudioSampleRate()) / 1000; }else{ std::cerr << "Unknown Codec, " << std::string(oggPage.getFullPayload()+1, 6)<<" skipping" << std::endl; continue; @@ -89,9 +87,9 @@ namespace Converters{ DTSCOut["granule"] = (long long)temp; DTSCOut["time"] = (long long)trackData[sNum].lastTime; if (trackData[sNum].codec == THEORA){ - trackData[sNum].lastTime += mspft; + trackData[sNum].lastTime += (mspft / 4); }else{ - trackData[sNum].lastTime += mspfv; + trackData[sNum].lastTime += (mspfv / 4); } DTSCOut["data"] = std::string(oggPage.getFullPayload()+offset, (*it)); //segment content put in JSON if (trackData[sNum].codec == THEORA){