Full Audio and Video now working over HLS for the bipbop clip
This commit is contained in:
parent
0bb5a342e1
commit
f43ff8341f
2 changed files with 32 additions and 44 deletions
|
@ -326,44 +326,36 @@ namespace Connector_HTTP {
|
||||||
}
|
}
|
||||||
int TSType;
|
int TSType;
|
||||||
bool FirstPic = true;
|
bool FirstPic = true;
|
||||||
bool haveInit = false;
|
|
||||||
std::string videoBuffer;
|
std::string videoBuffer;
|
||||||
while( DTMIData.size() ) {
|
while( DTMIData.size() ) {
|
||||||
ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) +
|
ThisNaluSize = (DTMIData[0] << 24) + (DTMIData[1] << 16) +
|
||||||
(DTMIData[2] << 8) + DTMIData[3];
|
(DTMIData[2] << 8) + DTMIData[3];
|
||||||
DTMIData.erase(0,4);//Erase the first four characters;
|
DTMIData.erase(0,4);//Erase the first four characters;
|
||||||
TSType = (int)DTMIData[0] & 0x1F;
|
TSType = (int)DTMIData[0] & 0x1F;
|
||||||
if( TSType == 0x09 ) {
|
if( !( TSType == 0x09 ) ) {
|
||||||
DTMIData.erase(0,ThisNaluSize);
|
if( TSType == 0x05 ) {
|
||||||
continue;
|
if( FirstPic ) {
|
||||||
}
|
|
||||||
if( TSType == 0x07 || TSType == 0x08 ) {
|
|
||||||
haveInit = true;
|
|
||||||
}
|
|
||||||
if( TSType == 0x05 ) {
|
|
||||||
if( FirstPic ) {
|
|
||||||
if( !haveInit ) {
|
|
||||||
ToPack += avccbox.asAnnexB( );
|
ToPack += avccbox.asAnnexB( );
|
||||||
|
FirstPic = false;
|
||||||
|
}
|
||||||
|
if( IsKeyFrame ) {
|
||||||
|
if( !FirstKeyFrame && FirstIDRInKeyFrame ) {
|
||||||
|
ToPack += (char)0x00;
|
||||||
|
FirstIDRInKeyFrame = false;
|
||||||
|
}
|
||||||
|
ToPack.append(TS::ShortNalHeader,3);
|
||||||
}
|
}
|
||||||
FirstPic = false;
|
} else if ( TSType == 0x01 ) {
|
||||||
}
|
if( FirstPic ) {
|
||||||
if( IsKeyFrame ) {
|
|
||||||
if( !FirstKeyFrame && FirstIDRInKeyFrame ) {
|
|
||||||
ToPack += (char)0x00;
|
ToPack += (char)0x00;
|
||||||
FirstIDRInKeyFrame = false;
|
FirstPic = false;
|
||||||
}
|
}
|
||||||
ToPack.append(TS::ShortNalHeader,3);
|
ToPack.append(TS::ShortNalHeader,3);
|
||||||
|
} else {
|
||||||
|
ToPack.append(TS::NalHeader,4);
|
||||||
}
|
}
|
||||||
} else if ( TSType == 0x01 ) {
|
ToPack.append(DTMIData,0,ThisNaluSize);
|
||||||
if( FirstPic ) {
|
|
||||||
ToPack += (char)0x00;
|
|
||||||
FirstPic = false;
|
|
||||||
}
|
|
||||||
ToPack.append(TS::ShortNalHeader,3);
|
|
||||||
} else {
|
|
||||||
ToPack.append(TS::NalHeader,4);
|
|
||||||
}
|
}
|
||||||
ToPack.append(DTMIData,0,ThisNaluSize);
|
|
||||||
DTMIData.erase(0,ThisNaluSize);
|
DTMIData.erase(0,ThisNaluSize);
|
||||||
}
|
}
|
||||||
WritePesHeader = true;
|
WritePesHeader = true;
|
||||||
|
@ -400,15 +392,16 @@ namespace Connector_HTTP {
|
||||||
}
|
}
|
||||||
} else if( Strm.lastType() == DTSC::AUDIO ) {
|
} else if( Strm.lastType() == DTSC::AUDIO ) {
|
||||||
WritePesHeader = true;
|
WritePesHeader = true;
|
||||||
std::string audioBuffer = TS::GetAudioHeader( DTMIData.size(), Strm.metadata["audio"]["init"].asString() );
|
DTMIData = Strm.lastData();
|
||||||
int fullSize = Strm.lastData().size() + audioBuffer.size();
|
ToPack = TS::GetAudioHeader( DTMIData.size(), Strm.metadata["audio"]["init"].asString() );
|
||||||
int currentOffset = 0;
|
ToPack += DTMIData;
|
||||||
while( fullSize ) {
|
TimeStamp = Strm.getPacket(0)["time"].asInt() * 81000;
|
||||||
if ( PacketNumber == 0 ) {
|
while( ToPack.size() ) {
|
||||||
|
if ( ( PacketNumber == 0 ) ) {
|
||||||
PackData.DefaultPAT();
|
PackData.DefaultPAT();
|
||||||
TSBuf << std::string(PackData.ToString(), 188);
|
TSBuf.write(PackData.ToString(), 188);
|
||||||
PackData.DefaultPMT();
|
PackData.DefaultPMT();
|
||||||
TSBuf << std::string(PackData.ToString(), 188);
|
TSBuf.write(PackData.ToString(), 188);
|
||||||
PacketNumber += 2;
|
PacketNumber += 2;
|
||||||
}
|
}
|
||||||
PackData.Clear();
|
PackData.Clear();
|
||||||
|
@ -417,21 +410,16 @@ namespace Connector_HTTP {
|
||||||
AudioCounter ++;
|
AudioCounter ++;
|
||||||
if( WritePesHeader ) {
|
if( WritePesHeader ) {
|
||||||
PackData.UnitStart( 1 );
|
PackData.UnitStart( 1 );
|
||||||
PackData.RandomAccess( 0 );
|
PackData.AddStuffing( 184 - (14 + ToPack.size()) );
|
||||||
PackData.AddStuffing( 184 - (14 + fullSize) );
|
PackData.PESAudioLeadIn( ToPack.size(), TimeStamp );
|
||||||
PackData.PESAudioLeadIn( fullSize, Strm.getPacket(0)["time"].asInt() * 81000 );
|
|
||||||
WritePesHeader = false;
|
WritePesHeader = false;
|
||||||
} else {
|
} else {
|
||||||
PackData.AdaptationField( 1 );
|
PackData.AdaptationField( 1 );
|
||||||
PackData.AddStuffing( 184 - fullSize );
|
PackData.AddStuffing( 184 - ToPack.size() );
|
||||||
}
|
}
|
||||||
PackData.FillFree( audioBuffer );
|
PackData.FillFree( ToPack );
|
||||||
if( PackData.BytesFree( ) ) {
|
TSBuf.write(PackData.ToString(), 188);
|
||||||
currentOffset += PackData.FillFree( Strm.lastData().c_str() + currentOffset, Strm.lastData().size() - currentOffset );
|
|
||||||
}
|
|
||||||
TSBuf << std::string(PackData.ToString(), 188);
|
|
||||||
PacketNumber ++;
|
PacketNumber ++;
|
||||||
fullSize = audioBuffer.size() + (Strm.lastData().size() - currentOffset);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ int main( ) {
|
||||||
(DTMIData[2] << 8) + DTMIData[3];
|
(DTMIData[2] << 8) + DTMIData[3];
|
||||||
DTMIData.erase(0,4);//Erase the first four characters;
|
DTMIData.erase(0,4);//Erase the first four characters;
|
||||||
TSType = (int)DTMIData[0] & 0x1F;
|
TSType = (int)DTMIData[0] & 0x1F;
|
||||||
if( !( TSType == 0x09 ) ) {// || TSType == 0x07 || TSType == 0x08 ) ) {
|
if( !( TSType == 0x09 ) ) {
|
||||||
if( TSType == 0x05 ) {
|
if( TSType == 0x05 ) {
|
||||||
if( FirstPic ) {
|
if( FirstPic ) {
|
||||||
ToPack += avccbox.asAnnexB( );
|
ToPack += avccbox.asAnnexB( );
|
||||||
|
@ -142,7 +142,7 @@ int main( ) {
|
||||||
WritePesHeader = false;
|
WritePesHeader = false;
|
||||||
} else {
|
} else {
|
||||||
PackData.AdaptationField( 1 );
|
PackData.AdaptationField( 1 );
|
||||||
PackData.AddStuffing( 184 - (ToPack.size()) );
|
PackData.AddStuffing( 184 - ToPack.size() );
|
||||||
}
|
}
|
||||||
PackData.FillFree( ToPack );
|
PackData.FillFree( ToPack );
|
||||||
std::cout.write( PackData.ToString(), 188 );
|
std::cout.write( PackData.ToString(), 188 );
|
||||||
|
|
Loading…
Add table
Reference in a new issue