【问题标题】:Save RTP vp8 payload packets to .webm file将 RTP vp8 有效负载数据包保存到 .webm 文件
【发布时间】:2017-05-03 12:22:02
【问题描述】:

我已使用 Wireshark 将视频通话保存到 .pcap 文件,我想从 RTP 数据包中获取视频。 RTP 数据包负载类型是 vp8,我可以通过使用 C++ 中的 libpcap 库找到 vp8 RTP 数据包。然后我将所有 RTP vp8 数据包的内容保存到一个文件中。但我无法使用 ffmpeg 将此原始 vp8 数据转换为 .mp4。 ffmpeg 在转换过程中出错。 ffmpeg 转换错误: 处理输入时发现无效数据

从 vp8 RTP 数据包中获取 .mp4.webm 视频文件的步骤是什么?

编辑:我可以获得不包括 VP8 有效负载描述符、有效负载标头和关键帧标头的原始 VP8 数据。然后我根据ivf文档为每个vp8原始帧添加了ivf头和帧头 IVF Document

但是当我想使用 ffmpeg 将我的 ivf 文件 (output1) 转换为 output1.mp4 时

ffmpeg -i output1 -c:v vp8 output1.mp4

我收到错误

【问题讨论】:

  • "然后我将所有 RTP vp8 数据包的内容保存到一个文件中。" - 你维护数据包边界了吗? IE。它只是二进制级联垃圾还是每个数据包仍然是具有有效时间戳等的单独 VP8 帧?
  • 我得到了包括 VP8 在内的所有 RTP 数据包,然后我从这些数据包中提取了 RTP 标头并保存了 RTP 有效负载数据。我保存的数据只是串联的 RTP 有效负载。现在我想从该原始数据中获取视频。可能,首先我必须找到每一帧的边界,然后我必须为每一帧添加一个标题,以便能够以 vp8 格式播放。我可以使用 S 位和 Part ID 提取 vp8 有效负载标头。所以我想我可以找到每一帧的边界。

标签: c++ ffmpeg rtp libpcap vp8


【解决方案1】:

JanusGateway 具有将 RTP (VP8/VP9/H264/Opus) 转换为 (webm/mp4) 的功能。它只会将RTP编码到相应的容器(webm/mp4/opus),不包括转码器。

您可以使用ffmpeg 将其转码为任何其他格式。

简而言之,janus 将store RTP 数据包通过在每个数据包中添加一个前缀标头在一个文件中。然后我们可以使用后处理器将 vp8 RTP 数据包转换为 webm。

https://github.com/meetecho/janus-gateway/blob/master/postprocessing/pp-webm.c

你可以看到demoDocumentation的直播。

【讨论】:

  • 我可以获得原始 VP8 数据,不包括 .VP8 有效负载描述符、标头和关键帧标头。然后我根据 ivf 文档为每个 vp8 原始帧添加了 ivf 头和帧头。 wiki.multimedia.cx/index.php/IVF 但是当我想使用 ffmpeg ffmpeg -i output1 -c:v vp8 output1.mp4 将我的 ivf 文件(输出 1)转换为 output1.mp4 时,我收到错误无效的同步代码 48c11d。并且在流 #0 中找不到编解码器 vp8 的标记,容器中当前不支持编解码器 无法为输出文件 #0 写入标头(编解码器参数不正确
  • 任何人都可以提供有关必须为每个 vp8 帧添加的前缀标头的详细信息吗?
  • 我可以将 RTP(VP8 数据包)从 wireshark pcap 转换为 webm 吗? JanusGatway 是否使用 IVF 标头?
猜你喜欢
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多