【问题标题】:Avcodec : generate OPUS header for a streamAvcodec : 为流生成 OPUS 标头
【发布时间】:2015-08-14 05:47:56
【问题描述】:

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

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

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

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

谁能解释我该怎么做?谢谢。

【问题讨论】:

    标签: c++ libavcodec opus


    【解决方案1】:

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

    因此,您的自定义协议可能正在破坏数据,返回错误的数据长度,或者您没有正确地将 opus 数据包从帧层中拆分出来。

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

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2015-11-16
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2014-12-30
      • 2017-02-22
      • 2017-10-06
      • 2017-07-03
      相关资源
      最近更新 更多