Avcodec:为流生成OPUS标头

时间:2015-05-31 20:06:15

标签: c++ libavcodec opus

我使用带有avcodec的OPUS对声音进行编码并使用我自己的协议对其进行流式传输。

到目前为止,它适用于MP2编解码器,但是当我切换到OPUS时,我遇到了这个问题:

[opus @ 1b06d040] Error parsing the packet header.     

我想与MP2不同,我需要为我的OPUS编码数据流生成一个标题,但我不知道如何。

有人可以解释我该怎么做吗?感谢。

1 个答案:

答案 0 :(得分:0)

此错误来自ff_opus_parse_packet()失败,它处理原始opus数据包标头,规范称之为“TOC”#39; (用于目录)字节和可选子帧长度。这意味着libavcodec无法找到预期的数据包持续时间。

因此,您的自定义协议可能会损坏数据,返回错误的数据长度,或者您无法正确地将opus数据包拆分出框架层。

如果你不想,你不需要发明自己的协议。有两种已建立的设计:用于交互式使用的Opus over RTP(如延迟很重要的实时聊天)记录在RFC 7587中。对于HTTP流式传输,用于录制,回放和其他应用程序(如使用Ogg容器的文件存储),记录为here。在libavformat中有两种实现方式。如果您对细节感到好奇,请参阅rtpenc.c,oggenc.c和oggparseopus.c。