【问题标题】:get h.265 video file from pcap rtp capture从 pcap rtp capture 获取 h.265 视频文件
【发布时间】:2018-11-06 10:31:16
【问题描述】:

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

【问题讨论】:

  • vlc 应该可以工作。您确定流未加密吗?
  • 我确定它没有加密。我尝试使用来自以下链接wiki.wireshark.org/…的wireshark示例捕获的示例h.265捕获
  • 我用 h265 depacketizaion 编写了简单的 .pcap-parser 并得到了h.265 video from pcap。现在我想知道,它是否正确?
  • 缺少可能的标题。

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


【解决方案1】:

其实,这是一件很棘手的事情。 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 字节 (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,您必须将 demuxer 设置为 h265。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2012-02-11
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多