一种在linux
Android/724.html">兼容android系统时使android
支持摄像头热插拔的方法
技术畛域
1.本发明属于linux操作系统技术畛域,详细地说,触及一种在linux
Android/724.html">兼容android系统时使android
支持摄像头热插拔的方法。
背景技术:2.近年来,随着android用户的增长以及android软硬件产品的成熟和发展,android运用生态呈现出迸发式发展,在很多畛域都已经超过windows运用生态和
ios运用生态,成为目前利用最宽泛的运用生态。android基于linux内核发展而来,是目前移动终端市场中市场份额最高的linux类操作系统,在移动终端畛域具备极好的生态环境;windows系统占据着pc市场的最大份额,其作为美国闭源操作系统,在信息网络平安方面存在渺小平安隐患;而linux操作系统,其作为android的前身,因为开发人员数目和市场份额的限度,发展较为迟缓,生态环境长期处于不良形态,不断不见起色。随着信息技术的飞速发展,国家对信息平安的注重水素日益降职,国内基于开源linux操作系统的自主操作系统日益发展壮大,但linux操作系统生态运用的重大缺乏依旧是困扰linux操作系统真正推向市场的一大痛点。
3.要处理linux操作系统的生态成绩,必须处理用户数无余战争台运用软件数无余这两个要害点。android在移动终端畛域具备宽泛的用户群,并且具备成熟的开发平台和运用软件群体,对于处理linux操作系统目前的窘境具备肯定的参考价值。
4.因为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操作系统走向生产市场的步伐,但它们都还存在着无奈漠视的用户体验成绩,包括稳固性、易用性、性能完备性等,导致这块技术畛域没有分明的降职。
5.对于运转在linux操作系统上的android运用,常见的人机交互对linux系统端外设的依赖显得尤其重要;其中,因为用户对日益增长的线上社交、商务沟通、网络购物等不可或缺的须要,因此,用户对摄像头的利用能否便捷、性能能否稳固成为android运用兼容linux系统一个必不可少的优化环节。
6.基于目前移动端android系统对摄像头的利用情形:利用容器相干技术,在容器创建时将摄像头设施节点映射到android环境中,让android系统间接操作容器中的摄像头设
备节点。这种模式的弊端是第一:用户在事前未接入摄像头的情况下再开启android环境,此时如想利用摄像头则需求接上摄像头后重启pc;第二,在开启android环境后如有拔插摄像头的操作也会导致无奈利用摄像头的成绩;第三,基于pc端多个usb口可能接入摄像头,假设用户想在多个摄像头之间切换利用,也需求切换后重启整个pc环境。因此,这种极大的不便利性毫无疑难会给用户削减不少苦恼,给android运用生态迁徙削减妨碍。
技术完成因素:7.有鉴于此,
无锡小程序开发,本发明为了处理现有技术存在的毛病和无余,提供了一种在linux兼容android系统时使android支持摄像头热插拔的方法,这种方法经过在linux端创建摄像头服务端、输入摄像头监控程序,适配优化android摄像头硬件形象层,买通了android和linux系统间的因为容器形成的隔阂,使android运用对摄像头得以即插即用。
8.本发明提供一种在linux兼容android系统时使android支持摄像头热插拔的方法,该方法运用在linux兼容android系统的运转环境中。
9.所述方法包括以下步骤:步骤s1:linux系统兼容android的运转环境预备;步骤s2:创建linux端摄像头服务端,用于接纳android端的打开摄像头的申请并将打开摄像头的申请对应失去的摄像头的文件形容符回传给android端;步骤s3:修正android端的摄像头硬件形象层,用于将打开摄像头的申请发送给linux端,并接纳linux端发来的摄像头的文件形容符;步骤s4:启动android运用访问摄像头,经过摄像头服务框架将打开摄像头的申请传递到摄像头硬件形象层,摄像头硬件形象层将打开摄像头的申请发送给linux端,linux端摄像头服务端接纳到android端的打开摄像头的申请后,回传对应的摄像头的文件形容符给android端,android端失去操作摄像头的权限。
10.本发明的技术计划进一步改进在于:所述步骤s1的运转环境预备包括如下详细步骤:步骤s101:在linux系统上利用docker容器加载android镜像,让linux和android系统共享同一linux内核;步骤s102:在docker容器中启动android的运转环境。
11.本发明的技术计划进一步改进在于:所述步骤s2中,创建linux端摄像头服务端,包括如下详细步骤:步骤s201:在linux端创建摄像头常驻服务,随linux系统开机启动;步骤s202:在摄像头常驻服务中开启线程,在线程中创建socket通服气务端,
无锡外卖小程序,socket通服气务端用来监听android端发来的打开摄像头的申请,并将创建的socket文件链接到docker容器内,使得android端经过所述socket文件与linux端停止socket通讯。
12.本发明的技术计划进一步改进在于:所述步骤s3包括如下详细步骤:步骤s301: android端摄像头硬件形象层修正打开摄像头的open函数,在android端创建socket通讯客户端,步骤s302:android端的socket通讯客户端与linux端的socket通服气务端建设衔接。
13.本发明的技术计划进一步改进在于:所述步骤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函数操作摄像头执行获取设施属性、获取图像数据。
14.本发明的技术计划进一步改进在于:在步骤s404中:插入摄像头时linux系统在/dev目录下构成插入的摄像头的设施节点门路,open函数中示意摄像头的设施节点门路通常包括/dev/video0、/dev/video2等。
15.本发明的技术计划进一步改进在于:在步骤s405中,摄像头的文件形容符是linux中的open函数打开摄像头时由内核分配实现,所述摄像头的文件形容符只在一个进程内部有效,两个不同进程利用相反的摄像头的文件形容符,两个不同进程不指向同一文件,两个不同进程经过摄像头的文件形容符传递来具备相反的权限操作同一文件。
16.本发明的技术计划进一步改进在于:所述摄像头的文件形容符传递应用匿名unix域套接字sendmsg/recvmsg完成;sendmsg提供传递控制信息的性能;在sendmsg的第二个参数msghdr变量的cmsghdr成员中,控制头cmsg_level和cmsg_type设置摄像头的文件形容符传递属性,并将传递的摄像头的文件形容符作为数据局部,保存在cmsghdr变量的前面。
17.本发明的技术计划进一步改进在于:所述方法还包括步骤s5:恣意切换linux端的多个摄像头;步骤s5的恣意切换linux端的多个摄像头包括如下步骤:步骤s501:linux端输入监控摄像头设施节点的监控程序,所述监控程序带有配置界面供用户抉择利用摄像头;步骤s502:当提供给android运用利用的摄像头被拔掉或许用户抉择另一摄像头时,立即切换到下一个供抉择的摄像头或许用户所抉择的另一摄像头;步骤s503:当android端再次申请打开摄像头时,打开新配置的摄像头并将新配置的摄像头的文件形容符发送给android端, android运用打开新配置的摄像头,实现摄像头的切换。
18.与现有技术相比,本发明的有益效果:完成了摄像头即插即用的性能,使运转在
linux系统上的android运用也能轻易切换利用linux端的多个摄像头,极大的满足了用户对外设的利用便捷须要,也为android运用生态更好的迁徙到linux跨出重要一步。
19.当然,实施本发明的任一产品并不肯定需求同时达到以上所述的一切技术效果。
附图阐明
20.为了更清楚地阐明本发明详细实施模式或现有技术中的技术计划,下面将对详细实施模式或现有技术形容中所需求利用的附图作简略地引见,不言而喻地,下面形容中的附图是本发明的一些实施模式,对于本畛域一般技术人员来讲,在不付出创造性休息的前提下,还可能依据这些附图获得其余的附图。
21.图1是本发明一个实施例的次要调用流程的关系图。
详细实施模式
22.为使本发明的目标、技术计划和优点愈加清楚明了,下面联合详细实施模式并参照附图,对本发明进一步具体阐明。应该理解,这些形容只是示例性的,而并非要限度本发明的范围。此外,在以下阐明中,省略了对公知构造和技术的形容,以避免不必要地混杂本发明的概念。
23.本发明一种在linux兼容android系统时使android支持摄像头热插拔的方法,这种方法经过在linux端创建摄像头服务端、输入摄像头监控程序,适配优化android摄像头硬件形象层,买通了android和linux系统间的因为容器形成的隔阂,使android运用对摄像头得以即插即用。
24.如图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端失去操作摄像头的权限。
25.进一步的,步骤s1的linux系统兼容android的运转环境预备工作依照如下步骤实施:步骤s101:在linux系统上利用docker容器加载android镜像,这样linux和android系统共享同一linux内核;步骤s102:在docker容器中启动android的运转环境。
26.进一步的,步骤s2中,创建linux端摄像头服务端,包括如下详细步骤:
步骤s201:在linux端创建摄像头常驻服务,摄像头常驻服务随着linux系统开机启动;步骤s202:在摄像头常驻服务中开启线程,在线程中创建socket通服气务端,socket通服气务端可能用来监听android端发来的打开摄像头的申请,并将创建的socket文件链接到docker容器内,使得android端经过该socket文件与linux端停止socket通讯。
27.进一步的,所述步骤s3包括如下详细步骤:步骤s301: android端摄像头硬件形象层修正打开摄像头的open函数,在android端创建socket通讯客户端。
28.步骤s302:android端的socket通讯客户端与linux端的socket通服气务端建设衔接,建设衔接之后,android端与linux端可能传送消息。
29.进一步的,所述步骤s4包括如下步骤:步骤s401:android 运用发起访问摄像头的申请;步骤s402:android的摄像头服务框架判别以后能否有运用占用摄像头资源,如没有,则间接向下传递打开摄像头的申请;如有,则关闭以后运用的摄像头资源,然后向底层重新发送打开摄像头的申请;步骤s403:当android运用收回打开摄像头的申请时,经过android下的摄像头子系统调用摄像头硬件形象层中的open函数,再经过socket通讯将打开摄像头的申请发送给linux端;步骤s404:当linux端接纳到android端的打开摄像头的申请时,应用linux中的open函数打开摄像头;一方面,插入摄像头时linux系统在/dev目录下构成插入的摄像头的设施节点门路,open函数中示意摄像头的设施节点门路通常包括/dev/video0、/dev/video2等,且拔出摄像头后对应的设施节点门路隐没;open函数可能从设施节点门路中挑选出符合条件的摄像头设施并打开。
30.步骤s405:应用linux中的open函数打开摄像头后失去对应的摄像头的文件形容符,将摄像头的文件形容符经过socket通服气务端以消息的方式回传给android端;摄像头的文件形容符是linux中的open函数打开摄像头时由内核分配实现的,摄像头的文件形容符只在一个进程内部有效,两个不同进程可能利用异样的摄像头的文件形容符,但两个不同进程并不指向同一文件。两个不同进程具备异样的权限操作同一个文件是经过摄像头的文件形容符传递来完成的。
31.摄像头的文件形容符传递是应用匿名unix域套接字sendmsg/recvmsg来完成;sendmsg提供传递控制信息的性能;在sendmsg的第二个参数msghdr变量的cmsghdr成员中,控制头cmsg_level和cmsg_type设置摄像头的文件形容符传递属性,并将传递的摄像头的文件形容符作为数据局部,保存在cmsghdr变量的前面,这样就可能完成摄像头的文件形容符传递这一性能。
32.步骤s406:android端应用recvmsg函数期待linux端摄像头服务端回传过来的消息,回传的消息在到构造体msghdr中,再从构造体msghdr中解析出该摄像头的文件形容符;摄像头的文件形容符存在构造体cmsghdr中,构造体msghdr中的成员指针变量msg_control指向cmsghdr构造体地址。
33.步骤s407:android端失去摄像头的文件形容符,并具有和linux端相反的权限以
操作摄像头;android端应用ioctl函数操作摄像头执行获取设施属性、获取图像数据。
34.本发明更进一步在于,方法还包括步骤s5:恣意切换linux端的多个摄像头;步骤s5的恣意切换linux端的多个摄像头包括如下步骤:步骤s501:linux端输入监控摄像头设施节点的监控程序,该监控程序带有配置界面供用户抉择利用摄像头;步骤s502:当提供给android运用利用的摄像头被拔掉或许用户抉择另一摄像头时,立即切换到下一个供抉择的摄像头或许用户所抉择的另一摄像头;步骤s503:当android端再次申请打开摄像头时,打开新配置的摄像头并将新配置的摄像头的文件形容符发送给android端, android运用打开新配置的摄像头,实现摄像头的切换的目标。
35.本发明的有益效果是:使运转在linux系统上的android运用也能为所欲为的利用摄像头,真正完成了摄像头即插即用;同时,在领有多个摄像头的情景下,提供了让用户抉择利用哪一个的能够,极大的满足了用户对外设的利用便捷须要,也为android运用生态迁徙到linux跨出重要一步。
36.以上对本发明实施例所提供的一种在linux兼容android系统时使android支持摄像头热插拔的方法停止了具体引见。以上实施例的阐明只是用于协助理解本发明的方法及其外围现实;同时,对于本畛域的普通技术人员,根据本发明的思维,在详细实施模式及运用范围上均会有扭转之处,
系统集成,综上所述,本阐明书内容不应理解为对本发明的限度。
37.如在阐明书及权益要求当中利用了某些词汇来指称特定组件或模块。本畛域技术人员应可理解,不同机构能够会用不同名词来称呼同一个组件或模块。本阐明书及权益要求并不以称号的差异来作为区分组件的模式,而是以组件或模块在性能上的差异来作为区分的准绳。如在通篇阐明书及权益要求当中所提及的“蕴含”、“包括”为开放式用语,故应解释成“蕴含但不限定于”。“大致”是指在可接纳的误差范围内,本畛域技术人员可以在肯定误差范围内处理所述技术成绩,根本达到所述技术效果。阐明书后续形容为实施本发明的较佳实施模式,然所述形容乃以阐明本发明的普通准则为目标,并非用以限定本发明的范围。本发明的保护范围当视所附权益要求所界定者为准。
38.还需求阐明的是,术语“包括”、“蕴含”或许其任何其余变体意在涵盖非排他性的蕴含,从而使得包括一系列因素的商品或许系统不只包括那些因素,而且还包括没有明白列出的其余因素,或许是还包括为这种商品或许系统所固有的因素。在没有更多限度的情况下,由语句“包括一个
……”
限定的因素,并不扫除在包括所述因素的商品或许系统中还存在另外的相反因素。
39.上述阐明示出并形容了本发明的若干优选实施例,但如前所述,该当理解本发明并非局限于本文的方式,不应看作是对其余实施例的扫除,而可用于各种其余组合、修正和环境,并可以在本文所述发明构想范围内,经过上述教导或相干畛域的技术或知识停止改动。而本畛域人员所停止的改动和变化不脱离本发明的范围,则都应在本发明所附权益要求的保护范围内。