From 19bdc05f7653237e45ce7c0625b655477cf92113 Mon Sep 17 00:00:00 2001 From: langhuihui <178529795@qq.com> Date: Thu, 28 Sep 2023 08:53:36 +0800 Subject: [PATCH] fix: stop subscribe when error --- hls.go | 4 ++-- mp4.go | 8 ++++++-- raw.go | 9 +++++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/hls.go b/hls.go index 5ee0df8..bc424fd 100644 --- a/hls.go +++ b/hls.go @@ -72,7 +72,7 @@ func (h *HLSRecorder) OnEvent(event any) { ProgramClockReferenceBase: uint64(v.DTS), } h.WriteAudioFrame(v, pes) - h.BLL.WriteTo(h.File) + _, err = h.BLL.WriteTo(h.File) h.Recycle() h.Clear() h.audio_cc = pes.ContinuityCounter @@ -87,7 +87,7 @@ func (h *HLSRecorder) OnEvent(event any) { if err = h.WriteVideoFrame(v, pes); err != nil { return } - h.BLL.WriteTo(h.File) + _, err = h.BLL.WriteTo(h.File) h.Recycle() h.Clear() h.video_cc = pes.ContinuityCounter diff --git a/mp4.go b/mp4.go index 74474e9..f83368f 100644 --- a/mp4.go +++ b/mp4.go @@ -80,11 +80,15 @@ func (r *MP4Recorder) OnEvent(event any) { } else { audioData = util.ConcatBuffers(append(net.Buffers{v.ADTS.Value}, v.AUList.ToBuffers()...)) } - r.Write(r.audioId, audioData, uint64(v.AbsTime+(v.PTS-v.DTS)/90), uint64(v.AbsTime)) + if err = r.Write(r.audioId, audioData, uint64(v.AbsTime+(v.PTS-v.DTS)/90), uint64(v.AbsTime)); err != nil { + r.Stop(zap.Error(err)) + } } case VideoFrame: if r.videoId != 0 { - r.Write(r.videoId, util.ConcatBuffers(v.GetAnnexB()), uint64(v.AbsTime+(v.PTS-v.DTS)/90), uint64(v.AbsTime)) + if err = r.Write(r.videoId, util.ConcatBuffers(v.GetAnnexB()), uint64(v.AbsTime+(v.PTS-v.DTS)/90), uint64(v.AbsTime)); err != nil { + r.Stop(zap.Error(err)) + } } } } diff --git a/raw.go b/raw.go index 322b501..e706ef4 100644 --- a/raw.go +++ b/raw.go @@ -1,6 +1,7 @@ package record import ( + "go.uber.org/zap" . "m7s.live/engine/v4" "m7s.live/engine/v4/codec" "m7s.live/engine/v4/track" @@ -71,10 +72,14 @@ func (r *RawRecorder) OnEvent(event any) { r.AddTrack(v) case AudioFrame: r.Recorder.OnEvent(event) - v.WriteRawTo(r) + if _, err := v.WriteRawTo(r); err != nil { + r.Stop(zap.Error(err)) + } case VideoFrame: r.Recorder.OnEvent(event) - v.WriteAnnexBTo(r) + if _, err := v.WriteAnnexBTo(r); err != nil { + r.Stop(zap.Error(err)) + } default: r.IO.OnEvent(v) }