fix: hls record ts

This commit is contained in:
langhuihui
2025-07-06 10:03:35 +08:00
parent 97d8de523d
commit 747a5a1104
2 changed files with 10 additions and 9 deletions

View File

@@ -130,14 +130,15 @@ func (r *Recorder) Run() (err error) {
}
func (r *Recorder) ProcessADTS(audio *pkg.ADTS) (err error) {
return r.ts.WriteAudioFrame(audio, r.pesAudio)
return r.ts.WriteAudioFrame( r.RecordJob.Subscriber.AudioReader.AbsTime, audio, r.pesAudio)
}
func (r *Recorder) ProcessAnnexB(video *pkg.AnnexB) (err error) {
if r.RecordJob.Subscriber.VideoReader.Value.IDR {
if err = r.writeSegment(video.GetTimestamp(), r.RecordJob.Subscriber.VideoReader.Value.WriteTime); err != nil {
vr := r.RecordJob.Subscriber.VideoReader
if vr.Value.IDR {
if err = r.writeSegment(time.Duration(vr.AbsTime)*time.Millisecond, vr.Value.WriteTime); err != nil {
return
}
}
return r.ts.WriteVideoFrame(video, r.pesVideo)
return r.ts.WriteVideoFrame(vr.AbsTime, video, r.pesVideo)
}

View File

@@ -145,11 +145,11 @@ func (ts *TsInFile) WritePESPacket(frame *mpegts.MpegtsPESFrame, packet mpegts.M
return nil
}
func (ts *TsInFile) WriteAudioFrame(frame *pkg.ADTS, pes *mpegts.MpegtsPESFrame) (err error) {
func (ts *TsInFile) WriteAudioFrame(absTime uint32, frame *pkg.ADTS, pes *mpegts.MpegtsPESFrame) (err error) {
var packet mpegts.MpegTsPESPacket
packet.Header.PesPacketLength = uint16(frame.Size + 8)
packet.Buffers = slices.Clone(frame.Buffers)
packet.Header.Pts = uint64(frame.DTS)
packet.Header.Pts = uint64(absTime) * 90
packet.Header.PacketStartCodePrefix = 0x000001
packet.Header.ConstTen = 0x80
packet.Header.StreamID = mpegts.STREAM_ID_AUDIO
@@ -159,7 +159,7 @@ func (ts *TsInFile) WriteAudioFrame(frame *pkg.ADTS, pes *mpegts.MpegtsPESFrame)
return ts.WritePESPacket(pes, packet)
}
func (ts *TsInFile) WriteVideoFrame(frame *pkg.AnnexB, pes *mpegts.MpegtsPESFrame) (err error) {
func (ts *TsInFile) WriteVideoFrame(absTime uint32, frame *pkg.AnnexB, pes *mpegts.MpegtsPESFrame) (err error) {
var buffer net.Buffers
if frame.Hevc {
buffer = append(buffer, codec.AudNalu)
@@ -177,9 +177,9 @@ func (ts *TsInFile) WriteVideoFrame(frame *pkg.AnnexB, pes *mpegts.MpegtsPESFram
packet.Header.ConstTen = 0x80
packet.Header.StreamID = mpegts.STREAM_ID_VIDEO
packet.Header.PesPacketLength = uint16(pktLength)
packet.Header.Pts = uint64(frame.PTS)
packet.Header.Dts = uint64(absTime) * 90
packet.Header.Pts = uint64(frame.PTS - frame.DTS) + packet.Header.Dts
pes.ProgramClockReferenceBase = packet.Header.Pts
packet.Header.Dts = uint64(frame.DTS)
packet.Header.PtsDtsFlags = 0xC0
packet.Header.PesHeaderDataLength = 10
packet.Buffers = buffer