一种视频采集方法和装置制造方法

文档序号:7983823阅读:214来源:国知局
一种视频采集方法和装置制造方法
【专利摘要】本发明实施方式提出了一种视频采集方法和装置。方法包括:在编程语言框架层中设置摄像头采集类,摄像头采集类继承视频采集底层库,并针对视频采集底层库注册回调函数;摄像头采集类向视频采集底层库发送视频采集命令,视频采集底层库根据视频采集命令采集视频数据;应用回调函数从视频采集底层库获取视频数据,并将视频数据发送到编码器进行视频数据编码。应用本发明实施方式之后,对于视频数据的采集、编码以及发送,都不再需要经过瓜哇(JAVA)层,而是可以直接在编程语言框架层本地实现,降低了视频数据的复制、拷贝和传送时间,从而提高了视频数据的采集效率。
【专利说明】一种视频采集方法和装置
【技术领域】
[0001]本发明实施方式涉及信息处理【技术领域】,更具体地,涉及一种视频采集方法和装置。
【背景技术】
[0002]视频采集装置如手机、屏蔽电脑和数字电视等一般都具有视频互通的需求。视频互通大都通过视频流的方式实现,其不但能保持视频的连续性,还能确保一定的实时性。然而,视频采集装置,如采用安卓(Android)操作系统的视频采集装置,并没有给出标准接口来实现这种视频流服务。使得使用上述视频采集装置进行视频采集时,视频数据传递过程复杂,视频数据采集效率不高。

【发明内容】

[0003]本发明实施方式提出一种视频采集方法,从而简化视频数据传递过程,提高视频数据采集效率。
[0004]本发明实施方式还提出一种视频采集装置,从而简化数据数据传递过程,提高视频数据采集效率。
[0005]本发明实施方式的具体方案如下:
[0006]一种视频采集方法,该方法包括:
[0007]在编程语言框架层中设置摄像头采集类,所述摄像头采集类继承视频采集底层库,并针对所述视频采集底层库注册回调函数;
[0008]所述摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令采集视频数据;
[0009]应用所述回调函数从所述视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码。
[0010]一种视频采集装置,该装置包括设置单元、视频数据采集单元和视频数据编码单元,其中:
[0011]设置单元,用于在编程语言框架层中设置摄像头采集类,所述摄像头采集类继承视频采集底层库,并针对所述视频采集底层库注册回调函数;
[0012]视频数据采集单元,用于使能摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令采集视频数据;
[0013]视频数据编码单元,用于应用所述回调函数从所述视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码。
[0014]从上述技术方案可以看出,在本发明实施方式中,在编程语言框架层中设置摄像头采集类,所述摄像头采集类继承视频采集底层库,并针对所述视频采集底层库注册回调函数;所述摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令采集视频数据;应用所述回调函数从所述视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码。由此可见,应用本发明实施方式之后,对于视频数据的采集、编码以及发送,都不再需要经过JAVA层,而是可以直接在编程语言框架层本地实现,因此降低了视频数据的复制、拷贝和传送时间,从而提高了视频数据的米集效率。
【专利附图】

