ffmpeg - 将 RTSP 视频保存并重新流式传输为直接 UDP

标签 ffmpeg udp boost-asio rtsp

我正在尝试编写一个程序,该程序将连接到 RTSP 视频源并使用 UDP 将视频数据重定向到另一个位置。我还保存了 RTSP 数据包,以便能够在稍后的时间重播视频流。现在我的程序可以连接到 RTSP 视频流并重定向和保存,但是当我尝试查看重定向的视频时,使用 VLC 我什么也得不到。

目前,该程序只是从它在其打开的 UDP 套接字中接收的 RTSP 视频数据包中去除数据报,并使用 boost asio 库使用此代码重新发送它们。

newVideoSocket->send_to(&dg.data[0], dg.data.size() ,Endpoint);

当我使用 Wireshark 查看流量时,我发现它实际上正在将数据发送到新地址,并且它被识别为 UDP 数据包,但是当我尝试使用 VLC 查看视频时,什么也没有发生。视频流是Mpeg4,视频编码为H.264,VLC可以播放。

我试图在多播和单播地址上以 UDP 和 RTP 的形式连接到重定向的流,但没有成功。在重新发送数据报之前,我是否需要添加或删除某些内容?还是我在 VLC 中查看它的方式有什么问题?谢谢您的帮助。

最佳答案

要播放原始 UDP 流,VLC 需要有关流的信息(此信息通过 RTSP 在 DESCRIBE 和 SETUP 消息中传输)。尝试创建 sdp 文件,指定端口号、视频类型等(您需要从 serer 读取 DESCRIBE 响应),然后在 vlc 中打开它。

我已经设法让它工作,但是像这样使用 VLC 我遇到了同步和视频输出的问题(视频坏了)。

关于ffmpeg - 将 RTSP 视频保存并重新流式传输为直接 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035364/

相关文章:

c++ - Asio 完成处理程序中的实例变量无效

python-3.x - Discord.py ffmpeg 我已正确设置所有内容,即下载和播放文件,我需要帮助更改已安装文件的目录,代码低于 :

c++ - Boost asio async_accept 在 Windows 下工作,但在 FreeBSD 下失败。怎么了?

c - 我怎么知道任何 h264 文件的持续时间?

java - 将 Python 转换为 Java

ios - codenameone 多播 udp 的 IOS 权利

c++ - 使用 select() 从多个使用 UDP 套接字的对等方接收,同时从 STDIN 获取用户输入

c++ - PC与Arduino串口通信

windows - 将 rtsp-stream 转换为 http 流

ffmpeg限制音频采样率