ffmpeg 如何实现多线程解码

进击的菠萝 2020-11-09 05:03:48
在用ffmpeg做播放器,遇到高清H265,很多时候都会解码不及时,只能做丢帧处理。
想要多线程来提高解码性能,网上查了资料,只是说要Codec实现update_thread_context()和线程安全的get_buffer()。具体的代码没找到
有大佬能帮忙讲解下或者有参考代码吗?
多线程后,avcodec_decode_video2就不阻塞了吧,怎么接收解码后的frame呢?;
...全文
22336 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloud_yq 2022-06-16
  • 打赏
  • 举报
回复

你好,我最近也在尝试开启多线程解码,但是我设置了thread_count这个参数好像解码性能没有得到提升,是还要设置其他参数吗?

ArcRain 2020-11-25
  • 打赏
  • 举报
回复
引用 4 楼 进击的菠萝 的回复:
还有一个问题,我用dxva2时,如果指定thread_count多线程,会出错。dxva2是不是就不能多线程解码了?
dxva2走硬件加速,thread_count填1就行了,>=1解码器可能会有兼容性问题。
进击的菠萝 2020-11-25
  • 打赏
  • 举报
回复
引用 1 楼 ArcRain 的回复:
多线程解码,一般解码器内部已经做了支持,codec设置参数时thread_count可以指定线程数。 H265要考虑做硬件解码(如DXVA2),软解肯定会解码耗时太长。ffmpeg包含了支持硬件解码的解码器,指定参数使用即可。如果硬件不支持,还是得切换回软解。 播放器的工作模型可考虑采用多线程结构,这里有一个ffmpeg多线程播放的例子可做参考。 http://dranger.com/ffmpeg/tutorial04.html
还有一个问题,我用dxva2时,如果指定thread_count多线程,会出错。dxva2是不是就不能多线程解码了?
进击的菠萝 2020-11-25
  • 打赏
  • 举报
回复
引用 1 楼 ArcRain 的回复:
多线程解码,一般解码器内部已经做了支持,codec设置参数时thread_count可以指定线程数。 H265要考虑做硬件解码(如DXVA2),软解肯定会解码耗时太长。ffmpeg包含了支持硬件解码的解码器,指定参数使用即可。如果硬件不支持,还是得切换回软解。 播放器的工作模型可考虑采用多线程结构,这里有一个ffmpeg多线程播放的例子可做参考。 http://dranger.com/ffmpeg/tutorial04.html
理解了ffmpeg多线程使用方法,thread_count设置多线程,前几个avcodec_decode_video2并不会阻塞,线程满时阻塞。当某个线程解码完成时avcodec_decode_video2就返回frame了。 跑起来后也是发送一个packet接收一个frame,只不过当次收到的frame可能是前面发送的packet的解码结果。
  • 打赏
  • 举报
回复
这是采用比较老的FFMPEG库,比较新的版本库都没有这两个接口。可以交流Q:1049568282
ArcRain 2020-11-10
  • 打赏
  • 举报
回复
多线程解码,一般解码器内部已经做了支持,codec设置参数时thread_count可以指定线程数。 H265要考虑做硬件解码(如DXVA2),软解肯定会解码耗时太长。ffmpeg包含了支持硬件解码的解码器,指定参数使用即可。如果硬件不支持,还是得切换回软解。 播放器的工作模型可考虑采用多线程结构,这里有一个ffmpeg多线程播放的例子可做参考。 http://dranger.com/ffmpeg/tutorial04.html

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