Fixed HLS live playback on Apple devices, by resetting internal timestamps to zero for the beginning of all segments.
This commit is contained in:
parent
d2241886e5
commit
45e82e76eb
3 changed files with 5 additions and 7 deletions
|
@ -225,6 +225,7 @@ namespace Mist {
|
||||||
}
|
}
|
||||||
|
|
||||||
seek(from);
|
seek(from);
|
||||||
|
ts_from = from;
|
||||||
lastVid = from * 90;
|
lastVid = from * 90;
|
||||||
|
|
||||||
H.SetHeader("Content-Type", "video/mp2t");
|
H.SetHeader("Content-Type", "video/mp2t");
|
||||||
|
|
|
@ -4,6 +4,7 @@ namespace Mist {
|
||||||
TSOutput::TSOutput(Socket::Connection & conn) : TS_BASECLASS(conn){
|
TSOutput::TSOutput(Socket::Connection & conn) : TS_BASECLASS(conn){
|
||||||
packCounter=0;
|
packCounter=0;
|
||||||
haveAvcc = false;
|
haveAvcc = false;
|
||||||
|
ts_from = 0;
|
||||||
until=0xFFFFFFFFFFFFFFFFull;
|
until=0xFFFFFFFFFFFFFFFFull;
|
||||||
setBlocking(true);
|
setBlocking(true);
|
||||||
sendRepeatingHeaders = false;
|
sendRepeatingHeaders = false;
|
||||||
|
@ -92,7 +93,7 @@ namespace Mist {
|
||||||
|
|
||||||
while (currPack <= splitCount){
|
while (currPack <= splitCount){
|
||||||
unsigned int alreadySent = 0;
|
unsigned int alreadySent = 0;
|
||||||
bs = TS::Packet::getPESVideoLeadIn((currPack != splitCount ? watKunnenWeIn1Ding : dataLen+extraSize - currPack*watKunnenWeIn1Ding), thisPacket.getTime() * 90, thisPacket.getInt("offset") * 90, !currPack);
|
bs = TS::Packet::getPESVideoLeadIn((currPack != splitCount ? watKunnenWeIn1Ding : dataLen+extraSize - currPack*watKunnenWeIn1Ding), (thisPacket.getTime() - ts_from) * 90, thisPacket.getInt("offset") * 90, !currPack);
|
||||||
fillPacket(bs.data(), bs.size());
|
fillPacket(bs.data(), bs.size());
|
||||||
if (!currPack){
|
if (!currPack){
|
||||||
if (myMeta.tracks[thisPacket.getTrackId()].codec == "H264" && (dataPointer[4] & 0x1f) != 0x09){
|
if (myMeta.tracks[thisPacket.getTrackId()].codec == "H264" && (dataPointer[4] & 0x1f) != 0x09){
|
||||||
|
@ -161,13 +162,8 @@ namespace Mist {
|
||||||
if (appleCompat){
|
if (appleCompat){
|
||||||
tempTime = 0;// myMeta.tracks[thisPacket.getTrackId()].rate / 1000;
|
tempTime = 0;// myMeta.tracks[thisPacket.getTrackId()].rate / 1000;
|
||||||
}else{
|
}else{
|
||||||
tempTime = thisPacket.getTime() * 90;
|
tempTime = (thisPacket.getTime() - ts_from) * 90;
|
||||||
}
|
}
|
||||||
///\todo stuur 70ms aan audio per PES pakket om applecompat overbodig te maken.
|
|
||||||
//static unsigned long long lastSent=thisPacket.getTime() * 90;
|
|
||||||
//if( (thisPacket.getTime() * 90)-lastSent >= 70*90 ){
|
|
||||||
// lastSent=(thisPacket.getTime() * 90);
|
|
||||||
//}
|
|
||||||
bs = TS::Packet::getPESAudioLeadIn(tempLen, tempTime);// myMeta.tracks[thisPacket.getTrackId()].rate / 1000 );
|
bs = TS::Packet::getPESAudioLeadIn(tempLen, tempTime);// myMeta.tracks[thisPacket.getTrackId()].rate / 1000 );
|
||||||
fillPacket(bs.data(), bs.size());
|
fillPacket(bs.data(), bs.size());
|
||||||
if (myMeta.tracks[thisPacket.getTrackId()].codec == "AAC"){
|
if (myMeta.tracks[thisPacket.getTrackId()].codec == "AAC"){
|
||||||
|
|
|
@ -26,6 +26,7 @@ namespace Mist {
|
||||||
MP4::AVCC avccbox;
|
MP4::AVCC avccbox;
|
||||||
bool appleCompat;
|
bool appleCompat;
|
||||||
bool sendRepeatingHeaders;
|
bool sendRepeatingHeaders;
|
||||||
|
long long unsigned int ts_from;
|
||||||
long long unsigned int until;
|
long long unsigned int until;
|
||||||
long long unsigned int lastVid;
|
long long unsigned int lastVid;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue