You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何通过GStreamer以UDP RTP包传输AV1编码视频

解决方案:GStreamer实现H264转AV1的UDP低延迟传输

核心问题说明

GStreamer目前没有原生的rtpav1pay/rtpav1depay元素,原因是AV1的RTP封装规范(RFC 9042)支持较晚,官方适配尚未完全落地。而rtpgstpay/rtpgstdepay作为通用流封装,需要两端严格匹配caps参数才能工作,极易因格式不兼容失败。

可行方案(低带宽+低延迟优先)

方案1:用VP8 RTP封装临时适配AV1(局域网场景可用)

AV1与VP8同属Google主导的编码体系,部分GStreamer版本可借助VP8的RTP payload封装AV1流(非标准规范,仅适合局域网测试):

服务端管道

gst-launch-1.0 -v rtspsrc location=rtsp://192.168.33.104:8554/vis.0 latency=1 is-live=TRUE ! decodebin ! autovideoconvert ! av1enc tune=zerolatency bitrate=300 speed-preset=ultrafast ! rtpvp8pay ! udpsink host=192.168.33.39 port=8123
  • 注意:需确保GStreamer已安装gst-plugins-good或gst-plugins-bad中的AV1编码插件;若有NVIDIA显卡,可替换av1enc为nvv4l2av1enc,进一步降低延迟。

客户端管道

gst-launch-1.0 udpsrc address=192.168.33.39 port=8123 ! application/x-rtp,media=video,clock-rate=90000,encoding-name=VP8,payload=96 ! rtpvp8depay ! avdec_av1 ! autovideosink sync=false
  • 添加sync=false关闭播放端同步逻辑,减少延迟。

方案2:MP4容器+RTP标准封装(稳定可靠)

通过MP4容器封装AV1流再走RTP传输,是更规范的兼容方案:

服务端管道

gst-launch-1.0 -v rtspsrc location=rtsp://192.168.33.104:8554/vis.0 latency=1 is-live=TRUE ! decodebin ! autovideoconvert ! av1enc tune=zerolatency bitrate=300 speed-preset=ultrafast ! mp4mux fragment-duration=100 ! rtpmp4pay ! udpsink host=192.168.33.39 port=8123
  • fragment-duration=100设置MP4分片为100ms,保证低延迟;可调整为50进一步压缩延迟。

客户端管道

gst-launch-1.0 udpsrc address=192.168.33.39 port=8123 ! application/x-rtp,media=video,clock-rate=90000,payload=96 ! rtpmp4depay ! qtdemux ! avdec_av1 ! autovideosink sync=false

方案3:用RTSP服务替代UDP直传(更稳定)

若局域网环境允许,搭建GStreamer RTSP服务器处理AV1流,无需手动管理RTP封装,还自带丢包重传逻辑:

服务端(Python示例)

import gi
gi.require_version('Gst', '1.0')
gi.require_version('GstRtspServer', '1.0')
from gi.repository import Gst, GstRtspServer, GLib

Gst.init(None)

class TestRtspMediaFactory(GstRtspServer.RTSPMediaFactory):
    def __init__(self):
        GstRtspServer.RTSPMediaFactory.__init__(self)

    def do_create_element(self, url):
        pipeline_str = "( rtspsrc location=rtsp://192.168.33.104:8554/vis.0 latency=1 is-live=TRUE ! decodebin ! autovideoconvert ! av1enc tune=zerolatency bitrate=300 speed-preset=ultrafast ! rtph265pay name=pay0 pt=96 )"
        return Gst.parse_launch(pipeline_str)

class GstServer(GstRtspServer.RTSPServer):
    def __init__(self):
        GstRtspServer.RTSPServer.__init__(self)
        factory = TestRtspMediaFactory()
        factory.set_shared(True)
        mount_points = self.get_mount_points()
        mount_points.add_factory("/av1stream", factory)
        self.attach(None)

if __name__ == '__main__':
    loop = GLib.MainLoop()
    server = GstServer()
    loop.run()

客户端管道

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/av1stream latency=1 ! decodebin ! autovideosink sync=false

关键优化点

  • 编码参数:speed-preset=ultrafast是低延迟核心,牺牲少量画质换取编码速度;tune=zerolatency强制关闭编码器缓存;
  • 延迟控制:所有管道添加sync=false,关闭播放端同步;保持latency=1确保RTSP源最低延迟;
  • 硬件加速:优先使用硬件编码器(如nvv4l2av1enc、vaapienc_av1),编码速度更快,延迟更低。

内容的提问来源于stack exchange,提问作者Picorba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:50:22