前言

在移动互联网以及4K高清视频概念的热潮推动下,人们盼望着不仅能降低网络带宽、也能保持高清晰度的新技术革新。H265视频编码标准就是在这样的背景下进入人们的视野,相比较上一代H264编码标准,H265在改善码流、编码质量、低延时、编码算法方面下足了功夫,在码率控制方面的能力比H264提升30%~40%,也就是说在相同的带宽下,视频质量要提高30%~40%,这在移动互联网直播技术的应用中具有天然的优势。《中国互联网发展报告2017年度总结》中指出,截止2017年12月,我国手机网民规模达7.53亿,较2016年增加5734万人。网民中使用手机上网的占比由2016年的95.1%提升至97.5%。毫不夸张的说,过去的20年是基于传统PC固定互联网的世界,未来的20年将是基于移动终端(手机、平板)的移动互联网世界,具非官方统计,如今人们每天在手机上花费的时间达到4个小时,其中有1/3的时间是花在网络视频直播上,可见对于H265技术的理解与掌握迫在眉睫。好在我国的华为公司在H265技术上拥有最多的核心专利,是该技术主导者,本文讲述如何在华为海思HI35xx平台上实现H265解码样例。

H265技术概述

H265能够如此高效编码,在于它采用了更为复杂的帧内预测编码技术,对于H264,在给定帧,帧内预测在4X4宏块上有9种模式,在8X8和16X16上则只有4种模式,而对于H265,帧内预测方式则多达35种,它的复杂度虽然提升了部分计算资源的占用,却也提高了编码压缩效率。H265还在帧间预测方面优化了算法,它使用更为高效和复杂的层级结构系统代替了H.264的宏块结构,在分割帧中使用四叉树编码结构,也叫编码树单元(CTU,coding tree unit),这就能使H265编码时能对色域或者亮度变化明显的地方精细编码,对场景变化相对较小的地方大块编码从而使得编码效率的进一步提升。

H265的NAL,与H264不同的是,它采用了2个字节的结构,从而能提供更多更详细的信息。我们着重关注Type字段,它是解析H265数据帧的依据,在上层应用中,在RTSP传输过来的视频流时通过对H265的NALU进行解析,即可获取视频的一些参数信息,如帧率、分辨率等,进而配置解码器即可实现解码。在实际的H265数据帧中,往往在帧前面带有00 00 00 01 或 00 00 01分隔符,来标识一帧的起始位置。以00 00 00 01分割之后的下一个字节就是NALU类型,和H264的&0x1f来判断NALU类型不同的是,它采用如下方式:

int type = (code & 0x7E)>>1;
//type的值代表NALU的类型00 00 00 01 40 01  的nuh_unit_type的值为 32, 语义为视频参数集        VPS
00 00 00 01 42 01  的nuh_unit_type的值为 33, 语义为序列参数集         SPS
00 00 00 01 44 01  的nuh_unit_type的值为 34, 语义为图像参数集         PPS
00 00 00 01 4E 01  的nuh_unit_type的值为 39, 语义为补充增强信息       SEI
00 00 00 01 26 01  的nuh_unit_type的值为 19, 语义为可能有RADL图像的IDR图像的SS编码数据   IDR
00 00 00 01 02 01  的nuh_unit_type的值为1, 语义为被参考的后置图像,且非TSA、非STSA的SS编码数据

HIMPP平台背景知识

我们了解一下海思HIMPP平台解码的概念,HIMPP平台音视频编解码架构遵循下图所示的数据处理流程。H265解码实例走的是HARD DISK->VDEC->VPSS->VO->显示器的流程,这个流程一定要熟悉牢记,代码实现都是围绕这条主线来编写的。

H265解码实例