【附图说明】
[0015]图1为现有技术的安卓系统软件结构图;
[0016]图2为基于现有技术的安卓系统软件结构的摄像头系统结构图;
[0017]图3为现有技术的安卓系统软件结构中,摄像头系统的各个库之间的结构图;
[0018]图4为根据本发明实施方式的安卓系统软件结构的摄像头系统各个库之间的结构图;
[0019]图5为根据本发明实施方式的视频数据采集示意图;
[0020]图6根据本发明实施方式的视频数据采集方法流程图;
[0021]图7根据本发明实施方式的视频数据采集装置结构图。
【具体实施方式】
[0022]为使本发明的目的、技术方案和优点更加清楚,以下实施方式将以采用安卓系统的视频数据采集装置为例并结合附图对本发明作进一步的详细描述。
[0023]图1为现有技术的安卓系统软件结构图。
[0024]由图1可见,目前安卓系统软件一般分为四层,分别为Linux内核层、本地框架和Java运行环境层(包括硬件抽象层)、应用程序框架层和应用程序层。
[0025]其中第一层为Linux内核层,Linux内核层一般包括Linux操作系统和驱动(Linuxkernel),通常由C语言实现。通常情况下,Android核心系统服务依赖于Linux 2.6内核,包括:安全性、内存管理、进程管理、网络协议、驱动模型,等等。Linux内核也作为硬件和软件栈之间的抽象层。除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理,等等。
[0026]第二层为本地框架和Java运行环境(LIBRARIES和ANDROID RUNTIME)层,该层一般是由C/C++实现。包含C/C++库,被Android系统中不同组件使用,它们通过Android应用程序框架为开发者进行服务。其中:系统C库(libc)是从BSD继承过来的标准的C系统函数库,专门是为基于嵌入式Linux的设备定制的库;多媒体库是基于PackerVideo的OpenCore,该库支持多种常用的音频、视频格式回放和录制,支持多种媒体格式的编和解码格式;SufaCe Manager为显示子系统管理器,并且为多个应用程序提供2D和3D图层的无缝融合;LibWebCore是一个最新的Web浏览器引擎,支持Android浏览器,以及一个可嵌入式的Web视图;SGL是Skia图形库,底层的2D图形引擎;3D libraries是基于OpenGLES1.0 API的实现;该库可以使用硬件3D加速(如果可用),或者使用高度优化的3D软加速;FreeType是位图(bitmap)和矢量(vector)字体显不;An droid运行环境(ANDROIDRUNTIME)提供了 Java编程语言核心库的大多数功能,由Dalvik Java虚拟机和基础的Java类库组成;Dalvik是Android中使用的Java虚拟机,每个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例;Dalvik被设计成一个可以同时高效运行多个虚拟机实例的虚拟系统。执行后缀名为.dex的Dalvik可执行文件,该格式的文件针对小内存使用做出了优化。同时虚拟机是基于寄存器的,所有的类都是有Java编译器编译,然后通过SDK中的“dx”工具转化为.dex格式由虚拟机执行;Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。
[0027]第三层是应用程序框架(ANDROID FRAMEWORK)层。利用该层,在Android系统中,开发人员也可以完全访问核心应用程序所使用的API框架。
[0028]第四层是应用程序(APPLICATIONS)层,对于该层,其中Android应用程序都是由Java语言编写的。用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建。
[0029]在Android系统软件结构中,摄像头(Camera)系统设计的主要功能是视频的输入部分,在照相机、摄像头、视频电话等应用中都有所使用。Camera系统包含本地代码和JAVA代码,本地代码的应用编程接口(API)可以提供给两方面调用。一方面,本地代码提供的API通过封装Camera系统的JNI接口到Java类,实现Android照相机等应用;另一方面,本地代码提供的API可以提供给本地代码的其他程序调用,作为视频输入环节来使用。
[0030]图2为现有技术中Android系统软件结构的摄像头(Camera)系统结构图。
[0031]如图2所示,应用程序通过封装JNI接口可以启动摄像头,在JAVA层得到所采集的视频数据。然后Java层再调用编码器进行编码。可见,Camera数据(即视频数据)会从内核层转移到本地C框架,然后再到JAVA层的JNI部分,然后又从JNI部分转移到本地C框架进行编码。Camera数据的每次移植都会有数据的一次拷贝。比如:从本地接口到JNI的数据拷贝、从JNI层到本地编码之间的数据拷贝,因此这个过程相当耗费CPU,占据了大量的数据拷贝时间,降低了视频数据采集效率。
[0032]图3为现有技术中安卓系统软件结构的摄像头系统各个库之间的结构图。
[0033]由图3可见,对于摄像头系统各个库:
[0034]对于Java框架层,在其中Camera, java是主要实现的文件,提供最上层Camera的应用文件,继承了 android上层应用的所有相关内容,更多的是界面的代码实现。
[0035]对于Camera的JAVA本地调用层,主要是针对C框架中的函数接口的调用,也包含一些本地函数的实现。
[0036]对于C框架层,主要包括Camera底层库,这部分的内容被编译成库libu1.so。
[0037]对于内核空间层,这部分内容主要包括Camera硬件相关服务部分。这部分内容被编译成库libcameraservice.so。其中:为了实现一个具体功能的Camera,最底层还需要一个硬件相关的Camera库,这个硬件相关的Camera库将被Camera的服务库libcameraservice.so 调用。
[0038]由此可见,在现有技术的Android系统软件结构的摄像头(Camera)系统结构中,由于数据拷贝需要在Java层和本地框架层之间多次传递,因此具有视频数据采集效率低的缺点。
[0039]在本发明实施方式中,为了克服上述缺陷,对类似Android系统软件结构的Camera结构进行了调整。不再把视频编解码的控制和视频采集到数据的控制交给JAVA层,而是在本地实现数据的采集到编码。[0040]具体地,在本发明实施方式中,在采集视频数据之后,直接通过本地代码的API调用得到视频的数据流,然后把视频数据流直接送到编码器做编码。
[0041 ] 优选地,还可以对数据编码进行重新的封装,使得编码的API接口更适用于本地层的调用,从而视频数据的采集到编码到发送,都不经过JAVA层,可以提高系统的性能。
[0042]图4为根据本发明实施方式的Android系统软件结构的摄像头系统各个库之间的结构图。
[0043]如图4所示,在本发明实施方式中,去掉了现有技术中Android原始架构的JAVA本地调用部分,通过继承实现Camera底层库,直接实现针对视频数据的采集以及编码。
[0044]基于上述分析,图5为根据本发明实施方式的视频数据采集示意图。
[0045]由图5可见,通过在Android平台的编程语言框架层(优选为C框架层)中新建Camera采集类以继承Camera底层库(比如:libu1.so)中的Camera类,并注册回调函数到Camera底层库,可以调用接口开始数据采集;然后回调函数得到Camera数据,从而可以直接调用编码器实现编码过程。
[0046]由此可见,在本发明实施方式中,省去了现有技术中视频数据从Java本地框架层到Java应用程序层、然后调用编码器的复杂过程,从而简化了视频数据的拷贝和传递,提高了视频采集的效率。
[0047]基于上述详细分析,本发明实施方式提出了一种视频数据采集方法。
[0048]图6根据本发明实施方式的视频数据采集方法流程图。
[0049]如图6所示,该方法包括:
[0050]步骤601:在Android平台的编程语言框架层(优选为C框架层)中设置摄像头采集类,摄像头采集类继承视频采集底层库,并针对视频采集底层库注册回调函数。
[0051]首先,在摄像头采集的各个库中,视频采集底层库(Libu1.so)位于核心位置,它对JNI层提供的接口主要是摄像头(Camera)类。Camera, h是Camera类中对外的接口头文件,Camera类中实现了摄像头的基本操作,例如播放、停止、暂停等。Camera类中的Connect()是一个静态函数,它用于得到一个Camera的实例。在Camera类中,具有设置回调函数的相应函数。为了提供上层使用,可以由上层设置回调函数,而且回调函数可以在这些相应的回调函数中调用。
[0052]因此,在这里,可以在安卓平台的C框架层中设置摄像头采集类,所述摄像头采集类通过调用所述视频采集底层库的摄像头类中的对外接口头文件(Camera, h),实现继承视频采集底层库。
[0053]而且,可以基于Libu1.so的Camera类中的对外接口头文件(Camera, h)的回调函数接口设置本地函数;再设置本地函数为针对所述视频采集底层库的摄像头类的回调函数。
[0054]步骤602:所述摄像头采集类向视频采集底层库发送视频采集命令,视频采集底层库根据视频采集命令采集视频数据。
[0055]在这里,视频采集底层库根据所述视频采集命令,应用摄像头硬件服务库libcameraservice.so 采集视频数据。
[0056]步骤603:应用回调函数从所述视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码。[0057]在这里,可以应用回调函数从所述视频采集底层库获取视频数据;然后将视频数据发送到预先设置在安卓平台的C框架层中的编码器进行视频数据编码。
[0058]在一个实施方式中,该方法进一步包括:
[0059]瓜哇(Java)框架层应用文件向摄像头应用程序编程接口(API)层发送视频采集命令;摄像头API层将所述视频采集命令发送到C框架层中的所述摄像头采集类。
[0060]可以将本发明实施方式应用到各个版本的Android平台之中。示范性地,可以将本发明实施方式应用到:阿童木(Android Beta)、发条机器人(Android 1.0)、纸杯蛋糕(Android 1.5)、甜甜圈(Android 1.6)、松饼(Android 2.0/2.1),冻酸奶(Android 2.2)、姜饼(Android 2.3)、蜂巢(Android 3.0)、冰激凌三明治(Android 4.0)、、果冻豆(JellyBean, Android 4.1)等版本之中。
[0061]以上详细罗列了 Android平台的具体版本,本领域技术人员可以意识到,本发明实施方式并不局限于上述罗列版本,而还可以适用于其他基于Android软件架构的任意版本之中,也可以适用于其他类似Android系统的其他操作系统的版本之中。
[0062]基于上述详细分析,本发明实施方式还提出了一种安卓平台的视频采集装置。
[0063]图7根据本发明实施方式的视频数据采集装置结构图。
[0064]如图7所示,该装置包括设置单元701、视频数据采集单元702和视频数据编码单元703。其中:
[0065]设置单元701,用于在所述安卓平台的编程语言框架层(优选为C框架层)中设置摄像头采集类,所述摄像头采集类继承视频采集底层库,并针对所述视频采集底层库注册回调函数;
[0066]视频数据采集单元702,用于使能摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令采集视频数据;
[0067]视频数据编码单元703,用于应用所述回调函数从所述视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码。
[0068]在一个实施方式中,设置单元,用于在所述安卓平台的编程语言框架层(优选为C框架层)中设置摄像头采集类,所述摄像头采集类通过调用所述视频采集底层库的摄像头类中的对外接口头文件(Camera, h),实现继承视频采集底层库。
[0069]在一个实施方式中,设置单元,用于基于所述视频采集底层库的摄像头类中的对外接口头文件(Camera, h)的回调函数接口设置本地函数;设置所述本地函数为针对所述视频采集底层库的摄像头类的回调函数。
[0070]优选地,视频数据采集单元703,用于使能摄像头采集类向所述视频采集底层库发送视频采集命令;视频采集底层库的摄像头类中的对外接口头文件(Camera, h)调用视频采集开始函数以采集视频数据。
[0071]优选地,视频数据编码单元702,用于应用所述回调函数从所述视频采集底层库获取视频数据;将所述视频数据发送到预先设置在安卓平台的C框架层中的编码器进行视频数据编码。
[0072]在一个实施方式中,视频数据采集单元703,用于使能摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令,应用摄像头硬件服务库libcameraservice.so采集视频数据。[0073]进一步,该装置进一步包括视频采集命令接收单元704,其中:
[0074]视频采集命令接收单元704,用于使能瓜哇(Java)框架层应用文件向摄像头应用程序编程接口(API)层发送视频采集命令;摄像头API层将所述视频采集命令发送到C框架层中的所述摄像头采集类。
[0075]可以将本发明实施方式应用到多种终端上。比如,终端可以包括但是不局限于:功能手机、智能手机、掌上电脑、个人电脑(PC)、平板电脑或个人数字助理(PDA),等等。
[0076]以上以Android系统为实例对本发明实施方式进行了详细描述。本领域技术人员可以意识到,还可以将本发明实施方式应用到其它任意智能终端操作系统中。本发明实施方式能够适用的智能终端操作系统包括但是不局限于:Android、iOS、赛班(Symbian)、Windows Phone、黑莓(BlackBerry) OS、Mac OSX,等等。
[0077]在将本发明实施方式应用到除Android之外的其它智能终端操作系统时,基于所应用到的智能终端操作系统的具体应用环境和需求,可能会对本发明实施方式有适应性变化,比如:框架名字或方法步骤执行顺序等可能会出现相应的调整。本领域技术人员可以意识到,这些适应性的变化都没有脱离本发明实施方式的保护范围。
[0078]实际上,可以通过多种形式来具体实施本发明实施方式所提出的视频采集方法和/或装置。比如,可以遵循一定规范的应用程序接口,将事务提醒装置编写为安装到移动终端中的插件程序,也可以将其封装为应用程序以供用户自行下载使用。当编写为插件程序时,可以将其实施为ocx、dll、cab等多种插件形式。也可以通过Flash插件、RealPlayer插件、MMS插件、MIDI五线谱插件、ActiveX插件等具体技术来实施本发明实施方式所提出的下载任务分配装置。
[0079]可以通过指令或指令集存储的储存方式将本发明实施方式所提出的视频采集方法和/或装置存储在各种存储介质上。这些存储介质包括但是不局限于:软盘、光盘、DVD、硬盘、闪存、U盘、CF卡、SD卡、MMC卡、SM卡、记忆棒(Memory Stick)、xD卡等。另外,还可以将本发明实施方式所提出的视频采集方法和/或装置应用到基于闪存(Nand flash)的存储介质中,比如U盘、CF卡、SD卡、SDHC卡、MMC卡、SM卡、记忆棒、xD卡等。
[0080]综上所述,在本发明实施方式中,在编程语言框架层中设置摄像头采集类,摄像头采集类继承视频采集底层库,并针对视频采集底层库注册回调函数;摄像头采集类向视频采集底层库发送视频采集命令,视频采集底层库根据视频采集命令采集视频数据;应用回调函数从视频采集底层库获取视频数据,并将视频数据发送到编码器进行视频数据编码。由此可见,应用本发明实施方式之后,对于视频数据的采集、编码以及发送,都不再需要经过JAVA层,而是可以直接在编程语言框架层本地实现,因此降低了视频数据的复制、拷贝和传送时间,从而提高了视频数据的采集效率。
[0081]以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种视频采集方法,其特征在于,该方法包括:在编程语言框架层中设置摄像头采集类,所述摄像头采集类继承视频采集底层库,并针对所述视频采集底层库注册回调函数;所述摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令采集视频数据;应用所述回调函数从所述视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码。
2.根据权利要求1所述的视频采集方法,其特征在于,所述在编程语言框架层中设置摄像头采集类,所述摄像头采集类继承视频采集底层库包括:在所述编程语言框架层中设置摄像头采集类,所述摄像头采集类通过调用所述视频采集底层库的摄像头类中的对外接口头文件(Camera, h),实现继承视频采集底层库。
3.根据权利要求1所述的视频采集方法,其特征在于,所述针对视频采集底层库注册回调函数包括:基于所述视频采集底层库的摄像头类中的对外接口头文件(Camera, h)的回调函数接口设置本地函数;设置所述本地函数为针对所述视频采集底层库的摄像头类的回调函数。
4.根据权利要求1所述的视频采集方法,其特征在于,所述摄像头采集类向视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令采集视频数据包括: 所述摄像头采集类向所述视频采集底层库发送视频采集命令;视频采集底层库使能摄像头类中的对外接口头文件(Camera, h)调用视频采集开始函数以采集视频数据。
5.根据权利要求1所述的视频采集方法,其特征在于,所述应用回调函数从视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码包括:应用所述回调函数从所述视频采集底层库获取视频数据;将所述视频数据发送到预先设置在编程语言框架层的编码器进行视频数据编码。
6.根据权利要求1-5中任一项所述的视频采集方法,其特征在于,所述视频采集底层库根据视频采集命令采集视频数据包括:所述视频采集底层库根据所述视频采集命令,应用摄像头硬件服务库libcameraservice.so 采集视频数据。
7.根据权利要求1-5中任一项所述的视频采集方法,所述视频采集底层库被编译为libu1.so 库。
8.根据权利要求1-5中任一项所述的视频采集方法,其特征在于,该方法进一步包括:瓜哇(Java)框架层应用文件向摄像头应用程序编程接口(API)层发送视频采集命令;摄像头API层将所述视频采集命令发送到设置在所述编程语言框架层中的所述摄像头采集类。
9.一种视频采集装置,其特征在于,该装置包括设置单元、视频数据采集单元和视频数据编码单元,其中:设置单元,用于在编程语言框架层中设置摄像头采集类,所述摄像头采集类继承视频采集底层库,并针对所述视频采集底层库注册回调函数;视频数据采集单元,用于使能摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令采集视频数据;视频数据编码单元,用于应用所述回调函数从所述视频采集底层库获取视频数据,并将所述视频数据发送到编码器进行视频数据编码。
10.根据权利要求9所述的视频采集装置,其特征在于,设置单元,用于在所述编程语言框架层中设置摄像头采集类,所述摄像头采集类通过调用所述视频采集底层库的摄像头类中的对外接口头文件(Camera, h),实现继承视频采集底层库。
11.根据权利要求9所述的视频采集装置,其特征在于,设置单元,用于基于所述视频采集底层库的摄像头类中的对外接口头文件(Camera, h)的回调函数接口设置本地函数;设置所述本地函数为针对所述视频采集底层库的摄像头类的回调函数。
12.根据权利要求9所述的视频采集装置,其特征在于,视频数据采集单元,用于使能摄像头采集类向所述视频采集底层库发送视频采集命令;视频采集底层库的摄像头类中的对外接口头文件(Camera, h)调用视频采集开始函数以采集视频数据。
13.根据权利要求9所述的视频采集装置,其特征在于,视频数据编码单元,用于应用所述回调函数从所述视频采集底层库获取视频数据;将所述视频数据发送到预先设置在编程语言框架层中的编码器进行视频数据编码。
14.根据权利要求9-13中任一项所述的视频采集装置,其特征在于,视频数据采集单元,用于使能摄像头采集类向所述视频采集底层库发送视频采集命令,视频采集底层库根据所述视频采集命令,应用摄像头硬件服务库libcameraservice.so采集视频数据。
15.根据权利要求9-13中任一项所述的视频采集装置,其特征在于,视频采集底层库被编译为libu1.so库。
16.根据权利要求9-13中任一项所述的视频采集装置,其特征在于,该装置进一步包括视频采集命令接收单元,其中:视频采集命令接收单元,用于使能瓜哇(Java)框架层应用文件向摄像头应用程序编程接口(API)层发送视频采集命令;摄像头API层将所述视频采集命令发送到设置在所述编程语言框架层中的所述摄像头采集类。
【文档编号】H04N21/45GK103716691SQ201210370674
【公开日】2014年4月9日 申请日期:2012年9月29日 优先权日:2012年9月29日
【发明者】姬晓翠 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1