APP下载

软硬结合解码方式的4K视频播放系统①

2017-05-17徐圣凯南京理工大学自动化学院南京210000

计算机系统应用 2017年4期
关键词:解码器使用率解码

徐圣凯, 潘 飞(南京理工大学 自动化学院, 南京 210000)

软硬结合解码方式的4K视频播放系统①

徐圣凯, 潘 飞
(南京理工大学 自动化学院, 南京 210000)

针对4K视频数据量很大, 传统的CPU软件解码技术无法满足性能要求. 设计了一种软硬结合解码方式的4K视频播放系统, 采用DirectShow和NVIDIA CUDA技术进行GPU硬件解码. 系统功能包括硬件系统信息获取, 视频源读取, 视频硬解码和视频显示. 实验结果表明, 此播放系统在进行4K视频解码播放时, 既保障了视频效果, 又极大降低了CPU使用率.

4K; 软硬结合解码; DirectShow; CUDA; CPU使用率

近些年来, 多媒体技术得到了长足的发展, 1080P全高清摄像头, 4K电影, 4K超高清显示屏等产品的问世不断地刷新着分辨率、帧率等参数极限[1], 为用户提供了更完美的用户体验. 然而4K超高清视频的信号容量是巨大的, 视频信号经过采集, 解码后才能呈现在显示屏上, 其中的解码过程算法复杂, 对运算处理能力要求很高. 传统的软件解码技术依赖CPU的计算能力, 已经无法满足性能要求, 而嵌入式纯硬件解码不仅价格昂贵且架构不灵活,无法大众化推广. 如何在保证视频解码效果的前提下, 降低成本、加快解码速度、降低CPU使用率成为了研究热点.

纯软件解码播放4K视频时CPU使用率过高导致主机卡顿现象明显, 很多高校和视频处理公司开始关注软件框架与硬件解码器相结合的播放体系, 利用GPU分担部分视频解码工作. 当前通过GPU解码的技术主要有两大类: 利用GPU内部并行工作的流处理单元进行硬件解码, 编写在GPU上运行的代码, 例如ATI的Stream与NVIDI的CUDA, 第二种是间接通过GPU加速, 通过制定统一的解码接口来实现, 例如微软的DXVA(DirectX Video Acceleration). 其中CUDA解码方案中, 流处理器数量会对效率有一定的影响,不过这些主要在使用低端显卡时才会出现差异, 而对于目前的入门级(9600GSO)以及中高端显卡来说, 解码时的差异并不明显. DXVA解码方案中, 虽然解码器支持DXVA规范, 但不代表就能利用DXVA规范里面所有的功能组合, 它可以选择自己有能力支持的, 或者想要支持的那些功能组合, 其他功能组合也许就放弃了. 还有, 某显卡虽然表示支持某种能力, 但如果解码器认为这个能力的支持不够稳定, 容易导致系统崩溃或错误, 或者性能低下, 它也可以放弃这种能力.大量研究表明DXVA解码方案的CPU使用率要比CUDA解码稍低一些, 但利用CUDA解码极大地释放CPU压力的同时, 不像DXVA解码方案那样存在各种兼容性问题, 而且功耗也比CPU软解方案要关低不少,可以说CUDA解码是一个折中的解码方案. 基于这些技术, 台湾讯连科技公司的知名商业软件PowerDVD和腾讯公司的QQ影音播放器开始支持CUDA硬件解码, 不过PowerDVD是一款收费软件, QQ影音播放器进行硬件解码时配置复杂, 且解码器进行了产权保护[2-9].

本文软硬结合解码方式的4K视频播放系统采用CUDA解码方式, 依靠灵活的软件框架, 实现软解码与CUDA硬解码自动设置机制, 对于支持CUDA解码的硬件设备自动启动CUDA硬解码, 不需要繁琐的手动设置. 自开发的CUDA解码器独立封装, 全程码流追踪透明高效, 也为后续深度开发提供了支持. 实验表明该系统播放4K视频, 自启动硬解码时, CPU使用率巨幅下降, 保证了系统操作的流畅性.

1 4K简介

4K指的是分辨率, 于2007年提出, 2012年规范,因其横向解析度约为4000像素而得名, 包括4096*2160、3840*2160等多种分辨率规格. 从分辨率参数来看, 4K约达到了全高清视频(1080P)的4倍, 如图1所示.

