基于Android和H.264的高清解码系统研究

来源 :中国科技博览 | 被引量 : 0次 | 上传用户:mfxtmxk
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文将开源的FFmpeg提供的 H.264解码器进行裁剪优化,从中提取 H.264 解码的核心部分,并移植到Android平台,完成了一种Android平台下的H.264解码方案的设计,并在真机下进行了测试取得了较好的解码播放效果。
  关键词:Android;H.264;解码器;FFmpeg
  【中图分类号】N94-0
  0 引言
  H.264/AVC标准是一种高性能的视频编解码技术,相比其它标准具有更高的压缩率、高质量图像、容错功能、并有很强的网络适应性。近年来Android系统的也迅猛发展和日趋成熟,其因其具有开放性、便携性、良好的兼容性和可无缝结合网络通信等特点,Android操作系统在未来嵌入式物联网领域中将会有更广泛的应用。
  目前越来越多的Android视频应用被开发出来,而人们追求的视频高清化和目前网络带宽及智能手持设备解码能力均不足的矛盾也逐渐凸显出来,本文设计的基于Android系统的H.264在线高清解码系统就可以解决这一问题。
  1 Android操作系统简介
  Android系统是一种以Linux为内核开发的专门面向移动平台的开源智能操作系统,具有丰富的硬件资源和软件应用程序资源、支持各种网络协议和触屏输入,短短的几年时间,Android凭借这些特性,已经在智能手机领域占据了非常重要的位置。随着物联网时代的到来,Android系统的前景将更加不可限量。
  Android系统由以下三个部分组成: Linux内核层、Android 运行时库和其他库层、应用程序层。
  Linux内核层用来提供系统的底层服务,包括安全机制、内存管理、进程管理、网络堆栈及一系列的驱动模块。作为一个虚拟的中间层,该层位于硬件与其它的软件层之间。需要注意的是,这个内核操作系统并非类GNU/Linux的,所以其系统库、系统初始化和编程接口都和标准的Linux系统有所不同的。
  Android运行时库和其他库层包含一组核心库(提供Java语言核心库内的大部分功能)和Dalvik虚拟机。在应用层Android开发人员拥有访问框架API的全部权限。应用层的结构化设计简化了各组件之间的重用, 任何应用都可以分发自己的组件, 任何应用也可以使用这些分发的组件。
  2 H.264解码方案设计
  H.264并没有明确的规定一个编解码器是如何实现的,而是规定了构成编码的比特流的语法、语法元素的语义以及语义元素的解码过程,为不同制造商的编解码器提供兼容性,各个厂商的编码器和解码器在此框架下应能互通,在实现上具有较大的灵活性。
  H.264标准的核心思想与现有的其它视频编解码标准一致,也是采用变换和预测的混合编码方法。但H.264 在算法的实现细节上使用了不同于其他标准的新技术,使得 H.264 编码性能远远优于其他标准。H.264 的核心算法主要包括帧内预测模式、整数变换编码、先进的量化、熵编码和高级运动估计与补偿等,H.264编解码的重要变化主要体现在各个模块的细节上,解码就是编码的逆过程。
  H.264标准没有规定具体的编解码算法,本文在FFmpeg解码器的基础上进行了适当的裁剪优化并移植到Android系统来实现H.264标准的解码。FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源的音频和视频流解决方案。FFmpeg是基于Linux开发的,可以在大多数操作系统中编译和使用。它支持 MPEG、DivX、MPEG4、FLV 等40多种编码方式和AVI、MPEG、OGG、ASF 等90多种解码方式。FFmpeg被许多开源项目采用,如ffmpeg2theora, MPlayer,Google Chrome等。另外很多著名的播放软件如暴风影音、QQ影音和 KMPlayer和QuickTime等,也采用了FFmpeg的开源代码。
  FFmpeg是一个庞大的音视频编解码一体的开源解决方案,完全移植需要耗费大量的资源和时间,这里需要对FFmepg进行精简和优化,裁剪出 H.264 的核心代码进行移植。首先FFmpeg 设计了统一的接口来说实现其内部对各种编解码起的支持。它通过一些公用的结构体来描述各种编解码器需要用到的资源变量和特性,其中很多數据结构对H.264解码器来说是没有用处的。因此首先需要对H.264解码器对 FFmpeg中的结构体进行裁剪优化,去掉与H.264解码器无关的数据结构。另外一个就是对 H.264 解码的核心算法的提取。对于基本的H.264解码来说,仅需保留H264.c、utils.c(H264utils.c)、Cabac.c、golomb.c 这几个源文件就可以了。
  3 Android客户端软件设计
  3.1 解码器编译移植
  在Android平台上使用H.264解码器需要进行解码器的交叉编译移植工作。而Android系统是面向应用的,应用开发者需要使用java 语言进行应用开发。因此,想要在 Android 的应用层调用解码库来实现解码功能,还需要对解码库进行封装,利用java的本地调用来实现解码器。
  编译H.264 解码器时需要用到Android 提供的 NDK工具。Android的NDK 是一系列开发工具的集合,集成了交叉编译器,并提供android.mk文件隔离CPU、平台、ABI 等的差异,开发人员只要编写自己的android.mk文件,就可以实现交叉编译,产生.so 文件和 java 打包供开发人员使用。这样,就为开发人员使用 C/C++开发 Android 提供了一个简单而有效地途径。Android 的NDK 需要使用 gcc 进行交叉编译。
  在java层声明本地方法后,需要使用javah命令需要生成JNI头文件,这里需要注意完整的包名。这里生成了一个头文件,其中包含了需要利用本地 C实现的方法名。   编译成功后,会在工程目录下自动生成一个/libs/armeabi文件夹,编译得到的动态库 H264Decoder 会安装在这个文件下。然后在工程中的 java 代码部分添加如下代码:
  static {System.loadLibrary(―H264Decoder‖);}
  這样,就完成了解码器的交叉编译和移植工作。
  3.2 H.264解码流程
  整个解码的流程可以分成三个功能模块:前端码流处理、H.264 解码和后端视频显示。前端码流处理:主要负责文件的读取,从码流中分割出 NAL 然后交给底层进行解码处理。H.264 解码是整个解码的核心部分,这一步需要通过本地C语言的实现和解码库对码流数据进行处理,完成H.264解码实现图像重建。后端视频显示模块接收H.264解码模块解码后的视频数据,在 Android客户端进行显示。其中H.264解码模块是最耗费资源的。这一模块通过移植的FFmpeg解码库来实现解码。另外两个模块则在Android 的java应用层进行实现。H.264视频标准为了更好的适应网络传输的特性,采用了分层设计的思想既视频编码层VCL和网络提取层 NAL。H.264的解码部分有包括前端码流处理和 H.264 解码两个功能模块。其中,前端码流处理主要完成从码流中分割出NAL,这部分功能由java层实现。在java层,采用java.io.FileInputStream类来实现码流的读取。读取文件后在java层从H.264码流中分割出Nal,然后交给底层的C来实现实时解码。Nal 的分割Android的java应用层来实现。
  完成Nal的分割之后,将数据交给底层解码器处理,对于具体视频数据,解码流程如下:打开解码器并为解码帧分配内存,不停的从码流中提取帧数据,对于视频帧调用解码器,解码完成后释放解码器。在移植了 H.264 解码器后,通过Android提供的MediaPlayer类进行播放。
  4 结束语
  本文将开源的FFmpeg提供的 H.264解码器进行裁剪优化,从中提取 H.264 解码的核心部分,并移植到Android平台,完成了一种Android平台下的H.264解码方案的设计,并在真机下进行了测试取得了较好的解码播放效果。
  参考文献:
  1 杨丰盛 Android应用开发揭秘 机械工业出版社 2011.12
  2 范斐斐 基于OMAP5912的H.264编解码器的实现 武汉理工大学. 2008,5:33-36
  3 欧阳合,韩军 H.264和MPEG-4视频压缩 国防 科技大学出版社 2004:17-21
  4李振德 基于H.264编码标准的远程视频采集系统的设计与实现 湛江海洋大学学报. 2006,26(3):78-81
