【问题标题】:How to create a video stream with Gstreamer without RTP?如何在没有 RTP 的情况下使用 Gstreamer 创建视频流?
【发布时间】:2018-12-19 00:47:02
【问题描述】:

我正在尝试使用 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 中翻译这个简单示例的正确方向吗?

【问题讨论】:

    标签: udp video-streaming gstreamer


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的帮助!我将帖子编辑为正确的脚本!请问为什么会延迟视频渲染?我试图在 vanilla UDP 数据包上进行流传输,这样它的流延迟就会减少,因为 gstreamer 不需要订购数据包,但当然要以质量为代价,不是这样吗?
    • 我不知道普通 UDP 流是如何工作的,但是如果您设法在一个 UDP 数据包中正确发送每个视频帧,并且保持顺序 - 那么您可能会看到可接受的延迟。您至少不能保证普通 UDP 中数据包接收的顺序,这就是 RTP 派上用场的地方,因为它引入了 UDP 数据包的排序,然后可以在接收端使用它来重新排序。
    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2013-07-26
    • 2017-11-11
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多