CN114047964B - 一种在Linux兼容Android***时使Android支持摄像头热插拔的方法 - Google Patents

一种在Linux兼容Android***时使Android支持摄像头热插拔的方法 Download PDF

Info

Publication number
CN114047964B
CN114047964B CN202210034222.XA CN202210034222A CN114047964B CN 114047964 B CN114047964 B CN 114047964B CN 202210034222 A CN202210034222 A CN 202210034222A CN 114047964 B CN114047964 B CN 114047964B
Authority
CN
China
Prior art keywords
camera
android
linux
compatible
request
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.)
Active
Application number
CN202210034222.XA
Other languages
English (en)
Other versions
CN114047964A (zh
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.)
Kirin Software Co Ltd
Original Assignee
Kirin Software 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 Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202210034222.XA priority Critical patent/CN114047964B/zh
Publication of CN114047964A publication Critical patent/CN114047964A/zh
Application granted granted Critical
Publication of CN114047964B publication Critical patent/CN114047964B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • G06F9/4413Plug-and-play [PnP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • G06F13/4081Live connection to bus, e.g. hot-plugging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Studio Devices (AREA)

Abstract

本发明一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,所述方法应用在Linux兼容Android***的运行环境中,提供摄像头在Android的运行环境中即插即用;所述方法包括以下步骤:步骤S1:Linux***兼容Android的运行环境准备;步骤S2:创建Linux端摄像头服务端;步骤S3:修改Android端的摄像头硬件抽象层;步骤S4:启动Android应用访问摄像头,通过摄像头服务框架将打开摄像头的请求传递到摄像头硬件抽象层,摄像头硬件抽象层将打开摄像头的请求发送给Linux端,Linux端摄像头服务端接收到Android端的打开摄像头的请求后,回传对应的摄像头的文件描述符给Android端,Android端得到操作摄像头的权限。

Description

一种在Linux兼容Android***时使Android支持摄像头热插 拔的方法
技术领域
本发明属于Linux操作***技术领域,具体地说,涉及一种在Linux兼容Android***时使Android支持摄像头热插拔的方法。
背景技术
近年来,随着Android用户的增长以及Android软硬件产品的成熟和发展,Android应用生态呈现出爆发式发展,在很多领域都已经超过Windows应用生态和IOS应用生态,成为目前使用最广泛的应用生态。Android基于Linux内核发展而来,是目前移动终端市场中市场份额最高的Linux类操作***,在移动终端领域具有极好的生态环境;Windows***占据着PC市场的最大份额,其作为美国闭源操作***,在信息网络安全方面存在巨大安全隐患;而Linux操作***,其作为Android的前身,由于开发人员数目和市场份额的限制,发展较为缓慢,生态环境长期处于不良状态,一直不见起色。随着信息技术的飞速发展,国家对信息安全的重视程度日益提升,国内基于开源Linux操作***的自主操作***日益发展壮大,但Linux操作***生态应用的严重缺乏仍旧是困扰Linux操作***真正推向市场的一大痛点。
要解决Linux操作***的生态问题,必须解决用户数不足和平台应用软件数不足这两个关键点。Android在移动终端领域具有广泛的用户群,并且具有成熟的开发平台和应用软件群体,对于解决Linux操作***目前的窘境具有一定的参考价值。
由于Android操作***基于Linux内核发展而来,其针对移动终端设备的特点在用户空间做了大幅的改进和增强,所以给Linux操作***兼容Android应用提供了极大的可能性和便利,使得移动端的丰富应用很有可能成功运行在PC端。近年来,Android应用生态在Linux操作***上的兼容支持成为了研究热点,国内外有许多研究人员尝试将Android运行环境迁移到Linux类计算机平台以实现Android应用生态在Linux操作***上兼容支持的效果,各种兼容技术衍生而出,其中就包括Google的 ARC(App Runtime for Chrome)技术、虚拟机和模拟器技术、Anbox(Android in a Box)项目等,这些技术将PC端和移动端进行融合,成功将Android应用生态迁移到Linux上来,极大地推动了Linux应用生态的发展,很大程度上弥补了Linux应用缺乏的诟病,方便了Linux操作***用户的日常办公、娱乐等需求,也加快了Linux操作***走向消费市场的步伐,但它们都还存在着无法忽视的用户体验问题,包括稳定性、易用性、功能完备性等,导致这块技术领域没有显著的提升。
对于运行在Linux操作***上的Android应用,常见的人机交互对Linux***端外设的依赖显得尤其重要;其中,由于用户对日益增长的线上社交、商务沟通、网络购物等不可或缺的需求,因此,用户对摄像头的使用是否便捷、功能是否稳定成为Android应用兼容Linux***一个必不可少的优化环节。
基于目前移动端Android***对摄像头的使用情景:使用容器相关技术,在容器创建时将摄像头设备节点映射到Android环境中,让Android***直接操作容器中的摄像头设备节点。这种方式的弊端是第一:用户在事先未接入摄像头的情况下再开启Android环境,此时如想使用摄像头则需要接上摄像头后重启PC;第二,在开启Android环境后如有拔插摄像头的操作也会导致无法使用摄像头的问题;第三,基于PC端多个usb口可以接入摄像头,如果用户想在多个摄像头之间切换使用,也需要切换后重启整个PC环境。因此,这种极大的不便利性毫无疑问会给用户增添不少苦恼,给Android应用生态迁移增添阻碍。
发明内容
有鉴于此,本发明为了解决现有技术存在的缺陷和不足,提供了一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,这种方法通过在Linux端创建摄像头服务端、输入摄像头监控程序,适配优化Android摄像头硬件抽象层,打通了Android和Linux***间的由于容器造成的隔阂,使Android应用对摄像头得以即插即用。
本发明提供一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,该方法应用在Linux兼容Android***的运行环境中。
所述方法包括以下步骤:
步骤S1:Linux***兼容Android的运行环境准备;
步骤S2:创建Linux端摄像头服务端,用于接收Android端的打开摄像头的请求并将打开摄像头的请求对应得到的摄像头的文件描述符回传给Android端;
步骤S3:修改Android端的摄像头硬件抽象层,用于将打开摄像头的请求发送给Linux端,并接收Linux端发来的摄像头的文件描述符;
步骤S4:启动Android应用访问摄像头,通过摄像头服务框架将打开摄像头的请求传递到摄像头硬件抽象层,摄像头硬件抽象层将打开摄像头的请求发送给Linux端,Linux端摄像头服务端接收到Android端的打开摄像头的请求后,回传对应的摄像头的文件描述符给Android端,Android端得到操作摄像头的权限。
本发明的技术方案进一步改进在于:所述步骤S1的运行环境准备包括如下具体步骤:
步骤S101:在Linux***上使用docker容器加载Android镜像,让Linux和Android***共享同一Linux内核;
步骤S102:在docker容器中启动Android的运行环境。
本发明的技术方案进一步改进在于:所述步骤S2中,创建Linux端摄像头服务端,包括如下具体步骤:
步骤S201:在Linux端创建摄像头常驻服务,随Linux***开机启动;
步骤S202:在摄像头常驻服务中开启线程,在线程中创建socket通信服务端,socket通信服务端用来监听Android端发来的打开摄像头的请求,并将创建的socket文件链接到docker容器内,使得Android端通过所述socket文件与Linux端进行socket通信。
本发明的技术方案进一步改进在于:所述步骤S3包括如下具体步骤:
步骤S301: Android端摄像头硬件抽象层修改打开摄像头的open函数,在Android端创建socket通信客户端,
步骤S302:Android端的socket通信客户端与Linux端的socket通信服务端建立连接。
本发明的技术方案进一步改进在于:
所述步骤S4包括如下步骤:
步骤S401:Android 应用发起访问摄像头的请求;
步骤S402:Android的摄像头服务框架判断当前是否有应用占用摄像头资源,如没有,则直接向下传递打开摄像头的请求;如有,则关闭当前应用的摄像头资源,然后向底层重新发送打开摄像头的请求;
步骤S403:当Android应用发出打开摄像头的请求时,通过Android下的摄像头子***调用摄像头硬件抽象层中的open函数,再通过socket通信将打开摄像头的请求发送给Linux端;
步骤S404:当Linux端接收到Android端的打开摄像头的请求时,利用Linux中的open函数打开摄像头;
步骤S405:利用Linux中的open函数打开摄像头后得到对应的摄像头的文件描述符,将所述摄像头的文件描述符通过socket通信服务端以消息的形式回传给Android端;
步骤S406:Android端利用recvmsg函数等待Linux端摄像头服务端回传的消息,回传的消息在结构体msghdr中,再从结构体msghdr中解析出所述摄像头的文件描述符;
步骤S407:Android端得到摄像头的文件描述符,并具备与Linux端相同的权限以操作摄像头;Android端利用ioctl函数操作摄像头执行获取设备属性、获取图像数据。
本发明的技术方案进一步改进在于:在步骤S404中:***摄像头时Linux***在/dev目录下形成***的摄像头的设备节点路径,open函数中表示摄像头的设备节点路径通常包括/dev/video0、/dev/video2等。
本发明的技术方案进一步改进在于:在步骤S405中,摄像头的文件描述符是Linux中的open函数打开摄像头时由内核分配完成,所述摄像头的文件描述符只在一个进程内部有效,两个不同进程使用相同的摄像头的文件描述符,两个不同进程不指向同一文件,两个不同进程通过摄像头的文件描述符传递来具有相同的权限操作同一文件。
本发明的技术方案进一步改进在于:所述摄像头的文件描述符传递利用匿名Unix域套接字sendmsg/recvmsg实现;sendmsg提供传递控制信息的功能;在sendmsg的第二个参数msghdr变量的cmsghdr成员中,控制头cmsg_level和cmsg_type设置摄像头的文件描述符传递属性,并将传递的摄像头的文件描述符作为数据部分,保存在cmsghdr变量的后面。
本发明的技术方案进一步改进在于:所述方法还包括步骤S5:任意切换Linux端的多个摄像头;
步骤S5的任意切换Linux端的多个摄像头包括如下步骤:
步骤S501:Linux端输入监控摄像头设备节点的监控程序,所述监控程序带有配置界面供用户选择使用摄像头;
步骤S502:当提供给Android应用使用的摄像头被拔掉或者用户选择另一摄像头时,立即切换到下一个供选择的摄像头或者用户所选择的另一摄像头;
步骤S503:当Android端再次请求打开摄像头时,打开新配置的摄像头并将新配置的摄像头的文件描述符发送给Android端, Android应用打开新配置的摄像头,完成摄像头的切换。
与现有技术相比,本发明的有益效果:实现了摄像头即插即用的功能,使运行在Linux***上的Android应用也能随意切换使用Linux端的多个摄像头,极大的满足了用户对外设的使用便捷需求,也为Android应用生态更好的迁移到Linux跨出重要一步。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有技术效果。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的主要调用流程的关系图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
本发明一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,这种方法通过在Linux端创建摄像头服务端、输入摄像头监控程序,适配优化Android摄像头硬件抽象层,打通了Android和Linux***间的由于容器造成的隔阂,使Android应用对摄像头得以即插即用。
如图1所示,一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,方法应用在Linux兼容Android***的运行环境中,可以让摄像头在Android的运行环境中即插即用;
具体方法包括以下步骤:
步骤S1:Linux***兼容Android的运行环境准备;
步骤S2:创建Linux端摄像头服务端,用于接收Android端的打开摄像头的请求并将打开摄像头的请求对应得到的摄像头的文件描述符回传给Android端;
步骤S3:修改Android端的摄像头硬件抽象层,用于将打开摄像头的请求发送给Linux端,并接收Linux端发来的摄像头的文件描述符;
步骤S4:启动Android应用访问摄像头,通过摄像头服务框架将打开摄像头的请求传递到摄像头硬件抽象层,摄像头硬件抽象层将打开摄像头的请求发送给Linux端,Linux端摄像头服务端接收到Android端的打开摄像头的请求后,回传对应的摄像头的文件描述符给Android端,Android端得到操作摄像头的权限。
进一步的,步骤S1的Linux***兼容Android的运行环境准备工作按照如下步骤实施:
步骤S101:在Linux***上使用docker容器加载Android镜像,这样Linux和Android***共享同一Linux内核;
步骤S102:在docker容器中启动Android的运行环境。
进一步的,步骤S2中,创建Linux端摄像头服务端,包括如下具体步骤:
步骤S201:在Linux端创建摄像头常驻服务,摄像头常驻服务随着Linux***开机启动;
步骤S202:在摄像头常驻服务中开启线程,在线程中创建socket通信服务端,socket通信服务端可以用来监听Android端发来的打开摄像头的请求,并将创建的socket文件链接到docker容器内,使得Android端通过该socket文件与Linux端进行socket通信。
进一步的,所述步骤S3包括如下具体步骤:
步骤S301: Android端摄像头硬件抽象层修改打开摄像头的open函数,在Android端创建socket通信客户端。
步骤S302:Android端的socket通信客户端与Linux端的socket通信服务端建立连接,建立连接之后,Android端与Linux端可以传送消息。
进一步的,所述步骤S4包括如下步骤:
步骤S401:Android 应用发起访问摄像头的请求;
步骤S402:Android的摄像头服务框架判断当前是否有应用占用摄像头资源,如没有,则直接向下传递打开摄像头的请求;如有,则关闭当前应用的摄像头资源,然后向底层重新发送打开摄像头的请求;
步骤S403:当Android应用发出打开摄像头的请求时,通过Android下的摄像头子***调用摄像头硬件抽象层中的open函数,再通过socket通信将打开摄像头的请求发送给Linux端;
步骤S404:当Linux端接收到Android端的打开摄像头的请求时,利用Linux中的open函数打开摄像头;一方面,***摄像头时Linux***在/dev目录下形成***的摄像头的设备节点路径,open函数中表示摄像头的设备节点路径通常包括/dev/video0、/dev/video2等,且拔出摄像头后对应的设备节点路径消失;open函数可以从设备节点路径中筛选出符合条件的摄像头设备并打开。
步骤S405:利用Linux中的open函数打开摄像头后得到对应的摄像头的文件描述符,将摄像头的文件描述符通过socket通信服务端以消息的形式回传给Android端;
摄像头的文件描述符是Linux中的open函数打开摄像头时由内核分配完成的,摄像头的文件描述符只在一个进程内部有效,两个不同进程可以使用同样的摄像头的文件描述符,但两个不同进程并不指向同一文件。两个不同进程具有同样的权限操作同一个文件是通过摄像头的文件描述符传递来实现的。
摄像头的文件描述符传递是利用匿名Unix域套接字sendmsg/recvmsg来实现;sendmsg提供传递控制信息的功能;在sendmsg的第二个参数msghdr变量的cmsghdr成员中,控制头cmsg_level和cmsg_type设置摄像头的文件描述符传递属性,并将传递的摄像头的文件描述符作为数据部分,保存在cmsghdr变量的后面,这样就可以实现摄像头的文件描述符传递这一功能。
步骤S406:Android端利用recvmsg函数等待Linux端摄像头服务端回传过来的消息,回传的消息在到结构体msghdr中,再从结构体msghdr中解析出该摄像头的文件描述符;摄像头的文件描述符存在结构体cmsghdr中,结构体msghdr中的成员指针变量msg_control指向cmsghdr结构体地址。
步骤S407:Android端得到摄像头的文件描述符,并具备和Linux端相同的权限以操作摄像头;Android端利用ioctl函数操作摄像头执行获取设备属性、获取图像数据。
本发明更进一步在于,方法还包括步骤S5:任意切换Linux端的多个摄像头;
步骤S5的任意切换Linux端的多个摄像头包括如下步骤:
步骤S501:Linux端输入监控摄像头设备节点的监控程序,该监控程序带有配置界面供用户选择使用摄像头;
步骤S502:当提供给Android应用使用的摄像头被拔掉或者用户选择另一摄像头时,立即切换到下一个供选择的摄像头或者用户所选择的另一摄像头;
步骤S503:当Android端再次请求打开摄像头时,打开新配置的摄像头并将新配置的摄像头的文件描述符发送给Android端, Android应用打开新配置的摄像头,完成摄像头的切换的目的。
本发明的有益效果是:使运行在Linux***上的Android应用也能随心所欲的使用摄像头,真正实现了摄像头即插即用;同时,在拥有多个摄像头的情形下,提供了让用户选择使用哪一个的可能,极大的满足了用户对外设的使用便捷需求,也为Android应用生态迁移到Linux跨出重要一步。
以上对本发明实施例所提供的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法进行了详细介绍。以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
如在说明书及权利要求当中使用了某些词汇来指称特定组件或模块。本领域技术人员应可理解,不同机构可能会用不同名词来称呼同一个组件或模块。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件或模块在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”、“包括”为开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。说明书后续描述为实施本发明的较佳实施方式,然所述描述乃以说明本发明的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围当视所附权利要求所界定者为准。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者***不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者***所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者***中还存在另外的相同要素。
上述说明示出并描述了本发明的若干优选实施例,但如前所述,应当理解本发明并非局限于本文的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的范围,则都应在本发明所附权利要求的保护范围内。

Claims (8)

1.一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于,所述方法应用在Linux兼容Android***的运行环境中;
所述方法包括以下步骤:
步骤S1:Linux***兼容Android的运行环境准备;
步骤S2:创建Linux端摄像头服务端,用于接收Android端的打开摄像头的请求并将打开摄像头的请求对应得到的摄像头的文件描述符回传给Android端;
步骤S3:修改Android端的摄像头硬件抽象层,用于将打开摄像头的请求发送给Linux端,并接收Linux端发来的摄像头的文件描述符;
步骤S4:Android端得到操作摄像头的权限:
步骤S401:Android 应用发起访问摄像头的请求;
步骤S402:Android的摄像头服务框架判断当前是否有应用占用摄像头资源,如没有,则直接向下传递打开摄像头的请求;如有,则关闭当前应用的摄像头资源,然后向底层重新发送打开摄像头的请求;
步骤S403:当Android应用发出打开摄像头的请求时,通过Android下的摄像头子***调用摄像头硬件抽象层中的open函数,再通过socket通信将打开摄像头的请求发送给Linux端;
步骤S404:当Linux端接收到Android端的打开摄像头的请求时,利用Linux中的open函数打开摄像头;
步骤S405:利用Linux中的open函数打开摄像头后得到对应的摄像头的文件描述符,所述摄像头的文件描述符通过socket通信服务端以消息的形式回传给Android端;
步骤S406:Android端利用recvmsg函数等待Linux端摄像头服务端回传的消息,回传的消息在结构体msghdr中,再从结构体msghdr中解析出所述摄像头的文件描述符;
步骤S407:Android端得到摄像头的文件描述符,并具备与Linux端相同的权限以操作摄像头;Android端利用ioctl函数操作摄像头执行获取设备属性、获取图像数据。
2.根据权利要求1所述的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于:所述步骤S1的运行环境准备包括如下具体步骤:
步骤S101:在Linux***上使用docker容器加载Android镜像,让Linux和Android***共享同一Linux内核;
步骤S102:在docker容器中启动Android的运行环境。
3.根据权利要求1所述的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于:所述步骤S2中,创建Linux端摄像头服务端,包括如下具体步骤:
步骤S201:在Linux端创建摄像头常驻服务,随Linux***开机启动;
步骤S202:在摄像头常驻服务中开启线程,在线程中创建socket通信服务端,socket通信服务端用来监听Android端发来的打开摄像头的请求,并将创建的socket文件链接到docker容器内,使得Android端通过所述socket文件与Linux端进行socket通信。
4.根据权利要求3所述的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于:所述步骤S3包括如下具体步骤:
步骤S301: Android端摄像头硬件抽象层修改打开摄像头的open函数,在Android端创建socket通信客户端,
步骤S302:Android端的socket通信客户端与Linux端的socket通信服务端建立连接。
5.根据权利要求1所述的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于:在步骤S404中:***摄像头时Linux***在/dev目录下形成***的摄像头的设备节点路径,open函数中表示摄像头的设备节点路径包括/dev/video0、/dev/video2。
6.根据权利要求1所述的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于:在步骤S405中,摄像头的文件描述符是Linux中的open函数打开摄像头时由内核分配完成,所述摄像头的文件描述符只在一个进程内部有效;两个不同进程使用相同的摄像头的文件描述符,两个不同进程不指向同一文件;两个不同进程通过摄像头的文件描述符传递来具有相同的权限操作同一文件。
7.根据权利要求6所述的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于:
所述摄像头的文件描述符传递利用匿名Unix域套接字sendmsg/recvmsg实现;sendmsg提供传递控制信息功能;在sendmsg的第二个参数msghdr变量的cmsghdr成员中,控制头cmsg_level和cmsg_type设置摄像头的文件描述符传递属性,并将传递的摄像头的文件描述符作为数据部分,保存在cmsghdr变量的后面。
8.根据权利要求1所述的一种在Linux兼容Android***时使Android支持摄像头热插拔的方法,其特征在于:所述方法还包括步骤S5:任意切换Linux端的多个摄像头;
步骤S5包括如下步骤:
步骤S501:Linux端输入监控摄像头设备节点的监控程序,所述监控程序带有配置界面供用户选择使用摄像头;
步骤S502:当提供给Android应用使用的摄像头被拔掉或者用户选择另一摄像头时,立即切换到下一个供选择的摄像头或者用户所选择的另一摄像头;
步骤S503:当Android端再次请求打开摄像头时,打开新配置的摄像头并将新配置的摄像头的文件描述符发送给Android端,Android应用打开新配置的摄像头,完成摄像头的切换。
CN202210034222.XA 2022-01-13 2022-01-13 一种在Linux兼容Android***时使Android支持摄像头热插拔的方法 Active CN114047964B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210034222.XA CN114047964B (zh) 2022-01-13 2022-01-13 一种在Linux兼容Android***时使Android支持摄像头热插拔的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210034222.XA CN114047964B (zh) 2022-01-13 2022-01-13 一种在Linux兼容Android***时使Android支持摄像头热插拔的方法

Publications (2)

Publication Number Publication Date
CN114047964A CN114047964A (zh) 2022-02-15
CN114047964B true CN114047964B (zh) 2022-05-10

Family

ID=80196410

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210034222.XA Active CN114047964B (zh) 2022-01-13 2022-01-13 一种在Linux兼容Android***时使Android支持摄像头热插拔的方法

Country Status (1)

Country Link
CN (1) CN114047964B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115118719B (zh) * 2022-06-20 2023-11-10 福建升腾资讯有限公司 一种云桌面的摄像头设备连接的方法及***
CN117148959B (zh) * 2023-02-27 2024-06-18 荣耀终端有限公司 眼动追踪的帧率调整方法及相关装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100195538A1 (en) * 2009-02-04 2010-08-05 Merkey Jeffrey V Method and apparatus for network packet capture distributed storage system
CN102799550B (zh) * 2012-06-21 2016-01-27 华为终端有限公司 基于芯片间高速接口hsic的唤醒、热插拔方法和设备
CN104133711B (zh) * 2014-08-07 2017-08-15 深圳市元征科技股份有限公司 基于Android***的摄像头安全切换方法
CN104516760B (zh) * 2014-12-12 2018-01-09 华为技术有限公司 一种操作***热切换的方法、装置及移动终端
CN111581144B (zh) * 2020-03-24 2022-02-08 惠州市德赛西威智能交通技术研究院有限公司 一种车载摄像头热***自恢复方法、装置及存储介质
CN112612536B (zh) * 2020-12-15 2022-11-18 麒麟软件有限公司 基于Linux***中Android应用程序控制摄像的方法及装置
CN113220363B (zh) * 2021-05-06 2022-04-19 技德技术研究所(武汉)有限公司 一种在Linux上兼容运行Android***的文件打开方法及装置
CN113342422A (zh) * 2021-06-29 2021-09-03 技德技术研究所(武汉)有限公司 一种Linux兼容Android的多应用访问摄像头方法及装置

Also Published As

Publication number Publication date
CN114047964A (zh) 2022-02-15

Similar Documents

Publication Publication Date Title
CN114047964B (zh) 一种在Linux兼容Android***时使Android支持摄像头热插拔的方法
JP7058654B2 (ja) リソース共有方法、装置およびシステム
CN109496415B (zh) 一种虚拟机访问远端加速设备方法及***
CN104809369B (zh) 分组设置设备访问权限的方法、客户端、服务器及***
CN114385304B (zh) 安卓应用调用Linux截图工具的方法
CN113407134A (zh) 基于分屏显示实现多客户端之间文件共享的方法和装置
CN115486038B (zh) 物联网配置方法、装置、计算机设备及存储介质
CN110784939B (zh) 数据通信方法、装置及***
CN108462701B (zh) 一种免热点的共享手机网络上网***和方法
CN102858025A (zh) 点对点互动操作的方法及设备
CN104301400B (zh) 基于Samba协议的多屏协同及资源共享方法
CN112187486B (zh) 智能设备之间的交互方法及智能设备
US10505811B2 (en) Multi-terminal interaction relation maintenance system and method
CN108712280B (zh) 一种网络功能的管理方法、装置、存储介质及智能终端
CN116567342A (zh) 投屏方法及装置
CN103781138A (zh) 一种WiMo发送端接入WLAN的方法、装置及***
CN112383617B (zh) 进行长连接的方法、装置、终端设备以及介质
CN113746909A (zh) 网络连接方法、装置、电子设备和计算机可读存储介质
CN112399242A (zh) 基于电视的移动网络连接方法、装置、设备及介质
CN118041704B (zh) Kubernetes容器访问方法、装置、计算设备及存储介质
CN116684216B (zh) 一种通信方法、可读介质和电子设备
CN117857223B (zh) 基于fttr主从管理的黑白名单实现方法、装置、设备及介质
CN114786047B (zh) 多屏互动的实现方法及装置、存储介质及电子设备
CN115396959A (zh) 智能设备联网方法、联网***、智能设备及存储介质
CN117641506A (zh) 基于多链路的无线投屏控制方法、装置、设备及介质

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
GR01 Patent grant
GR01 Patent grant