c++ - 将 RTP vp8 有效负载数据包保存到 .webm 文件

标签 c++ ffmpeg rtp libpcap vp8

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

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

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

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

ffmpeg -i 输出1 -c:v vp8 输出1.mp4

我收到错误

convertion error

最佳答案

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

可以看到直播demo & Documentation .

关于c++ - 将 RTP vp8 有效负载数据包保存到 .webm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43759907/

相关文章:

c++ - 关于c++中 "this"指针的问题

c++ - C 到 C++ 指针数组的转换问题

c++ - 反向位算法

javascript - 谷歌云平台存储 JSON API 上传会破坏音频文件..?!怎么修?

iphone - 将图像数组编码为电影文件? (iPhone)

Python Youtube-dl 转换为 mp4

c++ - SFML - 为什么绘制到窗口的 Sprite 会随窗口缩放(调整大小)

javascript - webRTC时间戳信息

java - 在 Java 中填充字节数组

ubuntu - Ubuntu 中的 FFmpeg RTP 网络问题