其他文献
摘要:随着矿区建设的发展及矿区规模的迅速扩大,原矿区控制网不能满足矿区测量工作的需求,矿区控制网改造成为矿山建设的基本任务之一。本文介绍了内蒙古某大型露天煤田平面控制网的设计、选点和埋石、外业观测和内业数据处理等。  关键词:露天矿;GPS控制网;技术设计  【中图分类号】TD173  前言  很多矿区的原控制网是在不同的时期,按照不同的测量规范,采用不同的方法逐步扩充而建成的。随着矿区建设速度的
期刊
摘要:本文针对建筑工程保温体系设计,对保温体系设计选型进行分析,分别从砌体墙保温体系设计选型和钢筋混凝土剪力墙保温体系设计选型方面进行了分析与探讨,为广大设计人员提供一定参考意见.  关键词:保温体系 设计选型  【中图分类号】TU528.2  1引言  目前世界上有许多关于外墙保温的资料和数据,经过多年研究外墙外保温已经有很大发展,外保温相对于其他形式保温而言有明显优势.在我国建筑多以采用混凝土
期刊
【分类号】:R284  【摘要】 目的 建立脑脉通有效部位中总生物碱的含量测定方法。方法 采用酸性染料比色法,以溴甲酚绿缓冲液作为生物碱的显色剂,测定样品溶液在417 nm波长处的吸收度。 结果 对照品川芎嗪质量浓度在0.031~0.153 mg/mL的范围内与吸光度呈良好的线性关系,r=0.9998。平均回收率为100.95%,RSD为1.75%。精密度和稳定性良好。结论 酸性染料比色法灵敏、快
期刊
摘要:本文设计了一种高效的停车场收费系统,系统采用了一种动态时隙ALOHA防碰撞算法有效地提高了RFID标签识别率,采用 CAN-以太网网关数据转换技术,实现了停车场系统由小范围组网向大范围组网的可扩展性,系统具有以远距离自动感应、电脑自动计费、自动检测车位、自动对进出场车辆信息采集、低功耗及便于改造和升级等特点,在智能停车场应用方面具有广阔的前景。  关键词:RFID;防碰撞算法;嵌入式;不停车
期刊
【分类号】:R927.2  摘要:目的 建立一种准确、简便的测定麻咳合剂中盐酸异丙嗪含量的方法,为制定麻咳合剂的质量标准提供依据。方法 利用盐酸异丙嗪可被过氧乙酸定量氧化成亚砜类化合物而引起紫外吸收的显著改变,再用差示分光光度法测定其含量。结果 在336.5 nm处,10~50 μg/mL范围内,盐酸异丙嗪氧化前后的吸收度差与浓度呈良好的相关性(r=0.9998),该方法平均回收率100.85%,
期刊
【分类号】:R286  【摘要】 目的 测定清瘟解毒片中芍药苷的含量。方法 采用反相高效液相色谱法,DiamonsilC18柱,甲醇0.05 mol/L KH2PO4(体积比30∶70)为流动相,流速为1.0 mL·min-1,检测波长230 nm,柱温为室温。结果 芍药苷质量浓度在4.95~59.4 μg/mL间具有良好的线性关系(r=0.999 7),芍药苷平均回收率为104.1%,方法精密度
期刊
【分类号】:R286  【摘要】 目的 建立腰痛片中芍药苷的含量测定方法。方法 采用高效液相色谱法,Shimpack VP-ODS C18(4.6 mm×150 mm,5 μm)为色谱柱,甲醇-0.05%磷酸(体积比40∶65)为流动相,检测波长为230 nm,流速为1.0 ml/min。结果 芍药苷线性范围为0.1448~2.8960 μg,平均回收率为100.4%,RSD为1.53%(n=6)
期刊
【摘 要】本文对水质化验分析定义、特点、基本分析方法、工作内容及玻璃仪器的洗涤进行了分析。  【关键词】特点;分析方法;工作内容  【分类号】TL271+.99  0 前言  水化验分析主要的任务是能够及时、准确的汇报出所分析的数据。随着化工生产的发展,对化工企业生产用水和废水排放质量的要求也越来越高。因此对水进行严格的化验分析,根据水中所含的物质采取措施进行综合治理,对水的循环利用和环境保护是非
期刊
摘要:由于现有的气体检测所采用传统的有线传输或人工巡检方式,无法满足对一些测量点所处位置分散且环境恶劣地区的需求,本文提出了一种基于GPRS通信技术的远程气体检测系统的设计方案。本文研究了如何应用西门子MC55模块和单片机控制单元进行的客户端软硬的设计,以及应用Socket实现数据服务中心通讯的软件设计。介绍了内嵌TCP/IP协议栈的MC55模块如何通过AT指令接入Internet网络,并把数据发
期刊
摘要:随着社会经济的发展,人们生活水平的提高,汽车和人类的生活越来越紧密。人们在享受汽车带来方便的同时,也会被使用过程中出现的一些故障困扰。尤其是一些隐性的、不明显的震动类的故障,给人类正常的使用造成一些干扰和影响,并且也存在一定的安全隐患,需要及时正确处理和排除。  关键词:底盘 发震 传动轴 故障  【中图分类号】U461.4  故障现象:一辆2006年的宝马E66,发动机型号为:N52K,行
期刊