使用AVIOContext逐步探测/读取流

时间:2019-12-02 09:25:35

标签: ffmpeg libavformat

尝试使用生产者/消费者习惯用法在内存中实现流解复用/解码。 生产者从网络读取数据并将其推入缓冲区。使用者从该缓冲区读取数据并将其转发到avformat。

根据ffmpeg文档,实现内存中处理的唯一方法是使用AVIOContext,并为其提供read功能。

问题在于,如果缓冲区中的数据太少,则read函数返回0,而avformat认为它是EOF,从而产生错误。 具体来说,这发生在avformat_open_input/avformat_find_stream_info调用中,其中avformat尝试探测给定数据。有时它可以工作,有时则不能,具体取决于输入缓冲区的大小。

我尝试从EAGAIN函数返回read(看起来很合理),但是它不起作用。

作为解决方法,我增加了输入缓冲区的大小,在将更多数据传递给avformat之前积累了更多数据,但这浪费了内存(可能有成百上千的流),并且由于我们不知道它不能成为通用解决方案到底需要多少数据

有什么办法告诉avformat会有更多数据,但是以后呢?

0 个答案:

没有答案