CN113342422A - 一种Linux兼容Android的多应用访问摄像头方法及装置 - Google Patents

一种Linux兼容Android的多应用访问摄像头方法及装置 Download PDF

Info

Publication number
CN113342422A
CN113342422A CN202110726449.6A CN202110726449A CN113342422A CN 113342422 A CN113342422 A CN 113342422A CN 202110726449 A CN202110726449 A CN 202110726449A CN 113342422 A CN113342422 A CN 113342422A
Authority
CN
China
Prior art keywords
camera
application
linux
android
list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110726449.6A
Other languages
English (en)
Inventor
何勇
姚宏亮
张耀斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jide Technology Research Institute Wuhan Co ltd
Original Assignee
Jide Technology Research Institute Wuhan Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jide Technology Research Institute Wuhan Co ltd filed Critical Jide Technology Research Institute Wuhan Co ltd
Priority to CN202110726449.6A priority Critical patent/CN113342422A/zh
Publication of CN113342422A publication Critical patent/CN113342422A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72403User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality
    • H04M1/7243User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality with interactive means for internal management of messages
    • H04M1/72439User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality with interactive means for internal management of messages for image or video messaging

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Human Computer Interaction (AREA)
  • Business, Economics & Management (AREA)
  • Multimedia (AREA)
  • Studio Devices (AREA)

Abstract

本发明公开了一种Linux兼容Android的多应用访问摄像头方法及装置,在Linux上创建容器,将Linux侧的摄像头挂载到容器内;在Android系统启动相机框架服务进程,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件;当监控到摄像头被插入时,Android系统的相机框架服务进程将单个摄像头虚拟成一个前置摄像头和一个后置摄像头;当Android应用访问摄像头时,HAL层为Android应用适配使用空闲的摄像头;比较正在使用摄像头的应用的进程的优先级与请求使用摄像头的应用的进程的优先级,确定摄像头的使用。实现多App同时访问不同摄像头的功能。

Description

