我在 Linux 下有一个摄像头/dev/video4
,我想将其传输到服务器mediamtx
。
我可以使用 ffmeg 通过以下命令在本地执行此操作:
ffmpeg -re -i /dev/video4 -f rtsp -rtsp_transport udp -vaapi_device /dev/dri/renderD128 -c:v h264_vaapi -vf 'format=nv12,hwupload' -b:v 5000k -b:a 128k -c:a aac rtsp://user:pass@host:8554/live/fly
它在本地网络上运行良好。
现在我的问题是,这台计算机将放在连接到 4G/5G 网关的汽车上,并且带宽会有很大变化,从低于 1Mbit/s 到 50Mbit/s 上传(大约)。
我正在寻找一种可以测量可用带宽(例如每 10 秒左右)并自动调整比特率的解决方案。
一些信息:
- 最终,我想在 OBS 中显示提要,我使用 mediamtx,它可以工作,但我可以部署其他东西
- 中继服务器(运行 mediamtx)具有我完全控制的公共 ipv4 和 ipv6,因此这边没有 NAT
- 如果直播中断几秒钟并以新的比特率重新启动则没有问题,不必完全“即时”。
- 我愿意接受任何工具,我知道 gstreamer 可以更灵活
答案1
我找到了使用的解决方案gstreamer
。
服务器mediamtx
可以按原样使用,并且whip
应该使用它的端点。
在客户端上:
gst-launch-1.0 whipclientsink signaller::whip-endpoint="http://user:[email protected]:8889/live/fly/whip" name=ws \
v4l2src device=/dev/video4 ! ws.
这需要以下插件:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/tree/main/net/webrtc?ref_type=heads
该webrtc
插件处理自适应编码和拥塞控制。
答案2
-b:v 参数指定视频比特率。您可以调整此值以满足网络需求。
在 StackOverflow 上查看此答案https://stackoverflow.com/a/65884523/704977