首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您如何在同一个wifi网络上向多个客户端流WebCam提要,其中客户端IP可以是随机的,因为DHCP的存在?

您如何在同一个wifi网络上向多个客户端流WebCam提要,其中客户端IP可以是随机的,因为DHCP的存在?
EN

Stack Overflow用户
提问于 2022-01-30 21:06:57
回答 1查看 176关注 0票数 0

我有一个场景,我想通过一个wifi网络向多个显示设备发送一个网络摄像头提要。我试过使用UDP组播,但无线网络似乎被数据包淹没了,视频非常不稳定,或者根本无法工作。就像我可以看到第一帧的视频,然后可能是几个后来的帧,然后它就完全停止了。

目前,我有三个Raspberry Pi (RPi)配置如下:

  • 所有3个RPi都是版本4,带有Raspberry操作系统(buster),而通过以太网(eth0)连接到局域网。
  • 主RPi有一个摄像头和一个USB适配器。 wifi适配器PAU06是Panda◦。[Wifi适配器链路] ◦网络摄像头连接到PRi的摄像头端口。[摄象机链路] 主RPi做而不是有一个显示,只有摄像头。 内部网卡(wlan0)连接到我的家庭路由器,但在这种情况下不应该需要。我只是使用它连接到RPi网络,就像一个跳转点,用于配置目的。 Panda (wlan1)使用静态IP为192.168.44.1,并使用hostapd和◦安全性配置为接入点。 主RPi的DHCP配置为在wlan1上发送范围为192.168.44.10-50的地址。 不设置允许wlan1访问internet的◦路由。
  • 次要的RPi只有内部wifi (wlan0)连接到主RPi的SSID。 ◦--二级RPI的显示器附在上面,本机分辨率为800x480。[显示链路]
  • 我可以很好地在三个RPi之间,但很明显,我必须连接到主,然后再连接到其他两个。

这就是我一直试图设置的,但并不完全正确。我不知道我是否做错了什么,或者gstreamer的多播协议中是否有bug。

基于组播的带摄像头的‣主机

代码语言:javascript
复制
$ sudo route add 224.1.1.1 wlan1
$ gst-launch-1.0 -v v4l2src device=/dev/video0 \
    ! 'video/x-raw,width=800,height=480,framerate=24/1' \
    ! clockoverlay 'time-format=%D %H:%M:%S' \
    ! jpegenc ! rtpjpegpay \
    ! udpsink host=224.1.1.1 port=5000 auto-multicast=true

使用多播显示的‣客户端

代码语言:javascript
复制
$ gst-launch-1.0 udpsrc address=224.1.1.1 port=5000 \
      auto-multicast=true \
    ! application/x-rtp, 'encoding-name=JPEG' \
    ! rtpjpegdepay ! jpegdec ! autovideosink

非常感谢您的任何评论或建议!

注意:使用单播,工作正常,但我只能有一个远程连接,我必须事先知道它的IP地址,我不知道,因为它由DHCP控制。

单播带摄像头的‣主机

代码语言:javascript
复制
$ gst-launch-1.0 -v v4l2src device=/dev/video0 \
    ! 'video/x-raw,width=800,height=480,' framerate=24/1 \
    ! clockoverlay 'time-format=%D %H:%M:%S' \
    ! jpegenc ! rtpjpegpay \
    ! udpsink host=192.168.44.11 port=5000

使用单播显示的‣客户端

代码语言:javascript
复制
$ gst-launch-1.0 udpsrc port=5000 \
    ! application/x-rtp, 'encoding-name=JPEG' \
    ! rtpjpegdepay ! jpegdec ! autovideosink
EN

回答 1

Stack Overflow用户

发布于 2022-01-31 20:36:15

Wifi对多播来说很奇怪。它可以在2.5GHZ的带宽和20%的带宽,在5 5GHz。所以使用单播会更好。

您只需使用tee复制流并将其发送到每个目标(假设它们的IP地址以11、12、13结尾):

代码语言:javascript
复制
gst-launch-1.0 -v v4l2src device=/dev/video0 \
    ! 'video/x-raw,width=800,height=480,' framerate=24/1 \
    ! clockoverlay 'time-format=%D %H:%M:%S' \
    ! jpegenc ! rtpjpegpay \
    ! tee name=stream \
stream. ! queue ! udpsink auto-multicast=0 host=192.168.44.11 port=5000   \
stream. ! queue ! udpsink auto-multicast=0 host=192.168.44.12 port=5000   \
stream. ! queue ! udpsink auto-multicast=0 host=192.168.44.13 port=5000

我建议在接收端添加rtpjitterbuffer:

代码语言:javascript
复制
gst-launch-1.0 udpsrc port=5002 auto-multicast=0 ! application/x-rtp,encoding-name=JPEG ! rtpjitterbuffer latency=500 ! rtpjpegdepay ! jpegdec ! autovideosink
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70918929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档