diff --git a/src/connectors/conn_http_progressive_ogg.cpp b/src/connectors/conn_http_progressive_ogg.cpp index 71e77cdd..87bd1d1e 100644 --- a/src/connectors/conn_http_progressive_ogg.cpp +++ b/src/connectors/conn_http_progressive_ogg.cpp @@ -38,9 +38,16 @@ namespace Connector_HTTP { //OGG specific variables OGG::headerPages oggMeta; OGG::Page curOggPage; - std::map > DTSCBuffer; - std::map prevGran; - + //std::map > DTSCBuffer; + //std::map prevGran; + std::vector curSegTable; + long long int prevID = 0; + long long int prevGran = 0; + std::string pageBuffer; + bool OggEOS = false; + bool OggCont = false; + + unsigned int lastStats = 0;//Indicates the last time that we have sent stats to the server socket. unsigned int seek_sec = 0;//Seek position in ms @@ -157,21 +164,88 @@ namespace Connector_HTTP { oggMeta.readDTSCHeader(Strm.metadata); conn.SendNow((char*)oggMeta.parsedPages.c_str(), oggMeta.parsedPages.size()); progressive_has_sent_header = true; + prevID = Strm.getPacket()["trackid"].asInt(); + prevGran = Strm.getPacket()["granule"].asInt(); } //parse DTSC to Ogg here if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){ long long int temp = Strm.getPacket()["trackid"].asInt(); - if((prevGran[temp] != Strm.getPacket()["granule"].asInt() || prevGran[temp] == -1) && DTSCBuffer[temp].size() != 0){ + /*if((prevGran[temp] != Strm.getPacket()["granule"].asInt() || prevGran[temp] == -1) && DTSCBuffer[temp].size() != 0){ curOggPage.readDTSCVector(DTSCBuffer[temp], oggMeta.DTSCID2OGGSerial[temp], oggMeta.DTSCID2seqNum[temp]); conn.SendNow((char*)curOggPage.getPage(), curOggPage.getPageSize()); DTSCBuffer[temp].clear(); oggMeta.DTSCID2seqNum[temp] ++; + }*/ + if(Strm.getPacket()["trackid"].asInt()!=prevID || Strm.getPacket()["granule"].asInt()!=prevGran || Strm.getPacket()["granule"].asInt() == -1){ + curOggPage.clear(); + curOggPage.setVersion(); + if (OggCont){ + curOggPage.setHeaderType(1);//headertype 1 = Continue Page + }else if (OggEOS){ + curOggPage.setHeaderType(4);//headertype 4 = end of stream + }else{ + curOggPage.setHeaderType(0);//headertype 0 = normal + } + curOggPage.setGranulePosition(prevGran); + curOggPage.setBitstreamSerialNumber(oggMeta.DTSCID2OGGSerial[prevID]); + curOggPage.setPageSequenceNumber(oggMeta.DTSCID2seqNum[prevID]++); + if(!curOggPage.setSegmentTable(curSegTable)){ + std::cerr << "Troubling segTable:"; + for (unsigned int i = 0; i