我正在使用C语言在Linux环境中开发一个webrtc模拟器。在这里,我需要将媒体从一个webrtc模拟器发送到另一个webrtc模拟器。我需要使用VP8和Opus编解码器。现在,我从VP8编解码器开始。当我刚接触VP8时,也请帮助我进一步了解。

  • 因为它是模拟器,所以我不想实时捕获/播放媒体。我需要从文件读取音频/视频数据并将其发送到远程。在远程获取提取的媒体数据,将其保存到文件中。
  • 哪种文件格式包含编码的VP8数据?它是webm文件格式还是其他格式?
  • 假设webm文件包含VP8和OPUS编解码器数据(我不确定),如何逐帧解析。例如,如果我阅读Extract audio frames from AMR-NB file,则可以解析文件中的amr帧。同样,这里有任何帮助页面,在这里我可以学习VP框架的解析逻辑。
  • 或者是否可以使用任何开放源代码来解析webm文件中的VP8 / OPUS帧。
  • 最佳答案

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

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

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

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

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

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

    09-25 10:07