More HLS optimizations - no changes in functionality.
This commit is contained in:
parent
b79c41e413
commit
d9e0a5187c
1 changed files with 40 additions and 50 deletions
|
@ -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;
|
||||||
|
ContCounter = &VideoCounter;
|
||||||
|
}else if (Strm.lastType() == DTSC::AUDIO){
|
||||||
|
ToPack = TS::GetAudioHeader(Strm.lastData().size(), Strm.metadata["audio"]["init"].asString());
|
||||||
|
ToPack += DTMIData;
|
||||||
|
TS::Packet::PESAudioLeadIn(ToPack, Strm.getPacket(0)["time"].asInt() * 90);
|
||||||
|
PIDno = 0x101;
|
||||||
|
ContCounter = &AudioCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//initial packet
|
||||||
PackData.Clear();
|
PackData.Clear();
|
||||||
PackData.PID(0x100);
|
PackData.PID(PIDno);
|
||||||
PackData.ContinuityCounter(VideoCounter);
|
PackData.ContinuityCounter((*ContCounter)++);
|
||||||
VideoCounter++;
|
|
||||||
if (WritePesHeader){
|
|
||||||
PackData.UnitStart(1);
|
PackData.UnitStart(1);
|
||||||
if (IsKeyFrame){
|
if (IsKeyFrame){
|
||||||
PackData.RandomAccess(1);
|
PackData.RandomAccess(1);
|
||||||
PackData.PCR(TimeStamp);
|
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.AddStuffing(PackData.BytesFree() - ToPack.size());
|
||||||
PackData.FillFree(ToPack);
|
PackData.FillFree(ToPack);
|
||||||
TSBuf.write(PackData.ToString(), 188);
|
TSBuf.write(PackData.ToString(), 188);
|
||||||
PacketNumber++;
|
PacketNumber++;
|
||||||
}
|
|
||||||
}else if (Strm.lastType() == DTSC::AUDIO){
|
//rest of packets
|
||||||
WritePesHeader = true;
|
|
||||||
DTMIData = Strm.lastData();
|
|
||||||
ToPack = TS::GetAudioHeader(DTMIData.size(), Strm.metadata["audio"]["init"].asString());
|
|
||||||
ToPack += DTMIData;
|
|
||||||
while (ToPack.size()){
|
while (ToPack.size()){
|
||||||
PackData.Clear();
|
PackData.Clear();
|
||||||
PackData.PID(0x101);
|
PackData.PID(PIDno);
|
||||||
PackData.ContinuityCounter(AudioCounter);
|
PackData.ContinuityCounter((*ContCounter)++);
|
||||||
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());
|
PackData.AddStuffing(PackData.BytesFree() - ToPack.size());
|
||||||
}
|
|
||||||
int before = ToPack.size();
|
|
||||||
PackData.FillFree(ToPack);
|
PackData.FillFree(ToPack);
|
||||||
TSBuf.write(PackData.ToString(), 188);
|
TSBuf.write(PackData.ToString(), 188);
|
||||||
PacketNumber++;
|
PacketNumber++;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pending_manifest && !Strm.metadata.isNull()){
|
if (pending_manifest && !Strm.metadata.isNull()){
|
||||||
|
|
Loading…
Add table
Reference in a new issue