【问题标题】:av_read_frame of ffmpeg in windows always returning packet.stream_index as 0windows中ffmpeg的av_read_frame总是返回packet.stream_index为0
【发布时间】:2015-04-16 13:57:12
【问题描述】:

我正在使用 ffmpeg 进行解复用器,对于某些视频,例如 windows 的示例 Wildlife.wmv,av_read_frame 始终返回 packet.stream_index=0。这导致视频队列非常大并且内存溢出。我得到 15 帧视频,但只有 1 帧音频。是否有一些选项可以控制 av_read_frame,所以我可以读取如下帧:video-audio-video-audio,这样可以轻松同步 AV 并保持队列平衡。

提前致谢。

【问题讨论】:

    标签: windows video ffmpeg


    【解决方案1】:

    av_read_frame 只是按照找到的顺序返回文件中存储的任何内容,无需任何验证。

    所以答案是否定的,没有 FFmpeg 选项可以解决这个问题,但是你可以在拿到每个数据包后尝试自己控制。

    av_read_frame specification

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

    【讨论】:

    • 您好 Maxito,谢谢您的回答。我考虑过创建更多线程来处理不同的流,但可能会影响读取 IO 性能?我发现在'avformat_open_input'之后,'avformat_find_stream_info'会缓存一些数据包,在我的媒体文件中,在avformat_find_stream_info之后,视频的AVStream::codec_info_nb_frames是109帧,但音频是1。这就是为什么我播放后立即获得 109 个视频帧?我曾尝试使用 'avcodec_flush_buffers' 刷新它们或使用 av_seek_file 清除它,但它不起作用。
    • 如果线程使用正确,它应该不会影响性能,但这完全取决于您实际尝试使用程序实现什么以及您将如何处理数据。我不确定这些信息是否与 av_read_frame 为您提供音频或视频的顺序有关,因为我不知道 avformat_find_stream_info 在内部是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 2011-09-06
    • 2010-11-24
    • 2021-01-24
    • 1970-01-01
    • 2015-09-27
    • 2014-03-20
    • 2013-04-13
    相关资源
    最近更新 更多