使用ffmpeg和live555流式摄像头

时间:2014-06-16 16:03:35

标签: ffmpeg live555

我是live555的新手。

我想使用ffmpeg作为编码器从家庭局域网后面的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数据。我尝试使用rtsp://AA.BB.CC.DD:5555/mpeg2TransportStreamFromUDPSourceTest

在VLC中打开rtsp流

但我在VLC中什么都没得到。我究竟做错了什么?我该如何解决?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

如果你错过了同步字节,它可能是一个流问题 - 尝试使用不同的数据源,看看是否有帮助,尝试.avi文件或.mp4文件,通常.mp4文件很容易流。如果流式传输使用的是.mp4文件,而不是你的mpegts文件,那么它在你的文件中就会出现问题 - ffmpeg试图找出每个文件的位置"框架"或"框架集"数据结束,以便它可以尝试流式传输离散的块。

自从我上次使用这些东西已经超过2年了,所以如果你到了任何地方,请告诉我。

答案 2 :(得分:0)

根据我的记忆,编写DeviceSource类非常简单,您所描述的问题肯定是在live555邮件列表中经常讨论的问题 - 您需要获得批准如果你想做任何与rtsp开发相关的事情,请尽快到列表中。

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

获得编码的帧数据后,将其提供给您的DeviceSource类,它将负责为您传输数据。我希望我手头有代码,但我受到NDA的约束,不会从场所删除代码,虽然一般算法记录在live555网站上,所以我可以在这里解释一下。

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