使用FFmpeg录制Amcrest RTSP摄像头流时丢包致画质异常求助
解决Amcrest RTSP流FFmpeg录制丢包问题
核心问题分析
你当前命令中两次使用-r 5强制固定帧率,会干扰FFmpeg对摄像头原生RTSP流的帧率识别,容易引发帧丢失;另外默认RTSP传输用UDP,本身就存在丢包风险,加上不必要的转码参数可能加剧性能压力。
优化方案步骤
1. 优先使用TCP传输+直接复制流(无转码)
这是最稳定的方案,避免转码带来的CPU负载,同时TCP比UDP更可靠:
ffmpeg -rtsp_transport tcp -i "rtsp://admin:my-password@192.168.0.186:554/cam/realmonitor?channel=1&subtype=0" \ -c:v copy -c:a copy \ /home/trent/Dev/ffmpeg/test.mp4
说明:-rtsp_transport tcp强制TCP传输;-c:v copy -c:a copy直接复制音视频流,不做编码转换,完全匹配摄像头输出。
2. 增加缓冲区与超时参数(应对网络波动)
如果仍有丢包,增大输入缓冲区并设置超时时间:
ffmpeg -rtsp_transport tcp -buffer_size 10M -stimeout 5000000 \ -i "rtsp://admin:my-password@192.168.0.186:554/cam/realmonitor?channel=1&subtype=0" \ -c:v copy -c:a copy \ /home/trent/Dev/ffmpeg/test.mp4
说明:-buffer_size 10M扩大输入缓冲区,缓存更多流数据;-stimeout 5000000设置5秒超时,避免短暂网络中断导致录制终止。
3. 按需调整输出参数(避免输入侧强制修改)
如果确实需要固定帧率或码率,只在输出侧设置参数,不要修改输入流的识别逻辑:
ffmpeg -rtsp_transport tcp -i "rtsp://admin:my-password@192.168.0.186:554/cam/realmonitor?channel=1&subtype=0" \ -r 5 -c:v libx264 -b:v 1024k -maxrate 10000k -bufsize 10000k -c:a aac \ /home/trent/Dev/ffmpeg/test.mp4
说明:输出侧用-r 5调整帧率,使用libx264和aac编解码器确保输出兼容性。
额外排查建议
- 不要用
sudo运行FFmpeg,除非磁盘写入权限不足,过高权限可能导致不必要的系统资源限制; - 升级FFmpeg到最新稳定版,旧版本可能存在RTSP协议兼容性问题;
- 核对摄像头的RTSP流参数(登录摄像头管理页面查看),确保输出参数与原生流参数匹配。
内容的提问来源于stack exchange,提问作者Baghouse
相关产品推荐
相关产品推荐

