You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg接收RTSP流音视频不同步求助(含Non-monotonous DTS报错)

解决RTSP推流中的DTS报错与音视频不同步问题

首先,咱们先拆解你遇到的两个核心问题:Non-monotonous DTS报错和视频延迟/音视频不同步。这个DTS报错本质是音频流的解码时间戳出现了非递增的情况,FFmpeg处理时会因为时间戳混乱导致同步逻辑出错,同时网络传输的缓存策略也会放大延迟问题。下面给你针对性的解决方案:

一、修复发送端(VLC)的时间戳与缓存配置

你的VLC推流命令在转码环节可能没有强制规范时间戳,加上缓存过大导致延迟。调整后的命令如下:

cvlc -vvv /home/sana/lab/video-server1/1.avi \
--sout '#transcode{vcodec=h264,vb=3000,scale=Auto,acodec=mp3,ab=128,channels=2,samplerate=44100,fps=25,deinterlace}:rtp{dst=10.0.0.2,port=1234,sdp=rtsp://10.0.0.1:8554/test1.sdp}' \
--clock-synchro=0 \
--sout-mux-caching=100

关键调整点:

  • 将音频采样率改为44100(多数视频源的标准采样率,避免低采样率转换时的时间戳错位);
  • 新增fps=25(替换为你源视频的实际帧率),强制统一视频帧率,避免转码时时间戳跳变;
  • --clock-synchro=0禁用VLC的时钟同步,防止推流时时间戳偏移;
  • --sout-mux-caching=100将推流缓存降至100ms,减少发送端的延迟堆积。

二、优化接收端(FFmpeg)的时间戳修复与延迟控制

FFmpeg默认对异常时间戳的容错性有限,加上RTSP默认用UDP传输容易丢包,导致时间戳混乱。调整后的命令:

ffmpeg -fflags +genpts -rtsp_transport tcp -i rtsp://10.0.0.1:8554/test1.sdp -max_delay 0 -flags low_delay -acodec copy -vcodec copy /home/sana/lab/mrp/test1.avi

关键调整点:

  • -fflags +genpts强制FFmpeg为流生成递增的PTS/DTS,直接解决Non-monotonous DTS报错;
  • -rtsp_transport tcp改用TCP传输RTSP,UDP丢包会导致时间戳断裂,TCP的可靠性能避免这个问题;
  • -max_delay 0和-flags low_delay最小化FFmpeg的解码缓存,减少视频延迟。

三、额外排查:修复源文件本身的时间戳问题

如果上述调整后问题仍存在,可能是源文件1.avi本身的时间戳就不规范。可以先用FFmpeg分析源文件:

ffmpeg -i /home/sana/lab/video-server1/1.avi -v trace 2>&1 | grep -E "dts|pts"

如果输出中出现DTS/PTS跳变的情况,先修复源文件:

ffmpeg -i /home/sana/lab/video-server1/1.avi -c:v h264 -c:a mp3 -fflags +genpts /home/sana/lab/video-server1/fixed.avi

用修复后的fixed.avi作为推流源,再重复前面的推流/拉流操作。

内容的提问来源于stack exchange,提问作者sana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:05:45