More HLS optimizations - no changes in functionality.

This commit is contained in:
Thulinma 2013-02-13 21:46:47 +01:00
parent b79c41e413
commit d9e0a5187c

View file

@ -103,7 +103,6 @@ namespace Connector_HTTP {
int ThisNaluSize; int ThisNaluSize;
char VideoCounter = 0; char VideoCounter = 0;
char AudioCounter = 0; char AudioCounter = 0;
bool WritePesHeader;
bool IsKeyFrame; bool IsKeyFrame;
MP4::AVCC avccbox; MP4::AVCC avccbox;
bool haveAvcc = false; bool haveAvcc = false;
@ -288,6 +287,7 @@ namespace Connector_HTTP {
haveAvcc = true; haveAvcc = true;
} }
if (Strm.lastType() == DTSC::VIDEO || Strm.lastType() == DTSC::AUDIO){ if (Strm.lastType() == DTSC::VIDEO || Strm.lastType() == DTSC::AUDIO){
//write PAT and PMT TS packets
if (PacketNumber == 0){ if (PacketNumber == 0){
PackData.DefaultPAT(); PackData.DefaultPAT();
TSBuf.write(PackData.ToString(), 188); TSBuf.write(PackData.ToString(), 188);
@ -295,10 +295,11 @@ namespace Connector_HTTP {
TSBuf.write(PackData.ToString(), 188); TSBuf.write(PackData.ToString(), 188);
PacketNumber += 2; PacketNumber += 2;
} }
int PIDno = 0;
char * ContCounter = 0;
if (Strm.lastType() == DTSC::VIDEO){ if (Strm.lastType() == DTSC::VIDEO){
DTMIData = Strm.lastData();
IsKeyFrame = Strm.getPacket(0).isMember("keyframe"); IsKeyFrame = Strm.getPacket(0).isMember("keyframe");
std::cout << Strm.getPacket(0)["time"].asInt() << std::endl;
if (IsKeyFrame){ if (IsKeyFrame){
TimeStamp = (Strm.getPacket(0)["time"].asInt() * 27000); TimeStamp = (Strm.getPacket(0)["time"].asInt() * 27000);
} }
@ -314,56 +315,45 @@ namespace Connector_HTTP {
DTMIData.erase(0, ThisNaluSize + 4); DTMIData.erase(0, ThisNaluSize + 4);
} }
} }
WritePesHeader = true; TS::Packet::PESVideoLeadIn(ToPack, Strm.getPacket(0)["time"].asInt() * 90);
while (ToPack.size()){ PIDno = 0x100;
PackData.Clear(); ContCounter = &VideoCounter;
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(PackData.BytesFree() - (25 + ToPack.size()));
PackData.PESVideoLeadIn(ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90);
WritePesHeader = false;
}else{
PackData.AdaptationField(1);
PackData.AddStuffing(PackData.BytesFree() - (ToPack.size()));
}
PackData.FillFree(ToPack);
TSBuf.write(PackData.ToString(), 188);
PacketNumber++;
}
}else if (Strm.lastType() == DTSC::AUDIO){ }else if (Strm.lastType() == DTSC::AUDIO){
WritePesHeader = true; ToPack = TS::GetAudioHeader(Strm.lastData().size(), Strm.metadata["audio"]["init"].asString());
DTMIData = Strm.lastData();
ToPack = TS::GetAudioHeader(DTMIData.size(), Strm.metadata["audio"]["init"].asString());
ToPack += DTMIData; ToPack += DTMIData;
while (ToPack.size()){ TS::Packet::PESAudioLeadIn(ToPack, Strm.getPacket(0)["time"].asInt() * 90);
PackData.Clear(); PIDno = 0x101;
PackData.PID(0x101); ContCounter = &AudioCounter;
PackData.ContinuityCounter(AudioCounter);
AudioCounter++;
if (WritePesHeader){
PackData.UnitStart(1);
PackData.AddStuffing(PackData.BytesFree() - (14 + ToPack.size()));
PackData.PESAudioLeadIn(ToPack.size(), Strm.getPacket(0)["time"].asInt() * 90);
WritePesHeader = false;
}else{
PackData.AdaptationField(1);
PackData.AddStuffing(PackData.BytesFree() - ToPack.size());
}
int before = ToPack.size();
PackData.FillFree(ToPack);
TSBuf.write(PackData.ToString(), 188);
PacketNumber++;
}
} }
//initial packet
PackData.Clear();
PackData.PID(PIDno);
PackData.ContinuityCounter((*ContCounter)++);
PackData.UnitStart(1);
if (IsKeyFrame){
PackData.RandomAccess(1);
PackData.PCR(TimeStamp);
}
PackData.AddStuffing(PackData.BytesFree() - ToPack.size());
PackData.FillFree(ToPack);
TSBuf.write(PackData.ToString(), 188);
PacketNumber++;
//rest of packets
while (ToPack.size()){
PackData.Clear();
PackData.PID(PIDno);
PackData.ContinuityCounter((*ContCounter)++);
PackData.AddStuffing(PackData.BytesFree() - ToPack.size());
PackData.FillFree(ToPack);
TSBuf.write(PackData.ToString(), 188);
PacketNumber++;
}
} }
} }
if (pending_manifest && !Strm.metadata.isNull()){ if (pending_manifest && !Strm.metadata.isNull()){