webrtc - 解析 VP8/OPUS 帧

标签 webrtc vp8 opus

我正在使用C语言在Linux环境下开发一个webrtc模拟器。在这里,我需要将媒体从一个 webrtc 模拟器发送到另一个 webrtc 模拟器。我需要使用 VP8 和 Opus 编解码器。现在我开始使用 VP8 编解码器。由于我是 VP8 的新手,请帮助我了解更多。

  1. 由于是模拟器,我不想实时捕捉/播放媒体。我需要从文件中读取音频/视频数据并将其发送到远程。在远程获取提取的媒体数据,将其保存到文件中。

  2. 哪种文件格式包含编码的 VP8 数据?是webm文件格式还是别的?

  3. 假设 webm 文件包含 VP8 和 OPUS 编解码器数据(我不确定),我如何逐帧解析。例如,如果我阅读 Extract audio frames from AMR-NB file我可以从文件中解析 amr 帧。同样有没有帮助页面,我在那里学习了VP框架的解析逻辑。

  4. 或者是否有任何开源软件可以让我从 webm 文件中解析 VP8/OPUS 帧。

最佳答案

问题 2: 我将从第 2 个问题开始,VP8 对应 WebM 格式。

问题 3: 如果要逐帧解析,需要知道VP8的结构和作品。 我不知道模拟在您的场景中意味着什么,但在 WebRTC 环境中,媒体数据是通过 RTP 传输的。如果不使用RTP进行仿真,请从第2步开始,否则从第1步开始。

  1. 从 RTP 数据包中解包 RTP 负载。 RTP 负载包含 VP8 数据包信息,如序列号、时间戳等。
  2. 请注意,VP8 帧可能包含多个 VP8 数据包,因此基本上您需要提取帧内容并将其连接在一起。有多种方法可以确定帧是否由多个数据包组成,并非所有方法都已完全标准化,但目前我建议您使用序列号,因为一个帧的数据包共享相同的 SEQ。
  3. 将框架写入文件。如果您想创建有效的 WebM 文件,请使用 LibAV(我个人使用的)中的 av_write_frame() 等函数。

我可以向您推荐一段实际将原始 RTP VP8 数据包转换为 VP8 帧的代码:https://github.com/meetecho/janus-gateway/blob/master/postprocessing/pp-webm.c . 包头读取用于函数(预处理和处理)。

Q4: 我将 LibAV 用于此类目的(或者 FFMPEG)。

我很乐意回答任何其他问题。

关于webrtc - 解析 VP8/OPUS 帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30851306/

相关文章:

java - 在android中的webrtc中使用噪声抑制模块

ios - 在 WebRTC 库中关闭 View Controller 时因 EXC_BAD_ACCESS 错误而崩溃

google-chrome - WebRTC 连接 - 同时 STUN 和 TURN?

ios - 如何在 iOS 中解码自定界的作品

c++ - Portaudio + Opus 编码/解码音频输入

android - WebRTC 连接在本地网络之外无法工作

video - FFMPEG 使用 VP8 创建 MPEG-DASH 流

android - 在安卓上构建 vp8

c++ - 如何使用 WebM VP8 编码器 API 将一系列图像编码为 VP8? (C/C++)

javascript - 如何从 JavaScript 使用 Opus Codec