一种Linux兼容Android的多应用访问摄像头方法及装置
技术领域
本发明涉及计算机操作系统领域,尤其涉及一种Linux兼容Android的多应用访问摄像头方法及装置。
背景技术
由于Android应用生态已经成为当今世界上最大的应用生态,因此跨平台运行Android应用已经成为一种行业的趋势。众所周知,Linux桌面操作系统一直以来最大的问题就是应用生态缺乏的问题,这也导致了Linux桌面系统无法成为主流的桌面操作系统的原因,因此把Android应用兼容运行在Linux桌面系统之上也越来越被大众所接受。
Linux兼容Android的环境是一种在Linux操作系统上运行Android应用(App)的技术,对丰富Linux操作系统应用生态有着重要的意义。Linux兼容Android的环境一般由Host端和Guest端组成,Host端运行于Linux系统上,主要包括Android容器和用户交互窗口,Android容器的作用是从Linux系统中隔离出部分内核资源来支撑Guest端运行,Guest端主要包括特殊定制的Android应用框架和Android运行时库等,Android应用都运行在Guest端。
与PC设备不同的是,移动设备只有两路摄像头:一路前置摄像头,一路后置摄像头,而且不支持USB端口扩展更多的摄像头。而安装了Linux操作系统兼容Android环境的PC机不仅配备了内置摄像头,还可通过USB端口外接设备来支持更多的USB摄像头。现有的Android技术框架不支持外接USB摄像头,因此PC外接的USB摄像头无法被充分利用。
现有的Android技术框架中,相机框架服务会在摄像头被某一个App打开后,会将摄像头ID(1表示前置摄像头、0表示后置摄像头)和进程PID进行缓存,在接受新的摄像头打开请求时会将请求的摄像头ID(1表示前置摄像头、0表示后置摄像头)在缓存种进行查找,如果该摄像头ID(1表示前置摄像头、0表示后置摄像头)已经在缓存种被找到,则证明该摄像头已经被打开,会将之前打开摄像头关闭,同时接受新的请求打开摄像头,在有多个前置摄像头以及多个后置摄像头的情形下,现有的相机框架服务只通过摄像头ID(1表示前置摄像头、0表示后置摄像头)判断有没有被打开的逻辑会导致多个摄像头无法同时被打开。
实际中经常遇到要使用一个摄像头做多个事情的情况,但现有技术:一个摄像头只能被一个应用程序所占有,当一个应用程序在使用摄像头时,其他所有应用程序都无法在使用这个摄像头。
发明内容
为了解决在Linux兼容Android的环境中多个Android应用可以在同一时刻访问多路摄像头的问题,本发明提供了一种Linux兼容Android的多应用访问摄像头方法及装置。
一方面,本发明提供一种Linux兼容Android的多应用访问摄像头方法,所述方法应用在Linux上兼容运行Android系统的运行环境下,所述方法包括如下步骤:
步骤S1:在Linux上创建容器,将Linux侧的摄像头挂载到容器内;在Linux上启动容器,在容器内启动Android系统;
步骤S2:在Android系统启动相机框架服务进程,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件;
当监控到摄像头被插入时,Android系统的相机框架服务进程将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,以使Linux系统的摄像头被添加到HAL层的前置摄像头信息列表和后置摄像头信息列表;所述摄像头信息列表包括摄像头类型id、打开摄像头的应用的进程优先级、打开摄像头的应用的进程号、摄像头名称;
步骤S3:当Android应用访问摄像头时,先分析判断Android应用访问的摄像头类型id为前置摄像头id或后置摄像头id;再根据摄像头名称,判断HAL层的前置摄像头信息列表或后置摄像头信息列表中是否存在空闲的摄像头;若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头;若不存在空闲的摄像头,则比较正在使用摄像头的应用的进程的优先级与请求使用摄像头的应用的进程的优先级,如果正在使用摄像头的应用的进程的优先级高,则本次打开失败,如果请求使用摄像头的应用的进程的优先级高,则关闭正在打开的摄像头,为请求使用摄像头的应用打开摄像头,同时更新已打开的摄像头信息缓存队列列表。
进一步地,所述步骤S2中,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件,包括:相机框架服务进程监控/dev目录下的设备被拔出时,将被拔掉的摄像头名称通知给HAL层,HAL层从前置摄像头列表和后置摄像头列表中删除被拔掉的摄像头名称。
进一步地,所述步骤S2中相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件,具体为:通过inotify_add_watch(fd,“/dev”,“IN_CREATE|IN_DELETE”)来感知摄像头的被插入或拔出动作,IN_CREATE表示摄像头被插入,IN_DELETE表示摄像头被拔出。
进一步地,所述步骤S2中,当监控到摄像头被插入时,Android系统的相机框架服务将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,包括:新增摄像头时,相机框架服务进程分两次通知HAL层:新增前置摄像头、新增后置摄像头,HAL层根据摄像头类型把摄像头信息添加到对应的前置摄像头列表或后置摄像头列表。
进一步地,所述步骤S3中,若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头,包括:HAL层根据Android应用需要使用的摄像头类型为前置或后置,在前置摄像头列表或后置摄像头列表中选择空闲的摄像头;将前置摄像头列表或后置摄像头列表中被选择使用的摄像头的状态标记为正在使用,打开相机,并保存打开相机的应用的进程号、摄像头名称。
另一方面,本发明提供一种Linux兼容Android的多应用访问摄像头装置,所述装置应用在Linux上兼容运行Android系统的运行环境下,所述装置包括:
容器创建启动单元,用于:在Linux上创建容器,将Linux侧的摄像头挂载到容器内;在Linux上启动容器,在容器内启动Android系统;
虚拟摄像头单元,用于:在Android系统启动相机框架服务进程,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件;
当监控到摄像头被插入时,Android系统的相机框架服务进程将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,以使Linux系统的摄像头被添加到HAL层的前置摄像头信息列表和后置摄像头信息列表;所述摄像头信息列表包括摄像头类型id、打开摄像头的应用的进程优先级、打开摄像头的应用的进程号、摄像头名称;
访问摄像头单元,用于:当Android应用访问摄像头时,先分析判断Android应用访问的摄像头类型id为前置摄像头id或后置摄像头id;再根据摄像头名称,判断HAL层的前置摄像头信息列表或后置摄像头信息列表中是否存在空闲的摄像头;若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头;若不存在空闲的摄像头,则比较正在使用摄像头的应用的进程的优先级与请求使用摄像头的应用的进程的优先级,如果正在使用摄像头的应用的进程的优先级高,则本次打开失败,如果请求使用摄像头的应用的进程的优先级高,则关闭正在打开的摄像头,为请求使用摄像头的应用打开摄像头,同时更新已打开的摄像头信息缓存队列列表。
进一步地,所述虚拟摄像头单元,用于:相机框架服务进程监控/dev目录下的设备被拔出时,将被拔掉的摄像头名称通知给HAL层,HAL层从前置摄像头列表和后置摄像头列表中删除被拔掉的摄像头名称。
进一步地,所述虚拟摄像头单元,用于:通过inotify_add_watch(fd,“/dev”,“IN_CREATE|IN_DELETE”)来感知摄像头的被插入或拔出动作,IN_CREATE表示摄像头被插入,IN_DELETE表示摄像头被拔出。
进一步地,所述虚拟摄像头单元,用于:新增摄像头时,相机框架服务进程分两次通知HAL层:新增前置摄像头、新增后置摄像头,HAL层根据摄像头类型把摄像头信息添加到对应的前置摄像头列表或后置摄像头列表。
进一步地,所述访问摄像头单元,用于:HAL层根据Android应用需要使用的摄像头类型为前置或后置,在前置摄像头列表或后置摄像头列表中选择空闲的摄像头;将前置摄像头列表或后置摄像头列表中被选择使用的摄像头的状态标记为正在使用,打开相机,并保存打开相机的应用的进程号、摄像头名称。
本发明与现有技术相比,具有以下优点:
本发明提成的技术方案,在PC主机上插入多个USB摄像头后可以保证每个摄像头能被不同的应用操作,实现多App同时访问不同摄像头的功能,可以广泛应用于监控和分屏会议等场景。
附图说明
图1是本发明实施例提供的一种Linux兼容Android的多应用访问摄像头方法示意图;
图2是本发明实施例提供的一种Linux兼容Android的多应用访问摄像头装置组成示意图;
图3是本发明实施例提供的一种Linux兼容Android的虚拟前置摄像头和后置摄像头的网络架构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
对于在Linux操作系统上兼容运行Android的运行环境来说,Android运行环境是运行在容器中的。
容器是近些年由Linux内核支持的一种轻量级虚拟技术。通过容器技术可以在Linux系统运行一个新的Linux系统(包括其他基于Linux系统定制的系统,如Android),容器使得客户机系统和主机系统相互隔离。与传统的基于虚拟机技术的方案不同,在容器技术中,客户系统与主机系统共享CPU、内存、存储等资源,资源开销很低。此外,通过适当的配置,还能使客户系统直接访问主机的硬件资源,进一步提升客户系统的性能。
由于容器docker的隔离作用,Linux无法访问Android的内部存储目录,Linux上的Android应用无法直接访问Linux侧文件。
图1是本发明实施例提供的一种Linux兼容Android的多应用访问摄像头方法示意图,所述方法应用在Linux上兼容运行Android系统的运行环境下,所述方法包括如下步骤:
步骤S1:在Linux上创建容器,将Linux侧的摄像头挂载到容器内;在Linux上启动容器,在容器内启动Android系统;
步骤S2:在Android系统启动相机框架服务进程,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件;
当监控到摄像头被插入时,Android系统的相机框架服务进程将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层应用抽象层,以使Linux系统的摄像头被添加到HAL层的前置摄像头信息列表和后置摄像头信息列表;所述摄像头信息列表包括摄像头类型id、打开摄像头的应用的进程优先级、打开摄像头的应用的进程号、摄像头名称;
Linux系统的/dev目录中的每一个节点描述的就是一个外接设备,当有外接设备接入时,就在此目录创建一个外接设备描述符,当此设备被移除时,此节点就被删除了。因此我们可以通过使用Linux的inotify机制监控/dev目录的方式来感知USB摄像头的插入和拔出动作。inotify是Linux系统下一个内核用于通知用户空间程序文件系统变化的机制。
本方案中主要是通过inotify_add_watch(fd,“/dev”,“IN_CREATE|IN_DELETE”)来感知USB摄像头的插入和拔出动作,IN_CREATE事件表示摄像头被插入,IN_DELETE表示摄像头被拔出。
S201,监控USB摄像头的插入和拔出;
相机框架服务监控/dev目录后,当有设备被拔出或者删除时,相机框架服务聚能接受到事件响应,从事件结构体inotify_event中我们获取设备名称(多媒体设备,包含相机,设备名称的前部分为video),与监控目录组合成一个完整的设备名称(如:dev/video1)。
S202,Android系统针对每一个新增的USB设备虚拟成一个前置摄像头和后置摄像头;
在Android系统中,App只能通过ID 0(后置摄像头)或者1(前置摄像头)来操作摄像头,具体是打开前置摄像头还是后置摄像头由App自己的业务来决定,PC上插入的USB摄像头有可能只有一个,也可能有多个,为了满足各种情形下所有App均能正常操作摄像头,因此我们需要将每一个外接的相机设备,拆分成一个前置摄像头和后置摄像头,保证接入一个USB摄像头后,应用打开前置摄像头和后置摄像头均能操作设备。
在拔出USB摄像头时我们不再需要这个虚拟过程了,我们只需要把拔掉的USB摄像头名称通知给HAL层,让HAL层从前置摄像头列表和后置摄像头列表中删除给定的摄像头即可。
S203,HAL层对新增或删除的USB摄像头的处理;
为了实现多路摄像头访问,HAL层会有两个列表,前置摄像头列表和后置摄像头列表,列表里面的每条信息就是一个摄像头。
相机服务框架会将摄像头信息传给HAL层,具体信息包括:
新增摄像头的信息:
摄像头类型(0:后置,1:前置)、摄像头名称(dev/video0等)、旋转角度(后置90度,前置270度);
删除摄像头的信息:
摄像头名称(dev/video0等)。
发生新增摄像头时,HAL层需要根据摄像头类型把摄像头信息添加到对应的摄像头列表(前置摄像头列表、后置摄像头列表),在新增摄像头时,相机框架服务会通知HAL层两次,一次是新增后置摄像头,一次是新增前置摄像头。在删除摄像头时,相机框架服务只需要通知一次HAL层,HAL层将摄像头名称(dev/video0等)从前置摄像头列表和后置摄像头列表检索并删除,同时关闭正在打开的摄像头。无论时删除还是新增,HAL层更新完摄像头信息后都要通知相机框架服务更新摄像头信息。
步骤S3:当Android应用访问摄像头时,先分析判断Android应用访问的摄像头类型id为前置摄像头id或后置摄像头id;再根据摄像头名称,判断HAL层的前置摄像头信息列表或后置摄像头信息列表中是否存在空闲的摄像头;若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头;若不存在空闲的摄像头,则比较正在使用摄像头的应用的进程的优先级与请求使用摄像头的应用的进程的优先级,如果正在使用摄像头的应用的进程的优先级高,则本次打开失败,如果请求使用摄像头的应用的进程的优先级高,则关闭正在打开的摄像头,为请求使用摄像头的应用打开摄像头,同时更新已打开的摄像头信息缓存队列列表。
现有技术的方案:一个App打开摄像头是通过传入摄像头ID(0:后置摄像头,1:前置摄像头)给相机服务的,在相机服务中会有一个已打开相机设备信息缓存队列列表,该队列每一条信息中包含:摄像头ID、打开摄像头的App的进程ID(PID)、打开摄像头的App的进程优先级(可动态刷新)。通过摄像头ID来限制前置摄像头和后置摄像头同时只能被一个App打开。Android系统目前主要是面向移动设备,前置摄像头和后置摄像头都只有一个或多个设备。而本发明的技术方案,前置摄像头和后置摄像头都分别有多个设备,现有技术通过摄像头ID去判断摄像头是否被打开了,会导致众多摄像头的一个能被打开,其他摄像头无法被打开。
进一步地,所述步骤S2中,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件,包括:相机框架服务进程监控/dev目录下的设备被拔出时,将被拔掉的摄像头名称通知给HAL层,HAL层从前置摄像头列表和后置摄像头列表中删除被拔掉的摄像头名称。
进一步地,所述步骤S2中相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件,具体为:通过inotify_add_watch(fd,“/dev”,“IN_CREATE|IN_DELETE”)来感知摄像头的被插入或拔出动作,IN_CREATE表示摄像头被插入,IN_DELETE表示摄像头被拔出。
进一步地,所述步骤S2中,当监控到摄像头被插入时,Android系统的相机框架服务将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,包括:新增摄像头时,相机框架服务进程分两次通知HAL层:新增前置摄像头、新增后置摄像头,HAL层根据摄像头类型把摄像头信息添加到对应的前置摄像头列表或后置摄像头列表。
进一步地,所述步骤S3中,若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头,包括:HAL层根据Android应用需要使用的摄像头类型为前置或后置,在前置摄像头列表或后置摄像头列表中选择空闲的摄像头;将前置摄像头列表或后置摄像头列表中被选择使用的摄像头的状态标记为正在使用,打开相机,并保存打开相机的应用的进程号、摄像头名称。
本发明的技术方案,可以同时处理多个前后置摄像头的同时访问,如:A应用打开后置摄像头(摄像头ID:0,App PID:2001,设备名称:/dev/video0),B应用打开后置摄像头(摄像头ID:0,App PID:2002,设备名称:/dev/video1)。
本发明的前置摄像头信息和后置摄像头信息已经和Android默认的单一信息不一样了,而是采用列表形式进行存储,而列表的容量没有限制,PC主机外接了多少个USB摄像头,那么这些信息就会被全部添加到前置摄像头信息列表和后置摄像头信息列表,列表中的每一条信息包含了:设备名(/dev/video0等)、旋转角度(前置270度,后置90度)、使用状态(1:正在使用0:空闲)。App在操作摄像头时,系统会自动选取其中一个空闲的设备供App操作。
HAL层打开相机后,同时会使用一个缓存列表来记录打开相机的应用的进程号和设备名,并把该设备设置为忙碌状态,其他应用再打开相机时则不会操作此设备,在应用相机业务结束后关闭相机时,会依据进程号找到设备,将设备关闭,同时将前置和后置设备列表中该设备状态设置为空闲。在此流程中最核心的就是不同App去操作相机时都是在前置摄像头信息列表或者后置摄像头信息列表中轮循查找空闲设备,当找到空闲设备后,直接打开,并记录打开此设备的应用进程号和设备名,用于后续应用切换前后置摄像头和关闭摄像头。
需要说明的是,应用要打开一个前置摄像头或一个后置摄像头,应用不知道要打开列表中的哪一个,只知道要打开前置摄像头,或者打开后置摄像头,而不能选择前置摄像头或后置摄像头中的哪一个。打开哪个设备由HAL层适配。
图2是本发明实施例提供的一种Linux兼容Android的多应用访问摄像头装置组成示意图,所述装置应用在Linux上兼容运行Android系统的运行环境下,所述装置包括:
容器创建启动单元,用于:在Linux上创建容器,将Linux侧的摄像头挂载到容器内;在Linux上启动容器,在容器内启动Android系统;
虚拟摄像头单元,用于:在Android系统启动相机框架服务进程,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件;
当监控到摄像头被插入时,Android系统的相机框架服务进程将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,以使Linux系统的摄像头被添加到HAL层的前置摄像头信息列表和后置摄像头信息列表;所述摄像头信息列表包括摄像头类型id、打开摄像头的应用的进程优先级、打开摄像头的应用的进程号、摄像头名称;
访问摄像头单元,用于:当Android应用访问摄像头时,先分析判断Android应用访问的摄像头类型id为前置摄像头id或后置摄像头id;再根据摄像头名称,判断HAL层的前置摄像头信息列表或后置摄像头信息列表中是否存在空闲的摄像头;若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头;若不存在空闲的摄像头,则比较正在使用摄像头的应用的进程的优先级与请求使用摄像头的应用的进程的优先级,如果正在使用摄像头的应用的进程的优先级高,则本次打开失败,如果请求使用摄像头的应用的进程的优先级高,则关闭正在打开的摄像头,为请求使用摄像头的应用打开摄像头,同时更新已打开的摄像头信息缓存队列列表。
进一步地,所述虚拟摄像头单元,用于:相机框架服务进程监控/dev目录下的设备被拔出时,将被拔掉的摄像头名称通知给HAL层,HAL层从前置摄像头列表和后置摄像头列表中删除被拔掉的摄像头名称。
进一步地,所述虚拟摄像头单元,用于:通过inotify_add_watch(fd,“/dev”,“IN_CREATE|IN_DELETE”)来感知摄像头的被插入或拔出动作,IN_CREATE表示摄像头被插入,IN_DELETE表示摄像头被拔出。
进一步地,所述虚拟摄像头单元,用于:新增摄像头时,相机框架服务进程分两次通知HAL层:新增前置摄像头、新增后置摄像头,HAL层根据摄像头类型把摄像头信息添加到对应的前置摄像头列表或后置摄像头列表。
进一步地,所述访问摄像头单元,用于:HAL层根据Android应用需要使用的摄像头类型为前置或后置,在前置摄像头列表或后置摄像头列表中选择空闲的摄像头;将前置摄像头列表或后置摄像头列表中被选择使用的摄像头的状态标记为正在使用,打开相机,并保存打开相机的应用的进程号、摄像头名称。
图3是本发明实施例提供的一种Linux兼容Android的虚拟前置摄像头和后置摄像头的网络架构示意图。图中,对于Linux系统上的每一个摄像头(包括内置摄像头、USB摄像头),均会被添加到前置摄像头信息列表和后置摄像头信息列表,也就是将Linux摄像头虚拟成Android系统可支持的摄像头,Android应用在打开前置或者后置摄像头可以从列表中选取,可以有多个选择。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种Linux兼容Android的多应用访问摄像头方法,其特征在于,所述方法应用在Linux上兼容运行Android系统的运行环境下,所述方法包括如下步骤:
步骤S1:在Linux上创建容器,将Linux侧的摄像头挂载到容器内;在Linux上启动容器,在容器内启动Android系统;
步骤S2:在Android系统启动相机框架服务进程,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件;
当监控到摄像头被插入时,Android系统的相机框架服务进程将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,以使Linux系统的摄像头被添加到HAL层的前置摄像头信息列表和后置摄像头信息列表;所述摄像头信息列表包括摄像头类型id、打开摄像头的应用的进程优先级、打开摄像头的应用的进程号、摄像头名称;
步骤S3:当Android应用访问摄像头时,先分析判断Android应用访问的摄像头类型id为前置摄像头id或后置摄像头id;再根据摄像头名称,判断HAL层的前置摄像头信息列表或后置摄像头信息列表中是否存在空闲的摄像头;若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头;若不存在空闲的摄像头,则比较正在使用摄像头的应用的进程的优先级与请求使用摄像头的应用的进程的优先级,如果正在使用摄像头的应用的进程的优先级高,则本次打开失败,如果请求使用摄像头的应用的进程的优先级高,则关闭正在打开的摄像头,为请求使用摄像头的应用打开摄像头,同时更新已打开的摄像头信息缓存队列列表。
2.如权利要求1所述的Linux兼容Android的多应用访问摄像头方法,其特征在于,所述步骤S2中,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件,包括:相机框架服务进程监控/dev目录下的设备被拔出时,将被拔掉的摄像头名称通知给HAL层,HAL层从前置摄像头列表和后置摄像头列表中删除被拔掉的摄像头名称。
3.如权利要求1所述的Linux兼容Android的多应用访问摄像头方法,其特征在于,所述步骤S2中相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件,具体为:通过inotify_add_watch(fd,“/dev”,“IN_CREATE|IN_DELETE”)来感知摄像头的被插入或拔出动作,IN_CREATE表示摄像头被插入,IN_DELETE表示摄像头被拔出。
4.如权利要求1所述的Linux兼容Android的多应用访问摄像头方法,其特征在于,所述步骤S2中,当监控到摄像头被插入时,Android系统的相机框架服务将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,包括:新增摄像头时,相机框架服务进程分两次通知HAL层:新增前置摄像头、新增后置摄像头,HAL层根据摄像头类型把摄像头信息添加到对应的前置摄像头列表或后置摄像头列表。
5.如权利要求1所述的Linux兼容Android的多应用访问摄像头方法,其特征在于,所述步骤S3中,若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头,包括:HAL层根据Android应用需要使用的摄像头类型为前置或后置,在前置摄像头列表或后置摄像头列表中选择空闲的摄像头;将前置摄像头列表或后置摄像头列表中被选择使用的摄像头的状态标记为正在使用,打开相机,并保存打开相机的应用的进程号、摄像头名称。
6.一种Linux兼容Android的多应用访问摄像头装置,其特征在于,所述装置应用在Linux上兼容运行Android系统的运行环境下,所述装置包括:
容器创建启动单元,用于:在Linux上创建容器,将Linux侧的摄像头挂载到容器内;在Linux上启动容器,在容器内启动Android系统;
虚拟摄像头单元,用于:在Android系统启动相机框架服务进程,相机框架服务进程监控/dev目录下的设备被插入或者拔出的事件;
当监控到摄像头被插入时,Android系统的相机框架服务进程将单个摄像头虚拟成一个前置摄像头和一个后置摄像头,相机框架服务进程将虚拟的前置摄像头和后置摄像头的信息通过接口通知HAL层,以使Linux系统的摄像头被添加到HAL层的前置摄像头信息列表和后置摄像头信息列表;所述摄像头信息列表包括摄像头类型id、打开摄像头的应用的进程优先级、打开摄像头的应用的进程号、摄像头名称;
访问摄像头单元,用于:当Android应用访问摄像头时,先分析判断Android应用访问的摄像头类型id为前置摄像头id或后置摄像头id;再根据摄像头名称,判断HAL层的前置摄像头信息列表或后置摄像头信息列表中是否存在空闲的摄像头;若存在空闲的摄像头,则HAL层为Android应用适配使用空闲的摄像头;若不存在空闲的摄像头,则比较正在使用摄像头的应用的进程的优先级与请求使用摄像头的应用的进程的优先级,如果正在使用摄像头的应用的进程的优先级高,则本次打开失败,如果请求使用摄像头的应用的进程的优先级高,则关闭正在打开的摄像头,为请求使用摄像头的应用打开摄像头,同时更新已打开的摄像头信息缓存队列列表。
7.如权利要求6所述的Linux兼容Android的多应用访问摄像头装置,其特征在于,所述虚拟摄像头单元,用于:相机框架服务进程监控/dev目录下的设备被拔出时,将被拔掉的摄像头名称通知给HAL层,HAL层从前置摄像头列表和后置摄像头列表中删除被拔掉的摄像头名称。
8.如权利要求6所述的Linux兼容Android的多应用访问摄像头装置,其特征在于,所述虚拟摄像头单元,用于:通过inotify_add_watch(fd,“/dev”,“IN_CREATE|IN_DELETE”)来感知摄像头的被插入或拔出动作,IN_CREATE表示摄像头被插入,IN_DELETE表示摄像头被拔出。
9.如权利要求6所述的Linux兼容Android的多应用访问摄像头装置,其特征在于,所述虚拟摄像头单元,用于:新增摄像头时,相机框架服务进程分两次通知HAL层:新增前置摄像头、新增后置摄像头,HAL层根据摄像头类型把摄像头信息添加到对应的前置摄像头列表或后置摄像头列表。
10.如权利要求6所述的Linux兼容Android的多应用访问摄像头装置,其特征在于,所述访问摄像头单元,用于:HAL层根据Android应用需要使用的摄像头类型为前置或后置,在前置摄像头列表或后置摄像头列表中选择空闲的摄像头;将前置摄像头列表或后置摄像头列表中被选择使用的摄像头的状态标记为正在使用,打开相机,并保存打开相机的应用的进程号、摄像头名称。
CN202110726449.6A 2021-06-29 2021-06-29 一种Linux兼容Android的多应用访问摄像头方法及装置 Pending CN113342422A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110726449.6A CN113342422A (zh) 2021-06-29 2021-06-29 一种Linux兼容Android的多应用访问摄像头方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110726449.6A CN113342422A (zh) 2021-06-29 2021-06-29 一种Linux兼容Android的多应用访问摄像头方法及装置

