【发布时间】: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