一种android设备使用USB摄像头的方法及系统的制作方法

文档序号:10661208阅读:1050来源:国知局
一种android设备使用USB摄像头的方法及系统的制作方法
【专利摘要】本发明提供一种android设备使用USB摄像头的方法,所述USB摄像头为高帧率高分辨率的摄像头,所述方法包括如下步骤:步骤1、获取接入的USB摄像头设备的设备节点名字;步骤2、通过open函数根据设备节点名字打开USB摄像头设备;步骤3、初始化USB摄像头设备参数;步骤4、使用android设备的V4L2接口获取USB摄像头设备采集的H264数据。本发明还提供了一种android设备使用USB摄像头的系统,本发明USB摄像头使用十分便携,在恶劣的环境下,比内置摄像头可拍摄更清晰的视频。
【专利说明】
一种androi d设备使用USB摄像头的方法及系统
技术领域
[0001 ]本发明涉及android设备技术领域,尤其涉及一种android设备使用USB摄像头的方法及系统。
【背景技术】
[0002]在视频直播流行的情况下,越来越多人用手持设备如手机拍摄视频进行直播,但是如果在拍摄恶劣的情况下,手持设备成像效果无法和专业的摄像头比,成像效果取决于相机的感光芯片大小和技术工艺,镜头质量;一般来说,感光芯片越大,相机档次越高,手持设备的感光芯片只是专业摄像头的十几分之一到几十分之一,手持设备摄像头和专业摄像头同等像素下,感光成像的效果也差很多;同时手持设备镜头能力也比专业的摄像头差,在恶劣的拍摄条件下,如很暗,移动很快的情况下,手持设备的成像效果就比专业摄像头差。
[0003]本发明介绍的使用外置USB摄像头的方法,android设备是在android 4.3版本后,可使用OTG功能外接USB摄像头,但是受限USB2.0带宽限制,无法采集高分辨率(720P以上)、高帧率(25FPS以上)的YUV原始视频数据,(USB 2.0理论传输速度大约在480Mbps,实际能到240Mbps,而720P的分辨率的YUV原始数据,按照25帧处理,带宽需要占用276Mbps左右,USB2.0设备如要传输高分辨率高帧率的YUV原始数据显得有点吃力),由于android支持UVC1.1后,支持采集编码后的数据,这样即使在USB2.0情况下,也可以使用高分辨率高帧率外置USB摄像头。

【发明内容】

