基于安卓多媒体框架的视频类App中视频数据获取方法与流程

文档序号:13217923阅读:1340来源:国知局
技术领域本发明属于Android多媒体技术领域,具体涉及一种基于Android多媒体框架的视频类App(应用程序)中的视频数据获取方法。

背景技术:
随着移动互联网的飞速发展,应用市场中App也在膨胀式增多,数量庞大、种类繁多。在移动互联网中,视频数据逐渐成为多媒体数据中最重要的组成元素之一,它可以从时间、空间等维度上更逼真地记录更多细节内容。但是,网络中的多媒体数据信息给人们带来方便的同时,也带来了很多负面的影响。一些包含不良信息(如暴力恐怖、低俗等)的视频在移动互联网中的广泛传播严重威胁了网络安全,危害了移动互联网用户的用网安全。为了保障应用市场环境的健康,需要能够快速、准确地在海量应用App中分析出不良视频并予以处理,但是Android系统出于安全考虑,用户无法突破系统的权限来获取第三方App的数据,所以本发明提出了从根本上解决获取使用Android多媒体库开发的App中的视频数据的方法,以为后续监管工作提供良好的条件。

技术实现要素:
本发明针对现有获取Android端视频类App中视频数据方面的空白,提出一种高效处理和获取此类数据的方法。该方法基于Android源码或者CyanogenMod源码,能够处理基于Android多媒体框架的所有App以获取视频数据。本发明基于Android源码多媒体框架Acodec和多媒体解码器接口OMXCodec,在对视频压缩数据(流媒体、本地视频)进行解析(parse)和解码(decode)的流程中,精确定位H264数据送往OMCodec接口的位置,将其保存至本地,从而达到获取视频数据H264的目的;同理,精确定位解码后的数据从Acodec框架送至Andoid图形显示模块ANativeWindows的位置从而获取视频的YUV数据。其中,H264数据是指应用程序下载的视频数据经过音视频分离后的纯视频数据,YUV数据是指H264数据经过解码器解码后的视频数据。进一步地,鉴于YUV数据过于庞大,通过将Android源码中的Jpeg压缩模块添加至多媒体模块中,将YUV数据压缩为Jpeg格式,即可以图片形式保存视频数据。可以根据需求选择是否压缩YUV数据为Jpeg数据。本发明的有益效果是:本发明针对Android视频类App中视频数据获取问题领域的空白,提出了一个全新的解决方法,通过跟踪Android视频数据从解码到最终显示的整个流程,修改Android多媒体框架源码并定制ROM刷机;该方法能够覆盖所有使用安卓多媒体框架的应用程序,并且只要有网络视频就可以正常播放,视频数据的获取可以达到零延时。附图说明图1是基于Android多媒体框架的视频类应用程序中视频数据获取框架图。图2是基于Android多媒体框架的视频数据获取流程图。其中Fd表示本地视频或者应用程序缓冲至自身内存的视频文件句柄,offset表示本次需解码的视频数据相对总数据的偏移长度,length表示视频数据的字节长度。具体实施方式下面通过具体实施例和附图,对本发明做进一步说明。本实施例选择CyanogenMod12.1源码,通过修改源码实现视频数据H264和YUV(或压缩成jpeg格式)的获取,并在三星N5100上刷机,实现数据的获取保存。(注:此处CyanogenMod12.1对应Android版本5.1,源码版本和机型N5100的选择只是实验测试,所有CyanogenMod源码适配的手机以及所有CyanogenMod源码版本均可使用该方法)。图1是基于Android多媒体框架的视频类应用程序中视频数据获取框架图。其整体包含用户进程、mediaServer进程和Binder通信三部分。左边用户进程的第一层为应用程序层,即开发人员开发的应用程序,如爱奇艺APP、百度视频APP等;第二层API类表示Android提供的java接口,为Android开发人员使用,第三层是JNI层,由于Android底层源码最终是C/C+代码实现的各种库,要使API层的java和C/C++不同语言之间的互相调用,就引入了JNI层,第四层库libmedia.so是多媒体功能C++类的API接口。右边mediaServer进程是对多媒体数据真正作处理的进程,其中Acodec是Android源码多媒体框架,OMXCodec表示多媒体解码器接口。BinderIPC是实现应用程序进程和mediaServer进程跨进程调用的通信机制。图2是本实施例的视频数据获取流程图,其主要步骤如下:(本实施例选择CyanogenMod12.1源码,安卓真机为三星N5100)(1)修改安卓源码根据视频解码播放流程跟踪Android源码中多媒体数据流向,定位Acodec框架中视频分离后通过OMXCodec接口进入解码器的位置,即OMXCodec::empty()函数处,此处便是H264视频数据。分析该处buffer_id(数据缓存id)对应的数据结构,取出每一帧视频的H264数据。由于真机权限的问题,无法将视频数据保存到Sdcard(SD卡),但Andorid多媒体库拥有data/misc/media路径的读写权限,能够将视频数据保存到该路径下,所以利用文件操作open()函数在本地/data/misc/media路径下创建文件,将H264数据写保存至本地即可。同理,根据安卓多媒体框架Acodec将解码后数据传递给Android图形显示框架AnativeWindows类,定位缓冲区的YUV数据,即ACodec::BaseState::onOutputBufferDrained()函数处。由于YUV数据过大,为了高效获取图像信息,将Android源码中的libJpeg库移植到Android多媒体框架中,将每一帧YUV数据压缩成一张独立的Jpeg图片,利用同样的方法保存即可。(2)编译Android源码在github(分布式源码管理网站)上下载N5100硬件驱动等方面的硬件二进制代码,分别获取到vendor、kernel、device三个文件夹,将其放入CyanogenMod12.1源码根目录下,即可使用brunchn5100命令进行编译,编译成功后在out目录下生成打包后的ROM:CM-12-20151119-UNOFFICIAL-n5100.zip。(3)刷机首先将CM-12-20151119-UNOFFICIAL-n5100.zip包放入真机的Sdcard路径下,然后利用Odin软件向N5100中刷入第三方Recovery:PhilZTouch6,之后同时按下home键+开机键+音量加键,进入Recovery模式,选择Sdcard刷机,选择之前放入的zip包,即可将修改源码后的定制ROM刷入真机,然后重新启动手机,完成wifi和语言配置等相关工作即可实现能够获取视频数据的定制手机。本实施例提出的获取基于Android多媒体框架的视频类App中视频数据获取方法,其测试环境及实验数据为:1)测试环境:系统环境:ubuntu14.04LTS硬件环境:三星N5100测试使用Android开源程序:CyanogenMod12.12)测试准备安装视频类App,播放视频时,视频数据(H264/YUV/jpeg)即可保存至/data/misc/media路径下,利用adb工具(客户端-服务器端程序)即可取出视频数据。至此便实现数据获取功能。3)实验数据腾讯视频App:经过选取腾讯视频App不同视频类型中的100个视频(类型包含:电视剧、综艺、电影等),均可以获得视频数据保存至手机本地。秒拍App:选取秒拍中已有视频或者自己拍摄上传的视频,通过测试100个视频,均能获取视频数据保存之本地。经过测试,乐视体育App、百度视频App、YYApp、秒拍App、芒果TVApp等,均能成功获取视频数据。采用本发明方法获取到的H264数据通过一般支持H264播放的视频播放器即可播放,YUV数据在能播放YUV数据的播放器上进行播放时需要输入视频的长宽,所以需要从源码中获取处视频的长宽大小。以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1