自适应流媒体转为 rtsp 中继

自适应流媒体转为 rtsp 中继

我在 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

相关内容