From 3169826b0653e53aaee43ce7be47ffc8b0aef3d6 Mon Sep 17 00:00:00 2001 From: qydysky Date: Thu, 4 Jan 2024 21:00:26 +0800 Subject: [PATCH] =?utf8?q?Fix=20=E9=AB=98=E6=B8=85=E7=8A=B6=E6=80=81?= =?utf8?q?=E4=B8=8B=E5=87=BA=E7=8E=B0=E6=97=B6=E9=97=B4=E6=88=B3=E4=B8=8D?= =?utf8?q?=E5=8C=B9=E9=85=8D=20#96?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Reply/fmp4Decode.go | 9 +++++++-- Reply/stream.go | 3 +++ demo/config/config_K_v.json | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Reply/fmp4Decode.go b/Reply/fmp4Decode.go index d03ded1..b495524 100644 --- a/Reply/fmp4Decode.go +++ b/Reply/fmp4Decode.go @@ -75,6 +75,8 @@ func (t *timeStamp) getT() float64 { type Fmp4Decoder struct { traks map[int]*trak buf *slice.Buf[byte] + + AVTDiff float64 // 音视频时间戳容差 } func (t *Fmp4Decoder) Init_fmp4(buf []byte) (b []byte, err error) { @@ -352,8 +354,11 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte]) } //sync audio timeStamp - if math.Abs(video.getT()-audio.getT()) > 0.1 { - return false, fmt.Errorf("时间戳不匹配%v %v", video.timeStamp, audio.timeStamp) + if t.AVTDiff <= 0.1 { + t.AVTDiff = 0.1 + } + if diff := math.Abs(video.getT() - audio.getT()); diff > t.AVTDiff { + return false, fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff) // copy(video.data, F.Itob64(int64(audio.getT()*float64(video.timescale)))) } diff --git a/Reply/stream.go b/Reply/stream.go index d4249e2..f1bfd68 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -900,6 +900,9 @@ func (t *M4SStream) saveStreamM4s() (e error) { fmp4ListUpdateTo = 5.0 ) + if v, ok := t.common.K_v.LoadV(`fmp4音视频时间戳容差s`).(float64); ok && v > 0.1 { + fmp4Decoder.AVTDiff = v + } if v, ok := t.common.K_v.LoadV(`fmp4切片下载超时s`).(float64); ok && to < int(v) { to = int(v) } diff --git a/demo/config/config_K_v.json b/demo/config/config_K_v.json index 7137078..9b86b9d 100644 --- a/demo/config/config_K_v.json +++ b/demo/config/config_K_v.json @@ -75,6 +75,8 @@ "flv断流续接": true, "fmp4切片下载超时s": 3, "fmp4列表更新超时s": 7, + "fmp4音视频时间戳容差s-help": "默认0.1,小于默认无效,调大可以允许较差的流,但可能会音画不同步", + "fmp4音视频时间戳容差s": 0.2, "分段时长min-help": "=0为不启动功能,>0为指定分钟数时分段", "分段时长min": 0, "直播流保存位置": "./live", -- 2.39.2