[0004]本发明要解决的技术问题之一,在于提供一种android设备使用USB摄像头的方法,该USB摄像头使用十分便携,在恶劣的环境下,比内置摄像头可拍摄更清晰的视频。
[0005]本发明的技术问题一是这样实现的:一种android设备使用USB摄像头的方法,所述USB摄像头为高帧率高分辨率的摄像头,所述方法包括如下步骤:
[0006]步骤1、获取接入的USB摄像头设备的设备节点名字;
[0007]步骤2、通过open函数根据设备节点名字打开USB摄像头设备;
[0008]步骤3、初始化USB摄像头设备参数;
[0009]步骤4、使用android设备的V4L2接口获取USB摄像头设备采集的H264数据。
[0010]进一步的,所述步骤I具体为:使用Android Debug Bridge工具进入android设备Shel I程序后,比较USB摄像头插入前和插入时ls/dev/videoX的结果,插入前和插入时两次差能获得外置USB摄像头的设备名字,所述videoX为USB摄像头设备名字,其中X代表数字。[0011 ]进一步的,所述步骤3具体为:
[0012]通过1ctl函数,参数为:查询驱动功能VID10C_QUERYCAP;获取摄像头能力,查看是否支持图像获取V4L2_CAP_VIDE0_CAPTURE,且USB摄像头是否支持streaming 1/0操作函数V4L2_CAP_STREAMING,如果不支持,则结束;支持则继续,
[0013]通过1ctl函数,参数为:设置当前驱动的频捕获格式VID10C_S_FMT;设置视频分辨率,视频格式 V4L2_PIX_FMT_H264 ;
[0014]通过1ctl函数,参数为:把数据放回缓存队列VID10C_QBUF,视频采集类型V4L2_BUF_TYPE_VIDEO_CAPTURE,出队列以取得采集数据的帧缓冲V4L2_MEM0RY_MMAP;来设置存储器映像memory mapped方式。
[0015]进一步的,所述步骤4中USB摄像头设备采集具体为:开始采集数据,通过1ctl函数,参数为:开始视频显示函数VID10C_STREAM0N,缓冲类型V4L2_BUF_TYPE_VIDE0_CAPTURE;启动视频采集;
[0016]循环采集数据,在存储器映像Memorymapped方式下先从输出队列中,把数据放回缓存队列VID10C_DQBUF的一个缓冲buffer,然后对帧数据进行处理,处理完成以后通过1ctl函数,缓存队列VID10C_QBUF再放入输入队列。
[0017]进一步的,所述步骤4后进一步包括:
[0018]步骤5、通过1ctl函数,参数为结束视频显示函数VID10C_STREAM0FF,停止视频采集;
[0019]步骤6、通过munmap函数解映射缓冲;
[°02°]步骤7、通过close关闭USB摄像头设备。
[0021]本发明要解决的技术问题之二,在于提供一种android设备使用USB摄像头的系统,该USB摄像头使用十分便携,在恶劣的环境下,比内置摄像头可拍摄更清晰的视频。
[0022]本发明的技术问题二是这样实现的:一种android设备使用USB摄像头的系统,所述USB摄像头为高帧率高分辨率的摄像头,所述系统包括获取模块、打开设备模块、初始化模块以及获取数据模块;
[0023]所述获取模块,用于获取接入的USB摄像头设备的设备节点名字;
[0024]所述打开设备模块,通过open函数根据设备节点名字打开USB摄像头设备;
[0025]所述初始化模块,初始化USB摄像头设备参数;
[0026]所述获取数据模块,使用android设备的V4L2接口获取USB摄像头设备采集的H264数据。
[0027]进一步的,所述获取模块具体为:使用Android Debug Bridge工具进入android设备She 11程序后,比较USB摄像头插入前和插入时I s/dev/videoX的结果,插入前和插入时两次差能获得外置USB摄像头的设备名字,所述videoX为USB摄像头设备名字,其中X代表数字。
[0028]进一步的,所述初始化模块具体为:
[0029]通过1ctl函数,参数为:查询驱动功能VID10C_QUERYCAP;获取摄像头能力,查看是否支持图像获取V4L2_CAP_VIDE0_CAPTURE,且USB摄像头是否支持streaming 1/0操作函数V4L2_CAP_STREAMING,如果不支持,则结束;支持则继续,
[0030]通过1ctl函数,参数为:设置当前驱动的频捕获格式VID10C_S_FMT;设置视频分辨率,视频格式 V4L2_PIX_FMT_H264 ;
[0031]通过1ctl函数,参数为:把数据放回缓存队列VID10C_QBUF,视频采集类型V4L2_BUF_TYPE_VIDE0_CAPTURE,出队列以取得采集数据的帧缓冲V4L2_MEM0RY_MMAP;来设置存储器映像memory mapped方式。
[0032]进一步的,所述获取数据模块中USB摄像头设备采集具体为:开始采集数据,通过1ctl函数,参数为:开始视频显示函数VID1C_STREAMON,缓冲类型V4L2_BUF_TYPE_VIDE0_CAPTURE;启动视频采集;
[0033]循环采集数据,在存储器映像Memorymapped方式下先从输出队列中,把数据放回缓存队列VID1C_DQBUF的一个缓冲buffer,然后对帧数据进行处理,处理完成以后通过1ctl函数,缓存队列VID1C_QBUF再放入输入队列。
[0034]进一步的,所述系统进一步包括:停止视频采集模块、解映射缓冲模块以及关闭设备模块;
[0035]所述停止视频采集模块,通过1ctl函数,参数为结束视频显示函数VID10C_STREAMOFF,停止视频采集;
[0036]所述解映射缓冲模块,通过munmap函数解映射缓冲;
[0037]所述关闭设备模块,通过close关闭USB摄像头设备。
[0038]本发明具有如下优点:本发明先获取接入设备的USB摄像头设备名称,通过初始化设备参数;再使用android设备的V4L2接口获取USB摄像头设备采集的H264数据;该USB摄像头为高帧率高分辨率的摄像头,USB摄像头使用十分便携,在恶劣的环境下,比内置摄像头可拍摄更清晰的视频,提高了用户的体验。
【附图说明】
[0039]图1为本发明方法流程示意图。
[0040]图2为本发明系统的结构示意图。
【具体实施方式】
[0041 ]请参阅图1所示,本发明的一种an dro id设备使用USB摄像头的方法,所述USB摄像头为高帧率高分辨率的摄像头,所述方法包括如下步骤:
[0042]步骤1、获取接入的USB摄像头设备的设备节点名字;获取设备名字的方法很多,在本发明中所述步骤I具体为:使用Android Debug Bridge工具进入android设备Shell程序后,比较USB摄像头插入前和插入时ls/dev/videoX的结果,插入前和插入时两次差能获得外置USB摄像头的设备名字,所述V i deoX为USB摄像头设备名字,其中X代表数字。
[0043]步骤2、通过open函数根据设备节点名字打开USB摄像头设备;
[0044]步骤3、初始化USB摄像头设备参数;
[0045]步骤4、使用android设备的V4L2接口获取USB摄像头设备采集的H264数据。
[0046]步骤5、通过1ctl函数,参数为结束视频显示函数VID10C_STREAM0FF,停止视频采集;
[0047]步骤6、通过munmap函数解映射缓冲;(munmap函数用来取消参数start所指的映射内存起始地址,参数length则是欲取消的内存大小。)
[0048]步骤7、通过close关闭USB摄像头设备。
[0049]所述步骤3具体为:
[0050]通过1ctl函数,参数为:查询驱动功能VID10C_QUERYCAP;获取摄像头能力,查看是否支持图像获取V4L2_CAP_VIDE0_CAPTURE,且USB摄像头是否支持streaming 1/0操作函数V4L2_CAP_STREAMING,如果不支持,则结束;支持则继续,
[0051]通过1ctl函数,参数为:设置当前驱动的频捕获格式VID10C_S_FMT;设置视频分辨率(长和宽),视频格式V4L2_PIX_FMT_H264 ;
[0052]通过1ctl函数,参数为:把数据放回缓存队列VID10C_QBUF,视频采集类型V4L2_BUF_TYPE_VIDEO_CAPTURE,出队列以取得采集数据的帧缓冲V4L2_MEM0RY_MMAP;来设置存储器映像memory mapped方式。
[0053]所述步骤4中USB摄像头设备采集具体为:开始采集数据,通过1ctl函数,参数为:开始视频显示函数VID10C_STREAM0N,缓冲类型V4L2_BUF_TYPE_VIDE0_CAPTURE;启动视频米集;
[0054]循环采集数据,在存储器映像Memorymapped方式下先从输出队列中,把数据放回缓存队列VID10C_DQBUF的一个缓冲buffer,然后对帧数据进行处理,处理完成以后通过1ctl函数,缓存队列VID10C_QBUF再放入输入队列。
[0055]请参阅图2所示,本发明的一种andro id设备使用USB摄像头的系统,所述USB摄像头为高帧率高分辨率的摄像头,所述系统包括获取模块、打开设备模块、初始化模块以及获取数据模块;
[0056]所述获取模块,用于获取接入的USB摄像头设备的设备节点名字;所述获取模块具体为:使用Android Debug Bridge工具进入android设备ShelI程序后,比较USB摄像头插入前和插入时ls/dev/videoX的结果,插入前和插入时两次差能获得外置USB摄像头的设备名字,所述V i deoX为USB摄像头设备名字,其中X代表数字。
[0057]所述打开设备模块,通过open函数根据设备节点名字打开USB摄像头设备;
[0058]所述初始化模块,初始化USB摄像头设备参数;
[0059]所述获取数据模块,使用android设备的V4L2接口获取USB摄像头设备采集的H264数据。
[0060]所述初始化模块具体为:
[0061 ] 通过1ctl函数,参数为:查询驱动功能VID10C_QUERYCAP;获取摄像头能力,查看是否支持图像获取V4L2_CAP_VIDE0_CAPTURE,且USB摄像头是否支持streaming 1/0操作函数V4L2_CAP_STREAMING,如果不支持,则结束;支持则继续,
[0062]通过1ctl函数,参数为:设置当前驱动的频捕获格式VID10C_S_FMT;设置视频分辨率(长和宽),视频格式V4L2_PIX_FMT_H264 ;
[0063]通过1ctl函数,参数为:把数据放回缓存队列VID10C_QBUF,视频采集类型V4L2_BUF_TYPE_VIDE0_CAPTURE,出队列以取得采集数据的帧缓冲V4L2_MEM0RY_MMAP;来设置存储器映像memory mapped方式。
[0064]所述获取数据模块中USB摄像头设备采集具体为:开始采集数据,通过1ctl函数,参数为:开始视频显示函数VID10C_STREAM0N,缓冲类型V4L2_BUF_TYPE_VIDE0_CAPTURE ;启动视频米集;
[0065]循环采集数据,在存储器映像Memorymapped方式下先从输出队列中,把数据放回缓存队列VID10C_DQBUF的一个缓冲buffer,然后对帧数据进行处理,处理完成以后通过1ctl函数,缓存队列VID10C_QBUF再放入输入队列。
[0066]在本发明中,所述系统进一步包括:停止视频采集模块、解映射缓冲模块以及关闭设备模块;
[0067]所述停止视频采集模块,通过1ctl函数,参数为结束视频显示函数VID10C_STREAMOFF,停止视频采集;
[0068]所述解映射缓冲模块,通过munmap函数解映射缓冲;
[0069]所述关闭设备模块,通过close关闭USB摄像头设备。
[0070]这里需要说明书的是:本发明有以下限制条件:
[0071]I)android设备中android 4.3系统以上,
[0072]2)android设备必须支持OTG功能,
[0073]3)USB 2.0摄像头,支持UVC驱动,并且支持编码好的数据。
[0074]总之,本发明先获取接入设备的USB摄像头设备名称,通过初始化设备参数;再使用android设备的V4L2接口获取USB摄像头设备采集的H264数据;该USB摄像头为高帧率高分辨率的摄像头,USB摄像头使用十分便携,在恶劣的环境下,比内置摄像头可拍摄更清晰的视频,提高了用户的体验。
[0075]以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
【主权项】
1.一种android设备使用USB摄像头的方法,其特征在于:所述USB摄像头为高帧率高分辨率的摄像头,所述方法包括如下步骤: 步骤1、获取接入的USB摄像头设备的设备节点名字; 步骤2、通过open函数根据设备节点名字打开USB摄像头设备; 步骤3、初始化USB摄像头设备参数; 步骤4、使用android设备的V4L2接口获取USB摄像头设备采集的H264数据。2.根据权利要求1所述的一种android设备使用USB摄像头的方法,其特征在于:所述步骤I具体为:使用Android Debug Bridge工具进入android设备Shell程序后,比较USB摄像头插入前和插入时ls/dev/videoX的结果,插入前和插入时两次差能获得外置USB摄像头的设备名字,所述V i deoX为USB摄像头设备名字,其中X代表数字。3.根据权利要求1所述的一种android设备使用USB摄像头的方法,其特征在于:所述步骤3具体为: 通过1ctl函数,参数为:查询驱动功能VID1C_QUERYCAP;获取摄像头能力,查看是否支持图像获取V4L2_CAP_VIDE0_CAPTURE,且USB摄像头是否支持streaming I/O操作函数V4L2_CAP_STREAMING,如果不支持,则结束;支持则继续, 通过1ctl函数,参数为:设置当前驱动的频捕获格式VID1C_S_FMT;设置视频分辨率,视频格式 V4L2_PIX_FMT_H264 ; 通过1ctl函数,参数为:把数据放回缓存队列VID1C_QBUF,视频采集类型V4L2_BUF_TYPE_VIDEO_CAPTURE,出队列以取得采集数据的帧缓冲V4L2_MEM0RY_MMAP ;来设置存储器映像memory mapped方式。4.根据权利要求1所述的一种android设备使用USB摄像头的方法,其特征在于:所述步骤4中USB摄像头设备采集具体为:开始采集数据,通过1ctl函数,参数为:开始视频显示函数VID1C_STREAMON,缓冲类型V4L2_BUF_TYPE_VIDE0_CAPTURE;启动视频采集;循环采集数据,在存储器映像Memory mapped方式下先从输出队列中,把数据放回缓存队列VID1C_DQBUF的一个缓冲buf f er,然后对帧数据进行处理,处理完成以后通过1ctl函数,缓存队列VID1C_QBUF再放入输入队列。5.根据权利要求1所述的一种android设备使用USB摄像头的方法,其特征在于:所述步骤4后进一步包括: 步骤5、通过1ctl函数,参数为结束视频显示函数VID1C_STREAMOFF,停止视频采集; 步骤6、通过munmap函数解映射缓冲; 步骤7、通过close关闭USB摄像头设备。6.一种android设备使用USB摄像头的系统,其特征在于:所述USB摄像头为高帧率高分辨率的摄像头,所述系统包括获取模块、打开设备模块、初始化模块以及获取数据模块; 所述获取模块,用于获取接入的USB摄像头设备的设备节点名字; 所述打开设备模块,通过open函数根据设备节点名字打开USB摄像头设备; 所述初始化模块,初始化USB摄像头设备参数; 所述获取数据模块,使用android设备的V4L2接口获取USB摄像头设备采集的H264数据。7.根据权利要求6所述的一种android设备使用USB摄像头的系统,其特征在于:所述获取模块具体为:使用Android Debug Bridge工具进入android设备ShelI程序后,比较USB摄像头插入前和插入时ls/dev/videoX的结果,插入前和插入时两次差能获得外置USB摄像头的设备名字,所述VideoX为USB摄像头设备名字,其中X代表数字。8.根据权利要求6所述的一种android设备使用USB摄像头的系统,其特征在于:所述初始化模块具体为: 通过1ctl函数,参数为:查询驱动功能VID1C_QUERYCAP;获取摄像头能力,查看是否支持图像获取V4L2_CAP_VIDE0_CAPTURE,且USB摄像头是否支持streaming I/O操作函数V4L2_CAP_STREAMING,如果不支持,则结束;支持则继续, 通过1ctl函数,参数为:设置当前驱动的频捕获格式VID1C_S_FMT;设置视频分辨率,视频格式 V4L2_PIX_FMT_H264 ; 通过1ctl函数,参数为:把数据放回缓存队列VID1C_QBUF,视频采集类型V4L2_BUF_TYPE_VIDEO_CAPTURE,出队列以取得采集数据的帧缓冲V4L2_MEM0RY_MMAP ;来设置存储器映像memory mapped方式。9.根据权利要求6所述的一种android设备使用USB摄像头的系统,其特征在于:所述获取数据模块中USB摄像头设备采集具体为:开始采集数据,通过1ctl函数,参数为:开始视频显示函数VID1C_STREAMON,缓冲类型V4L2_BUF_TYPE_VIDE0_CAPTURE;启动视频采集; 循环采集数据,在存储器映像Memory mapped方式下先从输出队列中,把数据放回缓存队列VID1C_DQBUF的一个缓冲buf f er,然后对帧数据进行处理,处理完成以后通过1ctl函数,缓存队列VID1C_QBUF再放入输入队列。10.根据权利要求6所述的一种android设备使用USB摄像头的系统,其特征在于:所述系统进一步包括:停止视频采集模块、解映射缓冲模块以及关闭设备模块; 所述停止视频采集模块,通过1ctl函数,参数为结束视频显示函数VID10C_STREAMOFF,停止视频采集; 所述解映射缓冲模块,通过munmap函数解映射缓冲; 所述关闭设备模块,通过close关闭USB摄像头设备。
【文档编号】H04N5/77GK106027884SQ201610325849
【公开日】2016年10月12日
【申请日】2016年5月17日
【发明人】钟添华, 陈嗣文
【申请人】福建星网锐捷通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1