图1 4K分辨率示意图

2 系统设计与实现

本文设计的软硬结合解码方式的4K视频播放系统, 主要实现的功能有本地文件的读取, 4K视频的H.264硬件解码和视频显示. 4K视频播放系统结构如图2, 系统分为硬件系统信息获取模块, 4K视频源读取模块, 硬解码Filter模块, 模块间连接与显示模块.硬件系统信息获取模块根据硬件情况选择解码器类型,对支持CUDA解码的系统提供无感知的硬件解码功能,系统软解码器采用第三方解码器.

图2 4K视频播放系统结构

2.1 视频源读取模块

DirectShow提供了大量的Filter用以支持基本的应用. 如图3所示是4K视频文件播放的部分链路. 其中, 箭头方向即是数据的流向, Filter Source(Async)属于Source Filter, 它用于管理硬盘上指定的播放文件,并根据Splitter的要求提供数据, Splitter负责向Filter Source(Async)索取数据, 并将取得数据的音频和视频进行分离, 然后分别从各自的输出Pin输出给音频解码器和视频解码器, 此Source Filter硬盘读取速度满足要求, 可以直接用作系统的视频源读取模块.

图3 4K视频文件播放的部分链路

2.2 硬解码器模块设计与实现

CUDA是一种由NVIDIA推出的通用并行计算架构, 该架构使GPU能够解决复杂的计算问题. 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎. 开发人员可以使用C语言来为CUDA™架构编写程序, 所编写出的程序可以在支持CUDA™的处理器上以超高性能运行. NVIDIA在CUDA的基础上建立了一套SDK用于使用显卡硬件加速来进行H.264编码, 可以在CPU占用率很小的情况下完成高质量实时的H264编码. 系统需要硬件显卡驱动支持CUDA.

系统硬解码Filer功能设计为: 接收H.264视频流输入, 解码后输出RGB24或者YUY2格式的图像帧序列, 一个输入Pin一个输出Pin, 类型为Transform Filter, 采用CSource作为Filter的父类, 因为CSource的输出Pin(从CSourceStream类派生)实现了一个数据线程, 在这个线程中, 可以控制整个解码过程. 设计一个比较大的缓冲管理H.264流数据, 当输入Pin有Sample输人时, 直接把数据放入缓冲等待解码线程读;解码线程也可以主动访问该缓冲, 并从中取出足够数据以完成图像帧的解码.

硬解码器Filter的实现: Filter类名为CudaDecode,输入Pin类名为CudaInputPin, 输出Pin类名为DecodeStream, 它们的类继承关系如图4.

图5 系统解码

实现硬件解码器核心部分是实现CUDA解码, 首先我们配置nvcuvid.dll 和 cutil32.dll动态链接库, 系统解码过程如图5, 主要函数有:

(1) InitCuda(CUvideoctxlock *pLock). pLock参数为关键段类似于CrticalSection, 函数的主要功能是初始化显卡并创建一个显卡设备.

(2)HandleVideoSequence(void *pvUserData, CUVIDEOFORMAT *pFormat). 函数的功能是创建初始化H.264流分析器.

(3)HandlePictureDecode(void *pvUserData, CUVIDPICPARAMS *pPicParams). 函数功能是解码每帧视频数据.

(4)HandlePictureDisplay(void *pvUserData, CUVIDPARSERDISPINFO *pPicParams). 函数用来转换, 处理显示转码后的数据.

2.3 连接与显示模块

本文4K视频播放系统的硬件结构是电脑主机通过高清晰度多媒体接口(英文: High Definition Multimedia Interface, HDMI)与4K显示屏连接, 软件结构方面: 各个功能模块作为独立的Filter注册在windows系统中, 功能模块的连接即为Filter上Pin的连接. 连接的方向是由上一级Filter(Upstream Filter)的输出Pin指向下一级(Downstream Filter)的输入Pin. Pin是一种COM组件, 而且每个Pin上都实现了IPin接口, Pin正是通过这个IPin接口来完成连接的, 一般调用接口方法IFilterGraph::ConnectDirect来实现. 本文Renderer Filter的功能是是接收硬解码Filter解码后的数据, 然后在4K显示器上显示. Renderer Filter的实现: Filter类名为CVideoRender, Pin的类名为CVideoInputPin, 属性页类名为CQualityProperties. 关键类CVideoRender类中定义的一些成员变量有:

