Gstreamer UDP上的RTP扩展头

Gstreamer UDP上的RTP扩展头,gstreamer,rtp,Gstreamer,Rtp,我正在尝试使用gstreamer通过UDP发送具有特定元数据的图像。发送方进程从摄像机抓取图像,并以appsrc!的形式在管道中发送它们!rtpvrawpay!udpsink(下面的完整管道字符串,以防它很重要)。在接收器端,我使用udpsrc!rtpvrawdepay!appsink 为了添加元数据,我在rtpvrawpay的源板上放置了一个探测器,并在rtpvrawdepay的接收器板上读取-probe。到目前为止,我遇到的问题是: “源”探测器接收GST\u PAD\u probe\u T

我正在尝试使用gstreamer通过UDP发送具有特定元数据的图像。发送方进程从摄像机抓取图像,并以
appsrc!的形式在管道中发送它们!rtpvrawpay!udpsink
(下面的完整管道字符串,以防它很重要)。在接收器端,我使用
udpsrc!rtpvrawdepay!appsink

为了添加元数据,我在
rtpvrawpay
的源板上放置了一个探测器,并在
rtpvrawdepay
的接收器板上读取-probe。到目前为止,我遇到的问题是:

  • “源”探测器接收
    GST\u PAD\u probe\u TYPE\u BUFFER\u LIST
    数据,“接收器”探测器-
    GST\u PAD\u probe\u TYPE\u BUFFER
    。我希望在UDP的两侧都能得到相同的数据类型,为什么不呢
  • 我无法读取发送方添加的
    twobytes\u头
    ,尝试
    gst\u rtp\u buffer\u map
    探测中的缓冲区时,它已经失败更新:成功读取接收器端的标题,请参阅下面的代码。仍然想理解为什么我在两个探测位置上看到缓冲区列表和缓冲区
  • 如果您有任何见解,或者是通过UDP发送带有图像的元数据的更好方向,我们将不胜感激

    发送方管道:
    appsrc!视频转换!队列rtpvrawpay name=ToRTP!队列udpsink主机=192.168.42.49端口=5566同步=假异步=假

    接收器管道:
    udpsrc port=5566 caps=“应用程序/x-rtp,媒体=(字符串)视频,采样=(字符串)BGR,时钟速率=(int)90000,深度=(字符串)8,宽度=(字符串)640,高度=(字符串)480,编码名称=(字符串)原始”!rtpvrawdepay name=FromRTP!队列视频转换!appsink

    更新:为我工作的代码:

    发件人代码:

    GstRTPBuffer rtp_buf = GST_RTP_BUFFER_INIT;
    gst_rtp_buffer_map(*buffer, GST_MAP_READWRITE, &rtp_buf);
    gst_rtp_buffer_add_extension_twobytes_header(&rtp_buf, 1, 1, myInfo->buf, sizeof(myInfo->buf));
    gst_rtp_buffer_unmap(&rtp_buf);
    
    接收器代码:

    GstRTPBuffer rtp_buf = GST_RTP_BUFFER_INIT;
    GstBuffer* buf = GST_PAD_PROBE_INFO_BUFFER(info);
    gst_rtp_buffer_map(buf, GST_MAP_READ, &rtp_buf);
    gpointer myInfoBuf = nullptr;
    guint size         = 0;
    gst_rtp_buffer_get_extension_twobytes_header(&rtp_buf, &appbits, 1, 0, &myInfoBuf, &size);
    gst_rtp_buffer_unmap(&rtp_buf);