从RTP数据包重建图像

恩绍

我正在尝试通过网络将用户的网络摄像头流传输到基于C的服务器。我用过Janus网关

我创建了一个小插件,该插件很大程度上基于echotest演示示例:我的浏览器通过WebRTC技术连接到我的janus服务器,并且流了用户的网络摄像头。

在服务器端,我有janus_incomming_rtp函数,该函数为我提供了char *缓冲区int length经过检查,传入的数据缓冲区大约是MTU的长度:我的视频的每一帧都是通过几个RTP数据包发送的。

我已经按照这个维基百科页面检查了一下标题,但是我不知道如何从UDP RTP数据包流中重建图像。理想情况下,我想将流传递给openCV进行实时图像处理。

我听说过gstreamer,但我不了解它是什么,也不会对它有什么帮助。此外,我不知道openCV是否具有任何内置功能来“重建”图像?而且我不知道视频帧是以哪种格式编码的:PT(有效负载类型)似乎是116,被定义为“动态”,但我不知道它是什么意思。

有什么帮助吗?

本杰明·特伦特(Benjamin Trent)

这是处理SRTP数据包以对其进行解码的一些指导步骤。

  1. 确保未复用rtp和RTCP,可以从SDP中删除该选项
  2. 将SRTP数据包解密为原始RTP,您将需要访问密钥交换(不确定是否已经这样做,但是所有媒体都已加密,并且使用DTLS交换了密钥,在处理之前必须将其解密)
  3. 抓取您的媒体有效负载类型并将其与SDP中的媒体进行匹配(您可以从SDP中的RTPMAP中看到什么媒体是什么有效负载)
  4. 从数据包中删除RTP有效负载(Gstreamer具有用于大多数常见有效负载(包括VP8)的RtpDepay插件)并对流进行解码。使用vp8的命令行管道的快速示例
  5. 现在,您可以显示原始的视频/音频数据包。

SDP:

  • 如果要对RTCP和RTP进行多路复用,则将看到该行,a=rtcp-mux并且您将看到其中的端口a=rtcp:50111 IN IP4 <address>和候选媒体端口将相同。
  • 如果媒体本身正在多路传输,您将看到 a=group:BUNDLE audio video

SRTP:

  • Janus已经处理了DTLS交换,并且看起来它可能已经在发送之前对rtp进行了解密,但是看起来它并不能解决rtp / rtcp和媒体的复用问题。
  • 是一个快速而肮脏的SRTP解密器,当您将其传递给DTLS中交换的MasterKey时,它可以工作。

GStreamer:

  • 您可能需要研究GstAppSrc,它允许您将数组的字符放入gstreamer管道中进行解码,然后可以将其推到另一个udp端口,以使用OpenCV进行抓取。
  • 这是我写的一个websocket服务器的示例代码,它将获取原始媒体并将其推送到管道中。这个例子并不完全是您想要做的(它不获取RTP,而是从网页获取原始媒体帧),但是它将向您展示如何使用AppSrc。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

区分STUN,RTP,DTLS数据包-Java程序

来自分类Dev

iOS:使用音频单元播放RTP数据包

来自分类Dev

从数据包中提取RTP有效负载

来自分类Dev

无法从 RTP 数据包中提取 RTP 有效负载

来自分类Dev

用Ogg容器封装RTP数据包中提取的Opus有效负载的实现

来自分类Dev

如何从Wireshark Capture中提取RTP数据包特定字段?

来自分类Dev

如何为音频流中的每个数据包计算RTP时间戳

来自分类Dev

在两个rtpproxy服务器之间发送rtp数据包

来自分类Dev

如何从H264 RTP数据包中检测I / P / B帧

来自分类Dev

在C中,如何将收到的rtp数据包存储到.pcap文件中-UDP

来自分类Dev

如何从H264 RTP数据包中检测I / P / B帧

来自分类Dev

为什么RTSP播放命令在RTP端口上收到设备篡改数据包?

来自分类Dev

栅格数据包将图像拆分为多个

来自分类Dev

与RTP视频问题有关的抖动和数据包丢失(取决于奇数网络状态)

来自分类Dev

无法正确重建 /etc/apt/trusted.gpg 密钥环:gpg:[不知道]:数据包无效(ctb=01)

来自分类Dev

识别组数据包?

来自分类Dev

应答UDP数据包

来自分类Dev

UDP数据包分片

来自分类Dev

数据包复制的影响

来自分类Dev

Java数据包混乱

来自分类Dev

重组TCP数据包

来自分类Dev

保留数据包顺序

来自分类Dev

UDP数据包分片

来自分类Dev

解码hex(?)数据包

来自分类Dev

tcpdump:丢失的数据包

来自分类Dev

流程与数据包的区别

来自分类Dev

NetFlow数据包分析

来自分类Dev

简单的数据包捕获

来自分类Dev

拆分Netfilter数据包