如何使用GStreamer multiudpsink实现192.168.1.0/24网段广播推流
方案配置说明
192.168.1.0/24网段的广播地址为192.168.1.255,你可以按照以下方式配置实现全网段广播推流:
1. 发送端修改方案
方式一:使用multiudpsink实现
multiudpsink支持配置多个目标地址,直接把广播地址加入地址列表即可满足需求,修改后的流水线如下:
appsrc ! video/x-raw, format=BGR ! queue ! videoconvert ! video/x-raw, format=BGRx ! nvvidconv ! omxh264enc ! video/x-h264, stream-format=byte-stream ! h264parse ! rtph264pay pt=96 config-interval=1 ! multiudpsink clients="192.168.1.255:5200" sync=false
如果后续需要同时推给广播地址+多个单独指定的IP,直接在clients参数里用逗号分隔地址即可,示例:clients="192.168.1.255:5200,192.168.2.10:5200"
方式二:最简广播实现(无需multiudpsink)
如果没有同时推流给多个指定IP的需求,直接修改原有udpsink的host参数为广播地址即可实现相同效果:
appsrc ! video/x-raw, format=BGR ! queue ! videoconvert ! video/x-raw, format=BGRx ! nvvidconv ! omxh264enc ! video/x-h264, stream-format=byte-stream ! h264parse ! rtph264pay pt=96 config-interval=1 ! udpsink host=192.168.1.255 port=5200 sync=false auto-multicast=true
2. 接收端修改方案
需要给udpsrc指定监听端口、匹配RTP负载格式才能正常解码,修改后的流水线如下:
udpsrc port=5200 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtpjitterbuffer mode=0 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! d3dvideosink sync=false
注意事项
- 部分系统默认拦截UDP广播包,需要先关闭发送端、接收端的防火墙,或者放行5200端口的UDP流量
- 如果网段内存在VLAN划分,需要提前配置允许广播包跨VLAN传输,否则只有同VLAN的设备能收到流
内容的提问来源于stack exchange,提问作者Arnaud Tullio
相关产品推荐
相关产品推荐

