通过 rtpgstdepay 事件字符串的消息传输不是 0 终止

Message Transmission through rtpgstdepay event string not 0 terminated

当我使用 rtpgstdepay 支付负载时,我收到警告消息

event string is not 0 terminated.

如何解决这个问题?

pipeline : gst-launch-1.0 udpsrc ! queue ! rtpgstdepay ! autovideosink 


Warning :: "event string not 0 terminated"
Debug Info ::  gstrtpgstdepay.c(331): read_event (): /GstPipeline:Transporter/GstRtpGSTDepay:rtp_depay

在 rtpgstdepay caps 中,对于新版本,事件字符串应该以“0 字节字符 (\0)”结尾。对于旧版本,它应该以“;(分号)”结尾。

如果事件字符串未正确终止,则会出现 'event string not 0-terminated' 警告消息。

添加此条件是为了解决缓冲区过度读取问题,并确保我们不会读取超过缓冲区末尾的字符串。

兼容性矩阵如下:

  • 旧支付 -> 旧支付:

没有变化,升级核心不会在某些格式错误的情况下崩溃 输入。

  • 旧支付 -> 新支付:

新的 depay 发现;最后并解析消息。核心变化没有 事.

  • 新支付 -> 旧支付:

新的 depay 在字符串后面加上额外的 0。旧的 depay 只是解析并跳过 额外的 0 字节(因为它包含在长度中)。有了新芯,一定 格式错误的有效负载不会崩溃。

  • 新支付 -> 新支付:

new pay在字符串后加0,new depay检查0并解码。新的 核心将避免某些缓冲区重读。

通过使用 rtpgstpay 和 rtpgstdepay 组件,我成功地通过 udp over rtp 传输了修改后的缓冲区。

在接收端,

在 udpsrc caps 中,我在 G_TYPE_STRING.

类型的 caps 中添加了 caps 事件字符串

当我使用 -v 选项启动此管道时,获取了 caps 事件字符串。

我的 C 代码的 udpsrc 上限 属性 中使用了该事件字符串。