实例源码很简单,先来了解一下实现H.265解码实例的几个函数,以达到了解实例源码大概构造组成,然后再对每个函数进行具体分析。

    /***函数描述:linux标准信号捕捉函数**函数功用:接收Ctrl+C信号,用来退出程序,并销毁HIMPP调用*/HI_VOID SAMPLE_VDEC_HandleSig(HI_S32 signo){......}/***函数描述:用于音视频文件读写推流**函数功用:用fread等文件操作函数读取音视频文件,并解析后推送HIMPP进行解码*/int SAMPLE_COMM_VDEC_H265_SendStream( VdecThreadParam *pArgs){......}/***函数描述:HIMPP系统初始化**函数功用:配置HIMPP系统的各项参数以满足对目标进行编解码*/HI_S32 HI_S32 SAMPLE_VDEC_VdhH265(char *filename){......}/***主函数*/int main(int argc, char *argv[]){......
}

在H265解码实例中使用了海思提供的API,故在编译的时候必须包含其相关的库及头文件,然后就可以利用API实现我们的上层业务逻辑。H.265视频解码实例走的是HARDDISK->VDEC->VPSS->VO->显示器的处理流程,这个过程可以细分为八大步骤,这八大步骤在其他类型的音视频编解码样例也类似,可以说这八大步骤是使用海思HIMPP API的关键所在。下面简单介绍这个八大步骤的内容:

Step1:初始化HIMPP SYS和通用VB缓冲,包括设置缓冲区的大小,缓冲区块的数目。需要注意的是,在设置通用VB参数之前,必须确保HIMPP系统已经退出,否则设置失败。

Step2:设置通用缓冲区的公共缓冲池属性。

Step3:配置解码器,包括指定解码类型,这里选PT_H265,然后指定视频大小、解码优先级等等。然后创建解码通道,并是能加收解码流。

Step4:配置VPSS参数,VPSS是对VDEC解码后的流进行处理,如裁剪、降噪等,MPEG解码实例从简单应用出发,仅仅按默认的方式配置VPSS。

Step5:配置VO参数,这一步也很关键,因为它指定了画面输出,包括常见的HDMI和VGA,主要是配置输出显示,图层属性设置、输出位置等信息。

Step6:绑定VDEC与VPSS,实现H264解码流程。

Step7:绑定VPSS与VO,实现H264解码流程。

Step8:推送视频流数据,这一步需要文件读写配合使用,然后对NALU进行分析推流。

总结

H.265解码实例参考了海思提供的样例及库,程序源码及相关库文件请点击这里,修改不同的编译链工具,即可在不同HI35XX系列平台运行。H.265编码标准相比于H.264有了很大的革新,特别是移动互联网的发展以及高清4K视频的需求日益增长,H.265编码标准从襁褓中逐渐走向成熟。本文目的主要是梳理与H.265解码相关的一些知识,以作备忘,当然H.265相关的知识远远不止于此,好在海思提供了API,屏蔽了复杂的解码实现(硬件解码),方便了上层应用的开发。

参考:

http://club.realpower265.com/forum-2-1.html

https://blog.csdn.net/wh8_2011/article/details/52175275

http://www.istis.sh.cn/list/list.aspx?id=8060

