From d54e6e948f3c4d101fb6fd0cd7e3fc80f2b56619 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 4 Mar 2026 11:25:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(video):=20=E8=A7=A3=E5=86=B3=20HLS=20?= =?UTF-8?q?=E6=B5=81=E4=B8=AD=20B=20=E5=B8=A7=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=20PTS/DTS=20=E5=9B=9E=E9=80=80=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在硬件加速编码参数中添加 -bf 0 选项禁用 B 帧 - 在 CUDA 硬件加速模式下添加 B 帧禁用配置 - 在软件编码模式下添加 B 帧禁用参数设置 - 添加注释说明禁用 B 帧的原因是为了避免 TS 分片边界问题 --- handlers/base.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/handlers/base.py b/handlers/base.py index 93e9a84..6716d3f 100644 --- a/handlers/base.py +++ b/handlers/base.py @@ -63,6 +63,8 @@ def get_video_encode_args(hw_accel: str = HW_ACCEL_NONE, maxrate: Optional[int] '-level', params['level'], '-global_quality', params['global_quality'], '-look_ahead', params['look_ahead'], + # 禁用 B 帧,避免独立 TS 分片在 HLS 边界出现 PTS/DTS 回退 + '-bf', '0', ] elif hw_accel == HW_ACCEL_CUDA: params = VIDEO_ENCODE_PARAMS_CUDA @@ -74,6 +76,8 @@ def get_video_encode_args(hw_accel: str = HW_ACCEL_NONE, maxrate: Optional[int] '-rc', params['rc'], '-cq', params['cq'], '-b:v', '0', # 配合 vbr 模式使用 cq + # 禁用 B 帧,避免独立 TS 分片在 HLS 边界出现 PTS/DTS 回退 + '-bf', '0', ] else: # 软件编码(默认) @@ -85,6 +89,8 @@ def get_video_encode_args(hw_accel: str = HW_ACCEL_NONE, maxrate: Optional[int] '-level', params['level'], '-crf', params['crf'], '-pix_fmt', params['pix_fmt'], + # 禁用 B 帧,避免独立 TS 分片在 HLS 边界出现 PTS/DTS 回退 + '-bf', '0', ] # CRF/CQ + maxrate 上限:保留质量控制的同时限制峰值码率