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