Publications (1)

Publication Number Publication Date
CN113342422A true CN113342422A (zh) 2021-09-03

Family

ID=77481471

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110726449.6A Pending CN113342422A (zh) 2021-06-29 2021-06-29 一种Linux兼容Android的多应用访问摄像头方法及装置

Country Status (1)

Country Link
CN (1) CN113342422A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113824888A (zh) * 2021-11-23 2021-12-21 北京鲸鲮信息系统技术有限公司 Linux兼容Android的相机控制方法、系统、装置及介质
CN114047964A (zh) * 2022-01-13 2022-02-15 麒麟软件有限公司 一种在Linux兼容Android系统时使Android支持摄像头热插拔的方法
CN114185508A (zh) * 2022-02-15 2022-03-15 麒麟软件有限公司 在Linux兼容安卓系统上进行左右分屏的方法
CN114185851A (zh) * 2022-02-14 2022-03-15 麒麟软件有限公司 安卓访问Linux本地目录和文件的方法与系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101833520A (zh) * 2009-03-11 2010-09-15 凹凸电子(武汉)有限公司 计算机系统、多个应用程序同时使用一个摄像头的方法
CN112612536A (zh) * 2020-12-15 2021-04-06 麒麟软件有限公司 基于Linux系统中Android应用程序控制摄像的方法及装置
CN112749022A (zh) * 2019-10-29 2021-05-04 阿里巴巴集团控股有限公司 相机资源访问方法、操作系统、终端和虚拟相机

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101833520A (zh) * 2009-03-11 2010-09-15 凹凸电子(武汉)有限公司 计算机系统、多个应用程序同时使用一个摄像头的方法
CN112749022A (zh) * 2019-10-29 2021-05-04 阿里巴巴集团控股有限公司 相机资源访问方法、操作系统、终端和虚拟相机
CN112612536A (zh) * 2020-12-15 2021-04-06 麒麟软件有限公司 基于Linux系统中Android应用程序控制摄像的方法及装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113824888A (zh) * 2021-11-23 2021-12-21 北京鲸鲮信息系统技术有限公司 Linux兼容Android的相机控制方法、系统、装置及介质
CN113824888B (zh) * 2021-11-23 2022-06-17 北京鲸鲮信息系统技术有限公司 Linux兼容Android的相机控制方法、系统、装置及介质
WO2023093715A1 (zh) * 2021-11-23 2023-06-01 北京字节跳动网络技术有限公司 Linux兼容Android的相机控制方法、系统、装置及介质
CN114047964A (zh) * 2022-01-13 2022-02-15 麒麟软件有限公司 一种在Linux兼容Android系统时使Android支持摄像头热插拔的方法
CN114185851A (zh) * 2022-02-14 2022-03-15 麒麟软件有限公司 安卓访问Linux本地目录和文件的方法与系统
CN114185508A (zh) * 2022-02-15 2022-03-15 麒麟软件有限公司 在Linux兼容安卓系统上进行左右分屏的方法
CN114185508B (zh) * 2022-02-15 2022-04-26 麒麟软件有限公司 在Linux兼容安卓系统上进行左右分屏的方法

