windows中ffmpeg的av_读取_帧始终将packet.stream_索引返回为0

windows中ffmpeg的av_读取_帧始终将packet.stream_索引返回为0,windows,video,ffmpeg,Windows,Video,Ffmpeg,我正在使用ffmpeg进行解复用,对于一些视频,如windows的sample wivel.wmv,av_read_帧总是返回数据包。stream_index=0。这导致视频队列非常大,内存溢出。我有15帧的视频,但只有1帧的音频。是否有一些选项可以控制av_read_帧,这样我就可以读取诸如:video audio video audio之类的帧,这样就很容易同步av并保持队列平衡 提前感谢。av\u read\u frame只按文件的查找顺序返回文件中存储的内容,无需任何验证 答案是否定的,

我正在使用ffmpeg进行解复用,对于一些视频,如windows的sample wivel.wmv,av_read_帧总是返回数据包。stream_index=0。这导致视频队列非常大,内存溢出。我有15帧的视频,但只有1帧的音频。是否有一些选项可以控制av_read_帧,这样我就可以读取诸如:video audio video audio之类的帧,这样就很容易同步av并保持队列平衡


提前感谢。

av\u read\u frame只按文件的查找顺序返回文件中存储的内容,无需任何验证

答案是否定的,没有FFmpeg选项,但是你可以在得到每个数据包后自己控制它


在过去,我们开发了一个媒体播放器,针对这样的问题,我们在不同的线程中读取音频和视频,然后自己同步演示

嗨,马克西托,谢谢你的回答。我曾考虑过创建更多线程来处理不同的流,但可能会影响读取IO的性能?我发现在“avformat\u open\u input”之后,“avformat\u find\u stream\u info”会缓存一些数据包,在我的媒体文件中,在avformat\u find\u stream\u info之后,视频的AVStream::codec\u info\u nb\u帧是109帧,而音频是1帧。这就是为什么播放后我立即获得109个视频帧的原因?我曾尝试使用“avcodec\u flush\u buffers”来刷新它们,或使用av\u seek\u文件来清除它们,但都不起作用。如果线程使用正确,则不会影响性能,但这一切都取决于您的程序实际要实现什么以及您将如何处理数据。我不确定这些信息是否与av_read_帧提供音频或视频的顺序有关,因为我不知道avformat_find_stream_信息在内部是如何工作的。