我正在尝试提取h.265编码的视频文件&未加密的rtsp/rtp pcap。我尝试提取rtp流原始数据,并尝试使用vlc播放它,但没有工作。有没有任何方法可以从中获取h.265视频文件。
发布于 2019-08-07 18:20:02
实际上,这是一件棘手的事情。http://ucsniff.sourceforge.net/videosnarf.html为h264实现了类似的概念,但是他们不支持h265,所以我采用了这个方法。主要的想法是,您必须添加一些部分是缺少的。
正如在https://www.rfc-editor.org/rfc/rfc7798中提到的,标题如下所示:
+---------------+---------------+
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| Type | LayerId | TID |
+-------------+-----------------+您必须为每个基本流数据包添加已删除的标头,即4 Bytes (00000001)。
但是我们都知道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替换主报头中的类型来创建一个新的报头(不要忘记4字节头):
+---------------+---------------+--------------
|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,必须将demuxer设置为h265。
https://stackoverflow.com/questions/53170075
复制相似问题