如何在没有 RTP 的情况下使用 Gstreamer 创建视频流?

How to create a video stream with Gstreamer without RTP?

我正在尝试使用 Gstreamer1.0 创建一个简单的 UDP 视频流。 问题是,出于我的项目的目的,我需要能够拥有普通的 UDP 流,但我能找到的几乎所有教程都启用了 RTP。 所以我想翻译这个简单的流:

玩家:

gst-launch-1.0 udpsrc port=5000 !  application/x-rtp, encoding-name=H264,payload=96 !  rtph264depay ! h264parse ! avdec_h264 !  autovideosink

服务器:

gst-launch-1.0 v4l2src !  video/x-raw,width=640,height=480 !  x264enc ! h264parse ! rtph264pay !  udpsink host=127.0.0.1 port=5000

有人可以为我指明正确的方向,告诉我如何仅用 UDP 翻译这个简单示例吗?

你上面提到的管道,在发件人方面我没有看到任何rtp的使用。理想情况下,rtpjpegpay 应该在发送方使用,然后在接收方使用 rtpjpegdepay 支付。 您是否尝试过没有 UDP 的相同管道。它会向您抱怨 udpsink 处的数据包大小超过了缓冲区。您将需要 rtpxpay 将视频流分成 rtp 数据包。

如果您不需要 rtp,请尝试直接发送流,但在 udpsink 处限制缓冲区大小。这也可能导致渲染视频的延迟增加、一些数据包丢失等。尝试在 udpsink 上尝试使用不同的缓冲区 sizes/packet 大小值。不幸的是 udpsink 不提供对配置这些尺寸的直接控制。所以你可能得想办法了。