海思HI35xx平台软件开发快速入门之H265解码实例相关推荐

  1. 海思HI35xx平台软件开发快速入门之H264解码实例

    前言 H264视频编码技术诞生于2003年,至今已有十余载,技术相当成熟,它的优势在于有高的视频的压缩率,利用帧间和帧内预测(Estimation).变换(Transform)和反变换.量化(Quan ...

  2. 海思HI35xx平台软件开发快速入门之视频分辨率

    前言 在海思HI35xx平台软件开发过程中常常遇到一些音视频相关的专业知识,为了能够灵活应对这些问题,我们必须对相关知识有所理解.这里结合海思HIMMP媒体处理系统相关应用对视频分辨率知识进行梳理,以 ...

  3. 海思HI35xx平台软件开发快速入门之背景知识

    前言: 安防领域最近几年可谓暗流涌动,作为安防业的双寡头,大华股份与海康威视凭借行业的东风,两家公司的成长速度异常强劲,在国际市场上已经和应用厂家进行厮杀. 2015年两家公司双双晋升"全球 ...

  4. 海思HI35xx平台CPU温度监测

    前言 随着芯片的集成度提高,芯片内部的晶体管数量也不断增多,产生的热量也难以通过小小芯片封装散发出去(常用封装材料有塑料.陶瓷.玻璃.金属,CPU一般采用金属材料封装),高温是会对芯片的性能产生极其有 ...

  5. 盘点直播直播平台软件开发技术中的编解码、直播协议、网络传输与简单实现

    盘点直播直播平台软件开发技术中的编解码.直播协议.网络传输与简单实现 编解码 视频封装格式就是我们通常所说的 .mp4,.flv,.ogv,.webm 等,它其实就是一个盒子,用来将实际的视频流以一定 ...

  6. 【填坑】海思wifi平台Hi3861开发(上) -- 搭建环境篇

    文章目录 背景 处处坑 1. 编译环境 Ubuntu Python 报错 去找客户 新虚拟机OK 2. 开发SDK 背景 近期在海思的一款wifi模组Hi3861V100上开发,想来和ESP模组应该很 ...

  7. 海思HI35xx语音识别方案

    前言 语音识别是智能化应用的一个重要分支,也是语音交互功能的基础.语音识别基于神经网络算法,借助大数据进行模型训练,据科大讯飞相关数据报道,它们已经能够实现98%以上的准确识别率,同时支持多种外语及国 ...

  8. 《海思Hi35xx开发日记——之No.1》

    前言:由于公司的战略转变,我也由原来的Android开发转向到海思HI35xx平台的开发.海思Hi35xx是一个专门提供媒体处理的平台架构,它提供的音视频软件HIMPP API使得下游厂商能够快速开发 ...

  9. Unity 2D游戏开发快速入门(内部资料)

    Unity 2D游戏开发快速入门(内部资料) 试读样张:http://pan.baidu.com/s/1hqh5oqw Unity 2D游戏开发快速入门4 前  言 Unity是一款综合的游戏开发工具 ...

  10. IM开发快速入门(一):什么是IM系统?

    本文在编写时参考了博客作者"鹿呦呦"和在线课程"即时消息技术剖析与实战"的相关资料,一并表示感谢. 1.系列文章引言 IM系统看似简单(没错,很多土老板认为开发 ...

最新文章

  1. ElasticSearch基础知识整理
  2. 深度学习和目标检测系列教程 2-300:小试牛刀,使用 ImageAI 进行对象检测
  3. python xpath提取转码_python-xpath获取html文档的部分内容
  4. html模板安装到织梦,织梦网站安装教程 织梦模板通用安装图文教程
  5. CSS 框的外观 outline属性
  6. 【白皮书分享】直播社会价值白皮书-字节跳动.pdf(附下载链接)
  7. 网站里的MG电子是一个服务器吗,魔兽世界中的品质生活,从MG电子游艺开始!...
  8. Sublime Text3设置浏览器预览
  9. 摩登天空音乐节,谁去?(更新4个舞台演出时间表)
  10. leetcode 868. 二进制间距
  11. 说一说刚拿下BIRTV推荐的中国8K摄像机新品
  12. c语言入门经典+第5版+习题答案,C语言入门经典(第5版)
  13. Java中合并多个视频文件转换一个新的视频
  14. linux 查看内存地址 rw,如何查看Linux内存中的程序所有堆的地址
  15. Arcgis创建新色带
  16. 2021年两次系统集成项目管理工程师真题各章节占分比对比
  17. 知衣科技:夫妻搭档,创业是件骨子里的事
  18. Matplotlib 绘制圆环图的两种方法!
  19. 英文输入时的自动补全功能
  20. 全屋定制“下乡”之路,一线从业者的思考:这真是赚钱的生意吗?

热门文章

  1. 《Redis视频教程》(p18)
  2. 简单的五险一金计算器
  3. 如何设计更好的脉搏血氧仪:实施
  4. kgtemp文件转mp3工具
  5. 单片机通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB
  6. 可以嵌入ppt的课堂点名器_利用Python实现课堂点名器!辅导员大大的夸赞了我!...
  7. 随机点名和抽题软件(可支持ppt扩展模式使用)
  8. 实验3matlab的符号运算,实验MATLAB符号运算
  9. CareUEyes Pro(电脑防蓝光软件)官方中文版V2.1.0.0 | 超实用电脑护眼软件下载-学生白领必备护眼神器!!
  10. 关于一元线性回归、自相关性与Stata实现