我正在使用FFMPEG进行C ++音频流和播放应用。
我使用 avformat_open_input 功能打开外部压缩音频文件的网址,然后逐步使用 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会直接停止工作,就好像它没有缓冲任何数据包一样。