fix(video): 解决 HLS 流中 B 帧导致的 PTS/DTS 回退问题

- 在硬件加速编码参数中添加 -bf 0 选项禁用 B 帧
- 在 CUDA 硬件加速模式下添加 B 帧禁用配置
- 在软件编码模式下添加 B 帧禁用参数设置
- 添加注释说明禁用 B 帧的原因是为了避免 TS 分片边界问题
This commit is contained in:
2026-03-04 11:25:08 +08:00
parent ca90336905
commit d54e6e948f

View File

@@ -63,6 +63,8 @@ def get_video_encode_args(hw_accel: str = HW_ACCEL_NONE, maxrate: Optional[int]
'-level', params['level'], '-level', params['level'],
'-global_quality', params['global_quality'], '-global_quality', params['global_quality'],
'-look_ahead', params['look_ahead'], '-look_ahead', params['look_ahead'],
# 禁用 B 帧,避免独立 TS 分片在 HLS 边界出现 PTS/DTS 回退
'-bf', '0',
] ]
elif hw_accel == HW_ACCEL_CUDA: elif hw_accel == HW_ACCEL_CUDA:
params = VIDEO_ENCODE_PARAMS_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'], '-rc', params['rc'],
'-cq', params['cq'], '-cq', params['cq'],
'-b:v', '0', # 配合 vbr 模式使用 cq '-b:v', '0', # 配合 vbr 模式使用 cq
# 禁用 B 帧,避免独立 TS 分片在 HLS 边界出现 PTS/DTS 回退
'-bf', '0',
] ]
else: else:
# 软件编码(默认) # 软件编码(默认)
@@ -85,6 +89,8 @@ def get_video_encode_args(hw_accel: str = HW_ACCEL_NONE, maxrate: Optional[int]
'-level', params['level'], '-level', params['level'],
'-crf', params['crf'], '-crf', params['crf'],
'-pix_fmt', params['pix_fmt'], '-pix_fmt', params['pix_fmt'],
# 禁用 B 帧,避免独立 TS 分片在 HLS 边界出现 PTS/DTS 回退
'-bf', '0',
] ]
# CRF/CQ + maxrate 上限:保留质量控制的同时限制峰值码率 # CRF/CQ + maxrate 上限:保留质量控制的同时限制峰值码率