c++ - Avcodec : generate OPUS header for a stream

标签 c++ libavcodec opus

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

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

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

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

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

最佳答案

此错误来自 ff_opus_parse_packet() 失败,它处理原始 opus 数据包 header ,规范称为“TOC”(用于目录)字节和可选子帧长度。这意味着 libavcodec 无法在预期的位置找到数据包持续时间。
因此,您的自定义协议(protocol)可能正在破坏数据,返回错误的数据长度,或者您没有正确地将 opus 数据包从框架层中拆分出来。
如果你不想,你不需要发明自己的协议(protocol)。有两种既定的设计: 用于交互使用的 Opus over RTP(如延迟很重要的实时聊天)记录在 RFC 7587 中。 .对于 HTTP 流,用于记录、播放的文件存储和其他使用 Ogg 容器的应用程序,记录在 here .在 libavformat 中有这两种方法的实现。如果您对细节感到好奇,请参阅 rtpenc.c、oggenc.c 和 oggparseopus.c。

关于c++ - Avcodec : generate OPUS header for a stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562131/

相关文章:

C++模板函数

video - libavcodec 获取视频时长和帧率

c++ - 解码音频后调用阻塞 snd_pcm_writei 会导致奇怪的播放吗?

ios - 如何在 iOS swift 中将 .opus 文件转换为 .mp3/.m4a/.aac?

audio - iOS - 转换音频格式(作品到 mp3)

c++ - 如果我在 xp 中开发 c++ win32 GUI,我在不同的 win 操作系统中运行时会有问题吗

php - 如何在 C++ 中加密数据并在 PHP 中解密?

java - 如何在没有内存可见性影响的情况下使一组语句原子化?

ffmpeg - AV_CODEC_FLAG2_FAST 在解码 H.264 中的作用

ffmpeg - 如何禁用 libav 自动旋转显示矩阵