diff --git a/pkg/hls/muxer.go b/pkg/hls/muxer.go index 85102cc..545ed7a 100644 --- a/pkg/hls/muxer.go +++ b/pkg/hls/muxer.go @@ -152,7 +152,7 @@ func (m *Muxer) FeedMpegts(tsPackets []byte, frame *mpegts.Frame, boundary bool) //Log.Debugf("> FeedMpegts. boundary=%v, frame=%p, sid=%d", boundary, frame, frame.Sid) if frame.Sid == mpegts.StreamIdAudio { // TODO(chef): 为什么音频用pts,视频用dts - if err := m.updateFragment(frame.Pts, boundary); err != nil { + if err := m.updateFragment(frame.Pts, boundary, frame); err != nil { Log.Errorf("[%s] update fragment error. err=%+v", m.UniqueKey, err) return } @@ -162,7 +162,7 @@ func (m *Muxer) FeedMpegts(tsPackets []byte, frame *mpegts.Frame, boundary bool) } //Log.Debugf("[%s] WriteFrame A. dts=%d, len=%d", m.UniqueKey, frame.DTS, len(frame.Raw)) } else { - if err := m.updateFragment(frame.Dts, boundary); err != nil { + if err := m.updateFragment(frame.Dts, boundary, frame); err != nil { Log.Errorf("[%s] update fragment error. err=%+v", m.UniqueKey, err) return } @@ -192,8 +192,10 @@ func (m *Muxer) OutPath() string { // // @param boundary: 调用方认为可能是开启新TS切片的时间点 // +// @param frame: 内部只在打日志时使用 +// // @return: 理论上,只有文件操作失败才会返回错误 -func (m *Muxer) updateFragment(ts uint64, boundary bool) error { +func (m *Muxer) updateFragment(ts uint64, boundary bool, frame *mpegts.Frame) error { discont := true // 如果已经有TS切片,检查是否需要强制开启新的切片,以及切片是否发生跳跃 @@ -210,7 +212,7 @@ func (m *Muxer) updateFragment(ts uint64, boundary bool) error { // maxfraglen := uint64(m.config.FragmentDurationMs * 90 * 10) if (ts > m.fragTs && ts-m.fragTs > maxfraglen) || (m.fragTs > ts && m.fragTs-ts > negMaxfraglen) { - Log.Warnf("[%s] force fragment split. fragTs=%d, ts=%d", m.UniqueKey, m.fragTs, ts) + Log.Warnf("[%s] force fragment split. fragTs=%d, ts=%d, frame=%s", m.UniqueKey, m.fragTs, ts, frame.DebugString()) if err := m.closeFragment(false); err != nil { return err diff --git a/pkg/remux/rtmp2mpegts.go b/pkg/remux/rtmp2mpegts.go index e5a3262..5c8637c 100644 --- a/pkg/remux/rtmp2mpegts.go +++ b/pkg/remux/rtmp2mpegts.go @@ -480,8 +480,8 @@ func (s *Rtmp2MpegtsRemuxer) adjustDtsPts(frame *mpegts.Frame) { if s.basicAudioPts == math.MaxUint64 { s.basicAudioPts = frame.Pts } - frame.Dts = subSafe(frame.Dts, s.basicAudioDts) - frame.Pts = subSafe(frame.Pts, s.basicAudioPts) + frame.Dts = subSafe(frame.Dts, s.basicAudioDts, s.UniqueKey, frame) + frame.Pts = subSafe(frame.Pts, s.basicAudioPts, s.UniqueKey, frame) } else if frame.Sid == mpegts.StreamIdVideo { if s.basicVideoDts == math.MaxUint64 { s.basicVideoDts = frame.Dts @@ -489,15 +489,15 @@ func (s *Rtmp2MpegtsRemuxer) adjustDtsPts(frame *mpegts.Frame) { if s.basicVideoPts == math.MaxUint64 { s.basicVideoPts = frame.Pts } - frame.Dts = subSafe(frame.Dts, s.basicVideoDts) - frame.Pts = subSafe(frame.Pts, s.basicVideoPts) + frame.Dts = subSafe(frame.Dts, s.basicVideoDts, s.UniqueKey, frame) + frame.Pts = subSafe(frame.Pts, s.basicVideoPts, s.UniqueKey, frame) } } -func subSafe(a, b uint64) uint64 { +func subSafe(a, b uint64, uk string, frame *mpegts.Frame) uint64 { if a >= b { return a - b } - Log.Warnf("subSafe. a=%d, b=%d", a, b) - return 0 + Log.Warnf("[%s] subSafe. a=%d, b=%d, frame=%s", uk, a, b, frame.DebugString()) + return a }