From bd5e6d10274358fa734b687862afb43b1ad9464d Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sun, 15 Aug 2021 09:06:55 +0200 Subject: [PATCH] hls: send PCR with every IDR NALU --- internal/hls/tsfile.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/internal/hls/tsfile.go b/internal/hls/tsfile.go index cc897bf0..ef26f1a2 100644 --- a/internal/hls/tsfile.go +++ b/internal/hls/tsfile.go @@ -78,9 +78,14 @@ func (t *tsFile) newReader() io.Reader { } func (t *tsFile) writeH264( - h264SPS []byte, h264PPS []byte, - dts time.Duration, pts time.Duration, isIDR bool, nalus [][]byte) error { + h264SPS []byte, + h264PPS []byte, + dts time.Duration, + pts time.Duration, + isIDR bool, + nalus [][]byte) error { if !t.firstPacketWritten { + t.firstPacketWritten = true t.minPTS = pts t.maxPTS = pts } else { @@ -121,13 +126,8 @@ func (t *tsFile) writeH264( af = &astits.PacketAdaptationField{} } af.RandomAccessIndicator = true - } - if !t.firstPacketWritten { - t.firstPacketWritten = true - if af == nil { - af = &astits.PacketAdaptationField{} - } + // send PCR with every IDR af.HasPCR = true pcr := time.Since(t.startPCR) af.PCR = &astits.ClockReference{Base: int64(pcr.Seconds() * 90000)} @@ -160,6 +160,7 @@ func (t *tsFile) writeH264( func (t *tsFile) writeAAC(sampleRate int, channelCount int, pts time.Duration, au []byte) error { if t.videoTrack == nil { if !t.firstPacketWritten { + t.firstPacketWritten = true t.minPTS = pts t.maxPTS = pts } else { @@ -187,8 +188,8 @@ func (t *tsFile) writeAAC(sampleRate int, channelCount int, pts time.Duration, a RandomAccessIndicator: true, } - if t.videoTrack == nil && !t.firstPacketWritten { - t.firstPacketWritten = true + if t.videoTrack == nil { + // if audio is the only track, send PCR with every AU af.HasPCR = true pcr := time.Since(t.startPCR) af.PCR = &astits.ClockReference{Base: int64(pcr.Seconds() * 90000)}