我将 FFMPEG 用于 C++ 音频流和播放应用程序。
我使用avformat_open_input函数打开指向外部压缩音频文件的 URL,然后使用av_read_frame逐步进行流式传输。然后对于每个数据包,我直接解码数据并使用 OpenAL 在音频缓冲区中排队。
我的问题是 FFMPEG 是否在内部预缓冲来自外部 URL 的压缩数据?
即使我不调用av_read_frame ,FFMPEG 是否会继续在后台下载数据?
还是我有责任维护一个中间缓冲区,我提前下载尽可能多的数据包以避免音频播放饥饿?
如果是这样,它在内部缓冲/下载多少?我可以配置这个吗?
我一直在查看文档,但没有找到任何相关信息。
谢谢。
更新:根据这个线程http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=15&t=376 libav 应该默认预缓冲大约 5MB,具体取决于 AVFormatContext::max_analyze_duration。但是我没有注意到这种行为,如果我改变 max_analyze_duration,它似乎也没有改变。
如果我监视进程的内存消耗,在我调用 avformat_open_input 后它不会增加,如果我模拟慢速网络,av_read_frame 会直接停止工作,就像它没有缓冲任何数据包一样。