网站首页 > 开源技术 正文
1. 写在前面
硬件加速即利用GPU来完成图形相关的操作,将CPU空闲出来处理其他事务,特别是在CPU性能不足的情况下,此类操作就更必要了。在视频处理上,DXVA是微软定制的视频加速规范,而在Linux 平台上则是由NVIDIA和Intel分别提供的VDPAU和VAAPI加速规范。灵跃桌面云利用上述API可以有效加速视频解码和图像处理,降低系统CPU占用,提升系统性能。
2. 实现方案
针对Intel CPU X86架构平台,可采用FFmpeg+VAAPI的硬解方案。其中,FFmpeg用于处理各种格式的视频解码;VAAPI则提供对硬件加速视频处理的访问,处理流程图如下。
2.1 相关环境部署
(一)安装依赖包
# apt-get install autoconf automake debhelper ladspa-sdk libsoundio-dev libbluray-dev libbs2b-dev libcaca-dev libcdio-paranoia-dev libdvdnav-dev libdvdread-dev libegl1-mesa-dev libenca-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libgl1-mesa-dev libgbm-dev libgme-dev libgnutls28-dev libgsm1-dev libguess-dev libharfbuzz-dev libjack-jackd2-dev libjpeg-dev liblcms2-dev liblircclient-dev liblua5.3-dev libmodplug-dev libmp3lame-dev libnetcdf-dev libopenal-dev libopus-dev libopencore-amrnb-dev libopencore-amrwb-dev libpulse-dev librtmp-dev librubberband-dev libschroedinger-dev libsmbclient-dev libssh-dev libsoxr-dev libspeex-dev libtheora-dev libtool libtwolame-dev libuchardet-dev libv4l-dev libva-dev libvorbis-dev libvo-amrwbenc-dev libvpx-dev libwavpack-dev libx264-dev libx265-dev libx11-dev libxext-dev libxinerama-dev libxrandr-dev libxss-dev libxv-dev libxvidcore-dev pkg-config python python-docutils x11proto-core-dev yasm zlib1g-dev
(二)安装libva
进入当前用户目录,并下载libva源码包:
# cd ~
#git clone https://github.com/01org/libva.git
进入libva文件夹中,
#cd libva
切换到1.7.3版本:
# git checkout libva-1.7.3
执行编译安装:
./autogen.sh && ./configure && make && make install
运行vainfo查看执行结果
图中红框内表示当前所支持硬解的视频压缩格式。
(三)安装FFmpeg
进入灵跃桌面云当前用户目录,并下载FFmpeg源码包
# cd ~
#git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
进入FFmpeg文件夹中,
#cd ffmpeg
执行编译安装
./configure --disable-static --enable-shared --enable-gpl --enable-version3 --disable-debug --enable-vaapi &&make && make install
最后执行ffmpeg查看执行结果。
领取C++音视频开发学习资料:点击→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
2.2 代码实现
(一)视频播放原理
简单来讲,视频播放器在播放本地视频文件须要经历如下步骤:解封装,解码,音视频帧同步,最终会把数据投递到对应的驱动设备,具体过程以下图所示:
(二)VAAPI解码流程
当程序把视频的压缩数据传递到VAAPI解码模块时,会根据视频的压缩格式(如H.264.MPEG-2等)建立对应的VADecoder,而后把数据送入VADecoder进行解码,最后由vaPutSurface来处理视频解码后的合成和渲染,具体过程以下:
(三)具体实现
基于VAAPI和FFmpeg的解码流程图以下:
因为灵跃桌面云使用的FFmpeg的版本是3.3版本,里面集成了VAAPI中对视频的细节处理,因此只须要在AVCodecContext的get_format回调函数中指定硬解参数,解码后的视频数据会存储在GPU内存中,经过vaPutSruface函数来处理后期的合成和图像渲染,下图为窗口建立和图像处理的过程图:
3. 测试结果
本次测试为对比使用GPU硬解和CPU软解的CPU占用率,视频参数:分辨率1920*1080 、帧率25FPS、编码格式H.264。灵跃桌面云依据测试结果能够看出,使用GPU硬解能大大下降CPU使用率,同时画面输出更加清晰流畅。
猜你喜欢
- 2025-04-07 node.js对接支付宝沙箱,实现支付即时到账
- 2025-04-07 esxi 6.0 vSphere 支持硬件加速(esxi扩展vmfs)
- 2025-04-07 ffmpeg入门篇-linux编译安装ffmpeg
- 2025-04-07 FFmpeg基础知识总结(ffmpeg kux)
- 2025-04-07 FFmpeg 的使用与Docker安装流媒体服务器
- 2025-04-07 ffmpeg 编码h264 profile如何设置为baseline的问题
- 2025-04-07 统信UOS1060上将mp3、mp4格式转换为Ogg Vorbis格式
- 2025-04-07 如何使用FFmpeg将AVI转换为MP4(有损转换和无损转换)
- 2025-04-07 Deep-Live-Cam:开源AI实时换脸神器
- 2025-04-07 FFmpeg 视频处理入门教程(ffmpeg media)
你 发表评论:
欢迎- 最近发表
-
- 6月游戏推荐(二)(6月份新出的游戏)
- 37【源码】数据可视化:基于 Echarts + Python 动态实时大屏
- Kubernetes Kube-Proxy 组件 IPVS 模式工作原理及常用故障排查
- 《茶余饭后顶级英文歌曲精选》(茶余饭后的经典句子)
- rainx和MediaTek携手推出101产品生态,为5G FWA提供创新
- KAPITAL 推出蓝染风格 Aloha Shirt 系列
- 欧美经典怀旧歌曲Free loop-管不住的音符
- Mac 下php5.3-7.0的二进制包 ── PHP-OS
- 如何把一个Python应用程序装进Docker
- 为何推荐 JsonTree.js 做 JSON 可视化?
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)