读取 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 协议的主要内容,如果未能解决你的问题,请参考以下文章