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

使用GStreamer时如何将rtph264pay的RTP负载类型改为35?

解决GStreamer rtph264pay设置pt=35被覆盖为96的问题

从你的调试日志和描述来看,核心问题是GStreamer的RTP协商机制优先采用了对等端caps中指定的payload类型,而非你手动设置的pt=35。当你设置0-95之间的pt值时(这类值包含部分预定义的RTP负载类型),GStreamer的协商逻辑会默认匹配H264对应的标准动态负载类型96,从而覆盖你的手动设置;而95以上属于纯动态负载类型范围,没有预定义冲突,所以设置能正常生效。

非侵入式解决办法:添加Caps Filter强制指定RTP负载类型

你完全不需要修改GStreamer的源码或pt属性的设置函数,只需要在rtph264pay之后添加一个caps filter,强制指定RTP流的payload为35,就能覆盖协商逻辑的默认行为。

修改后的命令行:

video/x-h264,width=352,height=288,framerate=(fraction)25/1 ! identity sleep-time=15000 sync=true ! h264parse ! rtph264pay config-interval=1 pt=35 ! application/x-rtp,payload=35 ! queue ! udpsink sync=true

Python代码中的对应修改:

在你的gst.parse_launch()字符串中加入! application/x-rtp,payload=35片段,示例如下:

pipeline = gst.parse_launch('video/x-h264,width=352,height=288,framerate=(fraction)25/1 ! identity sleep-time=15000 sync=true ! h264parse ! rtph264pay config-interval=1 pt=35 ! application/x-rtp,payload=35 ! queue ! udpsink sync=true')

原理说明

添加这个caps filter后,会强制约束下游的RTP流必须使用payload=35,阻断了协商逻辑中使用peer caps默认值的路径。此时GStreamer会严格遵循你指定的负载类型,Wireshark抓包就能看到payload类型为35,调试日志也会显示使用你设置的pt值而非peer的96。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:36:34