diff --git a/src/output/output_hls.cpp b/src/output/output_hls.cpp index 96ec58bb..3658dff1 100644 --- a/src/output/output_hls.cpp +++ b/src/output/output_hls.cpp @@ -205,6 +205,18 @@ namespace Mist { H.SetHeader("Content-Type", "video/mp2t"); H.StartResponse(H, myConn, VLCworkaround); + + unsigned int fragCounter = myMeta.tracks[vidTrack].missedFrags; + for (std::deque::iterator it = myMeta.tracks[vidTrack].fragments.begin(); it != myMeta.tracks[vidTrack].fragments.end(); it++){ + long long int starttime = myMeta.tracks[vidTrack].getKey(it->getNumber()).getTime(); + if (starttime <= from && starttime + it->getDuration() > from){ + EXTREME_MSG("setting continuity counter for PAT/PMT to %d",fragCounter); + contCounters[0]=fragCounter; //PAT continuity counter + contCounters[4096]=fragCounter; //PMT continuity counter + break; + } + ++fragCounter; + } packCounter = 0; parseData = true; wantRequest = false; diff --git a/src/output/output_ts_base.cpp b/src/output/output_ts_base.cpp index 1a0b453c..4e0681e4 100644 --- a/src/output/output_ts_base.cpp +++ b/src/output/output_ts_base.cpp @@ -17,9 +17,9 @@ namespace Mist { if ( (sendRepeatingHeaders && packCounter % 42 == 0) || !packCounter){ TS::Packet tmpPack; tmpPack.FromPointer(TS::PAT); - tmpPack.setContinuityCounter(++contCounters[tmpPack.getPID()]); + tmpPack.setContinuityCounter(++contCounters[0]); sendTS(tmpPack.checkAndGetBuffer()); - sendTS(TS::createPMT(selectedTracks, myMeta, ++contCounters[tmpPack.getPID()])); + sendTS(TS::createPMT(selectedTracks, myMeta, ++contCounters[4096])); packCounter += 2; } sendTS(packData.checkAndGetBuffer()); @@ -35,6 +35,7 @@ namespace Mist { packData.setContinuityCounter(++contCounters[packData.getPID()]); if (first[currentPacket.getTrackId()]){ packData.setUnitStart(1); + packData.setDiscontinuity(true); if (myMeta.tracks[currentPacket.getTrackId()].type == "video"){ if (currentPacket.getInt("keyframe")){ packData.setRandomAccess(1);