首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Libav多线程解码

Libav多线程解码
EN

Stack Overflow用户
提问于 2021-03-07 14:02:04
回答 1查看 493关注 0票数 0

根据文档here,Libav为多线程解码提供了“基础设施”。但是关于多线程解码是如何实现的,这些文档是模糊的,令人困惑的。它是内部支持的,只需要在结构中设置一个标志,还是用户必须使用所提供的函数提供自己的实现?我搜索了很多,但找不到一个使用libav的多线程视频解码的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-07 15:42:58

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

多线程支持实际上是由框架本身实现的-它要求FFmpeg构建时具有线程支持(如--enable-pthreads--enable-w32threads配置选项),在特定的编解码器中有所不同(例如,一个编解码器可能支持多线程,而其他编解码器不支持),并实现不同的方法(并行解码多个帧或在单个帧中解码多个切片)。

最终用户应用程序可以配置number of threads使用(通过在avcodec_open2()之前设置的AVCodecContext::thread_count属性)和线程化模式(AVCodecContext::thread_type设置为FF_THREAD_FRAMEFF_THREAD_SLICE)。线程池将由FFmpeg自己管理,尽管some answers say表示使用应用程序提供的池也是可能的。

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

FFmpeg没有做的是管理多个线程,用于从文件中读取数据包,在不同的线程中解码不同的流,以及视频播放器通常所做的其他类似事情-这通常是由应用程序本身实现的。尽管我记得有一些特性已经集成到FFmpeg中,简化了这些例程的实现(比如包队列)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66513684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档