CImageAllocator m_ImageAllocator; //Sample管理器

CVideoInputPin m_InputPin; // 输入Pin

CImageDisplay m_Display; // 管理图像显示格式

CMediaType m_mtIn; // 连接用的媒体类型

CVideoText m_VideoText; //视频窗口

CImagePalette m_ImagePalette; // 管理调色板

CDrawImage m_DrawImage; // 画图工作

SIZE m_VideoSize; // 当前视频图像大小定义上述成员使用了一系列的工具类, 它们的继承关系如图:

Filter需要重写CheckMediaType,CompleteConnect等一系列函数, 并完成进度条, 属性页的功能, 最终注册后供系统使用.

图6 继承关系

3 实验验证

硬件环境: CPU为Intel(R)Core(TM)i5-5200U , 主频为2.2GHz, GPU为GeForce 940M. 软件环境: Windows 7 、vs2010 、DirectShow开发环境. 本文主要测试CPU使用率这个指标. 测试时播放4K视频文件(时长4分3秒, 内存占614M, 压缩格式为h264,封装格式为MP4)的前20秒内容, 使用Process Explorer检测CPU使用率. 当使用纯软件解码器系统播放4K视频时CPU使用率如图7, 利用本文系统播放4K视频时CPU使用率如图8.

图7与图8比较可以看出, 播放4k视频, 在保证画面清晰流畅的前提下, 本文硬解码播放系统CPU使用率只有20%左右, 而纯软件解码系统CPU使用率达到了80%左右.

图7 纯软件解码器系统播放4K视频时CPU使用率

4 结语

本文基于DirectShow与CUDA技术, 开发了4K视频播放系统, 实现了4K视频硬解码. 采用了软硬件结合的方式, 兼顾软件解码的灵活和硬件解码的速度,大大降低了计算机CPU的使用率, 在实际应用中有很大的价值.

图8 CUDA硬解码播放4K视频文件时CPU使用率

1 武凤翔.基于DirectShow和WPF的实时视频图像采集与处理系统设计与实现.计算机应用与软件,2015,(3):331–333.

2 伍开胜,罗宇,刘斌.基于directshow的视频播放器设计与实现.科技视界,2015,(31):184–185.

3 朱伟.基于CUDA的H.264视频解码[硕士学位论文].长沙:湖南师范大学,2011.

4 尚青青.多场所多路高清视频监控中心的设计与实现[硕士学位论文].南京:南京邮电大学,2013.

5 李虎.H.264解码器并行算法设计与基于CUDA的实现[硕士学位论文].大连:大连理工大学,2014.

6 刘旭凤.基于4K2K电视构架的视频解码显示研究[硕士学位论文].济南:山东大学,2013.

7 章剑.基于CUDA平台的H.264视频编码器研究设计[硕士学位论文].南京:南京航空航天大学,2012.

8 金曙阳.基于GPU并行编码的全高清互动教学系统的设计与实现[硕士学位论文].南京:南京邮电大学,2014.

9 Adeyemi-Ejeye AO, Walker S, Fleury M. 4kUHD H264 wireless live video streaming using CUDA. Journal of Electrical and Computer Engineering, 2014.

4K Video Playback System Based on Hard and Soft Decoding Mode

XU Sheng-Kai, PAN Fei
(School of Automatization, Nanjing University of Science and Technology, Nanjing 210000, China)

Due to the amount of 4K video data is large, and the traditional CPU software decoder technology cannot meet the performance requirement. The 4K video playback system based on combination of hard and soft decoding mode is designed, which uses DirectShow and CUDA hardware decoding technology. And the system includes functions of hardware system information acquisition, video source reader, video hard decoding, and video display. Experimental results show that this system can achieve good effect and greatly reduce the CPU occupancy rate when playing 4K video. Key words: 4K; hard and soft decoding; DirectShow; CUDA; CPU occupancy rate

2016-07-09;收到修改稿时间:2016-08-08

10.15888/j.cnki.csa.005669

猜你喜欢

解码器使用率解码
科学解码器(一)
科学解码器(二)
科学解码器(三)
内蒙古自治区病床使用率预测及其影响因素分析
线圣AudioQuest 发布第三代Dragonfly Cobalt蓝蜻蜓解码器
解码eUCP2.0
文明 解码
2018年中国网络直播用户规模为3.97亿
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机