【问题标题】:FFMPEG: How are the parsers providing input bit stream to the decoderFFMPEG:解析器如何向解码器提供输入比特流
【发布时间】:2013-12-25 00:37:18
【问题描述】:

我在FFMPEG 中集成了一个视频解码器。对于这个解码器,我有一个解析器,它从输入比特流(基本流)中读取数据,并在需要时为解码器提供数据。我在解析器中使用fread() 函数来读取输入位流。

但是,当我在libavcodec/ 目录中看到其他可用解码器的解析器时,它们中似乎都没有fread。试图通过调试代码来找出这种机制,但甚至没有得到重新评分的线索。所以我请求是否有人可以提供一些关于解码器如何获取所需数据的解释,即使它的解析器似乎没有任何 fread?我的意思是这里用来从输入文件中读取数据的机制是什么。

任何与此相关的建议/答案都会对我很有帮助。请做必要的事情,因为它可以帮助许多人阅读这篇文章。提前致谢。

--问候

【问题讨论】:

    标签: video ffmpeg


    【解决方案1】:

    fread() 调用在管道中更早出现 - 从输入阶段开始,假设输入来自文件(相对于网络流或标准输入或光盘或其他东西)。解复用器层(在您的情况下为基本流)将向输入层询问数据。

    然后,如果您通过-vbsf 命令行选项指定了视频比特流过滤器,压缩的视频数据将在到达视频解码器之前通过该过滤器。

    【讨论】:

    • 感谢您的回答。 +1 的努力。如果您能详细说明第一段,那就太好了。我的意思是我想知道文件的读取位置以及每一帧的数据是如何被检索的?请对此进行回复。
    • 如果您真的想查看从磁盘读取文件的确切位置,请查看 libavformat/file.c:file_read() 中的代码。这就是我期望行动发生的地方。顺便说一句,这是一个 read() 调用而不是 fread()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多