Avcodec:生成流的OPUS头

Avcodec : generate OPUS header for a stream

本文关键字:OPUS Avcodec      更新时间:2023-10-16

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

到目前为止,它与MP2编解码器一起工作,但当我切换到OPUS时,我有这个问题:

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

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

有人能告诉我怎么做吗?谢谢。

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

所以你的自定义协议可能会损坏数据,返回错误的数据长度,或者你没有正确地将opus数据包从你的帧层中分离出来。

如果你不想,你不需要发明你自己的协议。有两种既定的设计:RFC 7587中记录了用于交互式使用的Opus(如延迟问题的实时聊天)。对于HTTP流,用于记录、播放和其他类似应用程序的文件存储使用Ogg容器,这里有文档说明。在libavformat中有这两种方法的实现。如果您对细节感兴趣,请参阅rt便士.c、oggenc.c和oggparseopus.c。