启动流

启动流

我提前为违反 SuperUser 发帖礼仪/规则道歉。这是我的第一篇帖子。

首先,我是一名流媒体视频业余爱好者——我“拼凑”起来的解决方案只是通过谷歌搜索各种网站。

其次,我并不局限于我所选择的任何架构(除了 Fedora 作为流媒体源)。如果人们有更好的解决方案,VLC / Windows 都可以被淘汰。付费解决方案也受欢迎,但开源是首选。

我有 6 个测试站,人们可以在那里进行测试,我想使用两个 C920 Logitech 网络摄像头来监控它们。测试在 Fedora 上运行,利用相同的计算机来传输网络摄像头会很好。所有系统都在 1 千兆网络上运行。

为了设置 gstreamer,我研究了 OZ9AEC 在其网站上设置的示例:

http://www.oz9aec.net/index.php/gstreamer/487-using-the-logitech-c920-webcam-with-gstreamer-12

我采用了 v4l2src 方法。

启动流

因此,为了传输两个摄像头,我运行以下命令。

gst-launch-1.0 v4l2src 设备=/dev/video1!video/x-h264,宽度=1280,高度=720,帧速率=30/1!h264parse!rtph264pay 配置间隔=3!多udpsink 客户端=192.168.2.57:2511,127.0.0.1:2511

gst-launch-1.0 v4l2src 设备=/dev/video2!video/x-h264,宽度=1280,高度=720,帧速率=30/1!h264parse!rtph264pay 配置间隔=3!多udpsink 客户端=192.168.2.57:2512,127.0.0.1:2512

根据我对 gstreamer 的有限理解,这应该流式传输到两个 UDP 客户端——我的 Windows 机器和我的本地主机

启动本地接收器

为了验证事情是否真的在广播,我在同一台机器上本地启动了两个本地 gstreamer 客户端。

gst-launch-1.0 udpsrc 端口=2511 caps='application/x-rtp,媒体=(字符串)视频,时钟速率=(整数)90000,编码名称=(字符串)H264'!rtph264depay!avdec_h264!a utovideosink fps-update-interval=1000 sync=false

gst-launch-1.0 udpsrc 端口=2512 caps='application/x-rtp,媒体=(字符串)视频,时钟速率=(整数)90000,编码名称=(字符串)H264'!rtph264depay!avdec_h264!a utovideosink fps-update-interval=1000 sync=false

我启动了这些命令,然后出现了两个视频屏幕,正在播放视频。

启动我的监测站

下一步是使用 VLC 监控我的 12 个网络摄像头。

我设置了 12 个 sdp 文件,每个文件代表我的每个流

https://stackoverflow.com/questions/13154983/gstreamer-rtp-stream-to-vlc

我选择 VLC 是因为它有一个很好的按钮可以随时记录流,所以我们不仅可以监视,还可以在需要的时候记录。

以下是两个示例 sdp 文件:

192.168.124.1_2511.sdp

v=0 c=IN IP4 192.168.124.1 s=ESP H264+AAC STREAM m=video 2511 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 media=video; clock-rate=90000; encoding-name=H264;

192.168.124.1_2512.sdp

v=0 c=IN IP4 192.168.124.1 s=ESP H264+AAC STREAM m=video 2512 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 media=video; clock-rate=90000; encoding-name=H264;

现在事情变得可疑

如果我启动 VLC 并打开 sdp 文件,则只有第一个打开的文件才会实际连接并显示流。

第二个 VLC 窗口将会放弃并超时。

如果我先启动 192.168.124.1_2511,那么 192.168.124.1_2512 就会失败。

如果我先启动 192.168.124.1_2512,那么 192.168.124.1_2511 就会失败。

但是,如果有 6 个站,我只能获得 6 个视频流,而不是 12 个。

目前的解决方法是购买第二个监控系统,将 192.168.124.1_2511 传输到其中一个,将 192.168.124.1_2512 传输到另一个,但这种方法扩展性不强,因为我们有多个监控站,因此我们需要 6 台计算机,而不是 3 台计算机来为 3 个监控站提供服务。每台计算机都配备了高端显卡,因此成本会迅速增加。

也许问题出在 gstreamer 上,而我在网络上推送了太多数据?也欢迎任何有关减少网络负载的建议。

如果我的帖子中出现任何错误或者违反了发帖礼仪,我再次表示歉意。

提前致谢,并祝美国感恩节快乐,

开发者博士

相关内容