1

我正在使用 gst for python 从文件中流式传输 h264,并使用 gst.parse_launch(...) 触发视频发送。我需要将有效负载类型从默认的 96 更改为 35。根据示例和文档,似乎应该可以通过在 rtph264pay 上设置 pt 属性来做到这一点,“ rtph264pay pt=35 ”。注意:BOSCH 过去在发送 h264 数据时使用 35

如果将该值设置为 0-95 之间,则在检查 Wireshark 中的 rtp 数据包时,我看到它仍设置为 96。将值设置为 95 以上被接受并进入发送的 rtp 数据包。

这里的另一个问题是试图实现几乎相同的东西,但在接收端并用 C 而不是 python 实现。 Gstreamer、rtspsrc 和有效负载类型

文档示例: https ://gstreamer.freedesktop.org/documentation/tools/gst-launch.html请参阅网络流式传输

基本 rtp 有效负载类具有以下属性: https://www.freedesktop.org/software/gstreamer-sdk/data/docs/latest/gst-plugins-base-libs-0.10/gst-plugins-base-libs-gstbasertppayload .html#GstBaseRTPPayload--pt

派生的 h264 有效负载类似乎有 pt 范围限制: https ://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/gst-plugins-good-plugins-rtph264pay.html

我的 gst-launch 命令行参数如下所示:

视频/x-h264,宽度=352,高度=288,帧率=(分数)25/1!身份睡眠时间=15000 同步=真!h264解析!rtph264pay 配置间隔=1 pt=35 !队列 !udpsink 同步=真

关于如何解决这个问题的任何想法?我需要修补pt属性设置功能还是有什么侵入性较小的方法?

更新: 我似乎无法在代码中找到实际执行 >95 的位置,rtph264pay 实现甚至没有提到 pt 属性,而 rtpbasepayload 实现似乎没有对该属性执行任何其他限制,而不是 min( 0) 和 max(127),所有其他操作只是最终在 rtp 包的标题中结束的分配。

g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PT,
      g_param_spec_uint ("pt", "payload type",
          "The payload type of the packets", 0, 0x7f, DEFAULT_PT,
          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

启用调试输出(支付:6)后,有人注意到它谈论使用对等点 pt 96,不幸的是,在设置 pt=35(设置为默认值 96)与 pt= 时输出完全相同(实际 # 除外) 97 保持 pt=97 ,因此绝不表示请求的值已替换为默认值。

使用 pt=35:

rtpbasepayload gstrtpbasepayload.c:843:gst_rtp_base_payload_negotiate:<rtph264pay0> using peer pt 96
...
rtpbasepayload gstrtpbasepayload.c:901:gst_rtp_base_payload_negotiate:<rtph264pay0> with peer caps: application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"Z2QAFKzZQXCH5v/AXEBcBAAUXYwExLQCPFCmWA\=\=\,aOvssiw\=", payload=(int)96, ssrc=(uint)23420509, timestamp-offset=(uint)66866867, seqnum-offset=(uint)11269

使用 pt=97:

rtpbasepayload gstrtpbasepayload.c:843:gst_rtp_base_payload_negotiate:<rtph264pay0> using peer pt 97
...
rtpbasepayload gstrtpbasepayload.c:901:gst_rtp_base_payload_negotiate:<rtph264pay0> with peer caps: application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"Z2QAFKzZQXCH5v/AXEBcBAAUXYwExLQCPFCmWA\=\=\,aOvssiw\=", payload=(int)97, ssrc=(uint)23420509, timestamp-offset=(uint)66866867, seqnum-offset=(uint)11269
4

0 回答 0