我提前为违反 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 上,而我在网络上推送了太多数据?也欢迎任何有关减少网络负载的建议。
如果我的帖子中出现任何错误或者违反了发帖礼仪,我再次表示歉意。
提前致谢,并祝美国感恩节快乐,
开发者博士