解析VP8 / OPUS帧

时间:2015-06-15 17:26:42

标签: 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帧。

1 个答案:

答案 0 :(得分:2)

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

Q3: 如果要逐帧解析,则需要知道VP8和OPUS的结构。 我不知道您的场景中的模拟意味着什么,但在WebRTC环境中,媒体数据通过RTP传输。如果您在没有RTP的情况下进行模拟,请从第2步开始,否则从第1步开始。

  1. 从RTP数据包解压缩RTP有效负载。 RTP有效负载包含VP8数据包信息,如序列号,时间戳等
  2. 请注意,VP8帧可能包含多个VP8数据包,因此基本上您需要提取帧内容并将其连接在一起。有多种方法可以确定帧是否由多个数据包组成,并非所有数据包都是完全标准化的,但是现在我建议您使用序列号,因为一帧的数据包共享相同的SEQ。
  3. 将帧写入文件。如果要创建有效的WebM文件,请使用LibAV的av_write_frame()函数(我个人使用)。
  4. 我可以向您推荐一段实际将原始RTP VP8数据包转换为VP8帧的代码:https://github.com/meetecho/janus-gateway/blob/master/postprocessing/pp-webm.c。 包头读取用于函数(预处理和处理)。

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

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