从pcap rtp捕获获取h.265视频文件

时间:2018-11-06 10:31:17

标签: video-capture rtp codec pcap h.265

我正在尝试从h.265编码和未加密的rtsp / rtp pcap捕获中提取视频文件。我尝试提取rtp流原始数据,并尝试使用vlc播放它,但不起作用。有什么办法可以从pcap捕获中获取h.265视频文件。

1 个答案:

答案 0 :(得分:1)

实际上,这是一件棘手的事情。 http://ucsniff.sourceforge.net/videosnarf.html为h264实现了类似的概念,但是它们不支持h265,因此我采用了该方法。主要思想是您必须添加一些缺少的部分。

https://tools.ietf.org/html/rfc7798中提到的标题是这样的:

+---------------+---------------+
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F|   Type    |  LayerId  | TID |
+-------------+-----------------+

您必须为每个基本流数据包添加已删除的标头,即4字节(00 00 00 01)。

但是我们都知道h265数据包太长,而且大多数都是碎片化的,据我了解,像VLC这样的播放器不支持碎片化。因此,您必须重新组装它们。 此过程仅适用于分段数据包类型(如49)。您还有一个附加标头,如下所示:

+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E|  FuType   |
+---------------+

S和E位告诉您如何重新组装数据包。序列中的第一个数据包的S,E = 1,0,其他的数据包继续S,E = 0,0(可能是多个数据包),最后一个数据包的S,E = 0,1。所有的有效载荷字节都被连接起来,然后通过将主标头中的类型替换为此处提到的FuType来创建一个新的标头,如下所示(不要忘记4Byte标头):

+---------------+---------------+--------------
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--------------
|F|  FuType   |  LayerId  | TID | all the concatenated payloads
+-------------+-----------------+---------------

请记住,您必须同时保留分段和非分段的有效负载,因为大多数未分段的数据包都具有至关重要的信息,例如图片大小,这些信息无法省略。基本流可以由SMplayer播放,也可以使用VLC。 对于VLC,您必须将解复用器设置为h265。