我使用带有avcodec的OPUS对声音进行编码并使用我自己的协议对其进行流式传输。
到目前为止,它适用于MP2编解码器,但是当我切换到OPUS时,我遇到了这个问题:
[opus @ 1b06d040] Error parsing the packet header.
我想与MP2不同,我需要为我的OPUS编码数据流生成一个标题,但我不知道如何。
有人可以解释我该怎么做吗?感谢。
答案 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。