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

Posted

技术标签:

【中文标题】读取 RTSP 流时强制 FFMPEG 使用 TCP 协议【英文标题】:Force FFMPEG to use TCP protocol when reading a RTSP Stream 【发布时间】:2014-06-07 22:21:52 【问题描述】:

我正在从命令行运行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)

请帮助我。 谢谢。

【问题讨论】:

试试这个:ffplay -fflags nobuffer -flags low_delay -framedrop -strict experimental -rtsp_transport tcp rtsp://ip_address:port 【参考方案1】:

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

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

【讨论】:

为什么-rtsp_transport tcp有两次? @Notinlist 只是忘记将其从原始答案中删除 :) 已编辑! ffmpeg”部分很重要。否则它对我不起作用。 当我尝试这个时,我得到“找不到选项 rtps_transport”。我知道这是一个旧的,但任何建议都会非常感激。 @DaveSims 看起来像是错字:rtsp 不是 rtps

以上是关于读取 RTSP 流时强制 FFMPEG 使用 TCP 协议的主要内容,如果未能解决你的问题,请参考以下文章

基于FFmpeg+rtsp读取摄像头实时图像

使用rtsp流时Tensorflow对象检测速度慢

ffmpeg接收rtsp流问题

当我使用 rtsp 摄像头流时,opencv 视频捕获滞后

从 FFmpeg 流式传输 RTSP 需要哪些步骤?

FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览