gpt4 book ai didi

c++ - Libav多线程解码

转载 作者:行者123 更新时间:2023-12-03 08:26:27 26 4
gpt4 key购买 nike

根据文档here 、Libav 提供了多线程解码的“基础设施”。但文档对于多线程解码的实现方式模糊且令人困惑。它是内部支持的并且只需要在结构中设置一个标志,还是用户必须使用所提供的函数提供自己的实现?我搜索了很多,但没有找到一个使用 libav 进行多线程视频解码的示例。

最佳答案

您提到的链接看起来像是针对编解码器开发人员的描述,而不是针对使用现有编解码器的 FFmpeg 库的最终用户的描述。

多线程支持确实是由框架本身实现的 - 它需要 FFmpeg 构建线程支持(如 --enable-pthreads--enable-w32threads配置选项),因特定编解码器而异(例如,一个编解码器可能支持多个线程,而其他编解码器则不支持)并实现不同的方法(并行解码多个帧或单个帧内的多个切片)。

最终用户应用程序可以配置 number of threads利用(通过 avcodec_open2() 之前设置的 AVCodecContext::thread_count 属性)和线程模式(AVCodecContext::thread_type 设置为 FF_THREAD_FRAME FF_THREAD_SLICE)。线程池将由 FFmpeg 本身管理,尽管some answers say也可以使用应用程序提供的池。

一些文档提到 AVCodecContext::thread_count 默认值设置为 0 允许 FFmpeg 自动决定使用多少个线程(这将根据线程数来完成)系统中的逻辑CPU),但我从未尝试过这个(总是手动设置此参数)。因此,它可能已经在您的系统上进行多线程解码 - 检查任务管理器中的 CPU 负载。

FFmpeg 不做的是管理多个线程以从文件读取数据包、解码不同线程中的不同流以及视频播放器通常执行的其他类似操作 - 这通常由应用程序本身实现。尽管我记得一些功能已集成到 FFmpeg 中,从而简化了这些例程的实现(例如数据包队列)。

关于c++ - Libav多线程解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66513684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com