Similar Documents

Publication Publication Date Title
CN113342422A (zh) 一种Linux兼容Android的多应用访问摄像头方法及装置
US11500670B2 (en) Computing service with configurable virtualization control levels and accelerated launches
US11755356B2 (en) Asynchronous queries on secondary data cores in a distributed computing system
US7934220B2 (en) Method and system for optimizing file table usage
RU2629448C2 (ru) Система и способ управления и организации кэша веб-браузера
CN109522029A (zh) 一种部署云平台技术组件的方法及装置
US9934067B2 (en) Synchronous user space function execution from a kernel context
CN113596128B (zh) 一种多云平台的资源同步方法、系统及电子设备
US11550713B1 (en) Garbage collection in distributed systems using life cycled storage roots
US20200364063A1 (en) Distributed job manager for stateful microservices
US11422698B2 (en) Method, electronic device, and computer program product for storage management
CN108073423B (zh) 一种加速器加载方法、系统和加速器加载装置
US20020174265A1 (en) Method and apparatus for caching active computing environments
US7979867B2 (en) Managing a device in a distributed file system, using plug and play
CN113448648A (zh) 一种Linux兼容Android的访问摄像头方法及装置
US11029932B2 (en) Hydration of applications
US11593270B1 (en) Fast distributed caching using erasure coded object parts
EP3598310B1 (en) Network interface device and host processing device
US20140082275A1 (en) Server, host and method for reading base image through storage area network
CN112306669A (zh) 一种基于多核系统的任务处理方法及装置
US20220291975A1 (en) Techniques for managing access to file systems
Paiker et al. Design and implementation of an overlay file system for cloud-assisted mobile apps
US20230054696A1 (en) User-level services for multitenant isolation
CN110750221A (zh) 卷克隆方法、装置、电子设备及机器可读存储介质
Ivanovic et al. OpenStack cloud tuning for high performance computing

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination