强制FFMPEG在读取RTSP流时使用TCP协议

26

我正在使用命令行运行ffmpeg(Windows 7,64位)从RTSP流(来自我的DVR的第二个通道)中获取一帧:

ffmpeg  -i "rtsp://xxx.xxx.xxx.xxx:554/user=xxxx&password=xxxx&channel=2&stream=0.sdp" -rtsp_transport tcp -y video.jpg

运行后,等待约10秒钟,然后我会收到以下消息:

[rtsp @ 026fd840] UDP timeout, retrying with TCP

再次长时间等待(大约2分钟),我得到:

[rtsp @ 028dd840] Could not find codec parameters for stream 0 (Video: h264): unspecified size

我在某处读到说我必须强制使用TCP,因为从UDP更改为TCP将不起作用。

我不明白为什么-rtsp_transport tcp无法工作。

我正在使用ffmpeg version N-62509-g97751e1 built on Apr 17 2014 22:01:31 with gcc 4.8.2 (GCC)

请帮帮我。 谢谢。


1
试一下这个:ffplay -fflags nobuffer -flags low_delay -framedrop -strict experimental -rtsp_transport tcp rtsp://ip_address:port - Teocci
1个回答

45

只需在ffmpeg之后加上-rtsp_transport tcp,即可将其应用于输入流。像这样:

ffmpeg -rtsp_transport tcp -i "rtsp://x.x.x.x:554/user=x&password=x&channel=2&stream=0.sdp" -y video.jpg

1
为什么你要两次使用“-rtsp_transport tcp”? - Notinlist
@Notinlist只是忘记从原始答案中删除它 :) 已编辑! - Fotios Basagiannis
3
“_在ffmpeg之后_”这一部分很重要,否则它对我没用。 - ttous
当我尝试这个时,会出现“找不到选项rtps_transport”的错误。我知道这是一个老问题,但任何建议都将不胜感激。 - Dave Sims
1
@DaveSims 看起来像是笔误: rtsp 而不是 rtps - cmxl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接