mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-27 01:15:52 +08:00
fix: hls record ts
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user