1

我是live555的新手。

我想使用 ffmpeg 作为编码器将我的网络摄像头从家庭 LAN 后面的 Windows 7(64 位)机器流式传输到在 WAN 数据中心的 Debian 64 位 linux 机器上运行的 live555 服务器。我想从 ffmpeg 发送 H.264 RTP/UDP 流,并且“testOnDemandRTSPServer”应该将 RTSP 流发送到连接到它的客户端。

我正在使用以下 ffmpeg 命令将 UDP 数据发送到端口 1234,IP 地址 AA.BB.CC.DD

.\ffmpeg.exe -f dshow -i video="Webcam C170":audio="Microphone (3- Webcam C170)" -an 
 -vcodec libx264 -f mpegts udp://AA.BB.CC.DD:1234

在 linux 服务器上,我在端口 5555 上运行 testOnDemandRTSPServer,它需要来自 AA:BB:CC:DD:1234 的原始 UDP 数据。我尝试使用在 VLC 中打开 rtsp 流rtsp://AA.BB.CC.DD:5555/mpeg2TransportStreamFromUDPSourceTest

但我在 VLC 中一无所获。我究竟做错了什么?我该如何解决?

4

3 回答 3

0

您可以尝试的一件事是将 VLC 的日志记录详细级别提高到 2:VLC 需要带内参数集,在这种情况下,它将在消息窗口上打印一条正在等待参数集的调试消息。仅在 SDP 中拥有参数集RTSP DESCRIBE是不够的。IIRC,您可以将 x264 配置为定期或至少在每个 IDR 帧中输出参数集。

您可以尝试的其他事情:您可以在使用 VLC 之前使用 openRTSP 测试流。如果您使用openRTSP -d 5 -Q rtsp://xxx.xxx.xxx.xxx:5555/mpeg2TransportStreamFromUDPSourceTest选项 openRTSP 将在流式传输 5 秒后打印质量统计信息。然后您将能够验证 testOnDemandRTSPServer 确实在中继流,并且 ffmpeg 应用程序和 testOnDemandRTSPServer 之间没有问题。

于 2014-06-16T18:56:27.597 回答
0

你试过不同的流吗?此外,由于我的防火墙问题,我遇到了类似的问题,您可能希望确保您可以通过这些端口实际传输数据。

如果您缺少同步字节,则可能是流问题 - 尝试使用不同的数据源并查看是否有帮助,尝试使用 .avi 文件或 .mp4 文件,通常 .mp4 文件很容易流式传输。如果流式处理适用于 .mp4 文件,而不适用于您的 mpegts 文件,那么这是您文件中的问题 - ffmpeg 试图找出每个“帧”或“帧集”数据的结束位置,以便它可以尝试流离散块。

自从我上次使用这些东西已经有 2 年多了,所以如果你有任何进展,请告诉我。

于 2014-06-18T12:27:14.143 回答
0

据我所知,编写一个 DeviceSource 类并非易事,您所描述的问题绝对是 live555 邮件列表中经常讨论的问题 - 如果您想这样做,您需要尽快让自己被批准加入列表任何与 rtsp 开发相关的东西。

您似乎遇到的问题与以下事实有关,即某些视频格式是在考虑流式传输的情况下编写的,并且 rtsp 服务器可以轻松地流式传输某些格式,因为它们包含“同步字节”和其他可以用来确定的“标记”帧边界在哪里结束。您可以使用的最简单的解决方案是获取相机的 SDK,并使用它从相机请求数据。有许多不同的库和工具包可让您访问来自相机的数据 - 其中之一就是 DirectX SDK。获得相机数据后,您需要将其编码为可流式格式,您可以使用 DirectX 获取原始相机帧,然后使用 ffmpeg(libavcodec、libavformat)将其转换为 mp4 / h264 帧数据。

获得编码帧数据后,将其输入到 DeviceSource 类中,它会为您处理流式传输数据。我希望我手头有代码,但是我受 NDA 的约束,不能从场所中删除代码,尽管 live555 网站上记录了一般算法,所以我可以在这里解释一下。

我希望你有更多的运气。如果您遇到困难,请记住在您的问题中添加代码。现在唯一阻止您的原始计划工作(将文件流式传输到 VLC)是您选择流式传输的文件格式。

于 2014-06-18T12:51:49.313 回答