FFplay硬件加速[通俗易懂]

FFplay硬件加速[通俗易懂]本文以ffmpeg-4.4源码为准,a.mp4下载链接:百度网盘,提取码:nl0s。FFplay硬件解码命令如下:ffplay.exe-vcodech264_cuvid-ia.mp4上面命令指定了NVIDIA的硬件解码器,h264_cuvid。在ffplay.c的代码里面硬件解码跟普通解码在逻辑上没有做什么特殊的处理。ffplay.c里面没有像ffmpeg.c那样支持-hwaccel这个选项,所以ffplay.c的硬件解码流程跟普通解码…

大家好,又见面了,我是你们的朋友全栈君。

本文 以 ffmpeg-4.4 源码为准,a.mp4下载链接:百度网盘,提取码:nl0s 。


FFplay 硬件解码命令如下:

ffplay.exe -vcodec h264_cuvid -i a.mp4

上面命令指定了 NVIDIA 的 硬件解码器,h264_cuvid。 在 ffplay.c 的代码里面 硬件解码 跟 普通解码在逻辑上没有做什么特殊的处理。

ffplay.c 里面没有像 ffmpeg.c 那样支持 -hwaccel 这个选项,所以 ffplay.c 的硬件解码流程 跟 普通解码 流程没有区别,至少在 API 函数使用上是这样。

断点查看可以看到,就是 传递一个 解码器名称 进行 avcodec_open2() 函数里面。

FFplay硬件加速[通俗易懂]

使用 ffplay 进行硬件解码的时候,GPU 的性能监控图如下,可以看到,占用率非常低。

FFplay硬件加速[通俗易懂]

ffplay 跟 ffmpeg 解码的时候不一样,这是因为 ffplay 只需要按照帧率去解码即可,ffplay 是播放多少,解码多少。而 ffmpeg 是解码得越快越好。所以 ffmpeg 硬件解码 占用的 gpu 资源会很高,ffmpeg 可以通过 -re 参数控制解码速度。

还有一个地方,ffplay 不支持 -hwaccel 这个选项。

-hwaccel 这个选项 应该是 控制 GPU 进行并行计算的,因为在显卡里,并行计算跟编解码器是两个模块(这个我也不太清楚,知道的朋友可以在文章评论补充一下)


分析完毕

由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,或者希望交流音视频技术的,可以加我微信 Loken1。QQ:2338195090。


推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:

Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149047.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 初级程序员面试题总结(一):

    本人将这几天面试的题目总结一些,如果出现错误请指正,谢谢。1,谈一谈spring。答:spring是为java程序开发提供的综合性的基础java开发平台,它提供了从表现层SpringMVC到业务层Spring再到持久层springData的一套完整的解决方案。spring的核心有两大块,第一块是AOP,面向切面编程,它将程序与业务分离,集中来解决一些公共问题。第二块是IOC,控制反转,由容…

    2022年4月8日
    56
  • 网站备案的注意事项

    网站备案的注意事项

    2021年9月22日
    56
  • SpringBoot使用Websocket(一)

    SpringBoot使用Websocket(一)webSocket是HTML5的一种新协议,它实现了服务端与客户端的全双工通信,建立在传输层,tcp协议之上,即浏览器与服务端需要先建立tcp协议,再发送webSocket连接建立请求。webSocket的连接:客户端发送请求信息,服务端接受到请求并返回相应的信息。连接建立。客户端发送http请求时,通过Upgrade:webSocketConnection:Upgrade告知服务器需要建…

    2022年7月27日
    12
  • gltranslatef函数_sql translate函数怎么用

    gltranslatef函数_sql translate函数怎么用TranslateMessage(&msg);TranslateMessage是用来把快捷键消息转换为字符消息,并将转换后的新消息投递到调用线程的消息队列中。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。当我们敲击键盘上的某个字符键时,…

    2022年9月13日
    5
  • java身份证识别_阿里java面试经验

    java身份证识别_阿里java面试经验前几天需要用到阿里的OCR接口,中间有踩坑,现在记录下来,已便使用一.BASE64OCR调用文档中需要传入BASE64,感谢Apache<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</a…

    2022年10月19日
    2
  • 万物共享的物联网架构「建议收藏」

    万物共享的物联网架构「建议收藏」前言作为物联网领域最贴近用户的一个分支,智能家居行业在这两年持续火热。但是,除了智能家居外,物联网领域还有很多重要的组成部分:车联物流、智慧医疗、智慧社区、公共基础服务、智慧农业等。由于物联网的第一批先驱者往往都是从某个具体子行业转型过来的,对于物联网的认知也如盲人摸象,管中窥豹,很难有全局性的眼光。基于国外物联网大神DanielKarzel,HanneloreMarginean,

    2022年9月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号