CN113220474B - 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法 - Google Patents

一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法 Download PDF

Info

Publication number
CN113220474B
CN113220474B CN202110430613.9A CN202110430613A CN113220474B CN 113220474 B CN113220474 B CN 113220474B CN 202110430613 A CN202110430613 A CN 202110430613A CN 113220474 B CN113220474 B CN 113220474B
Authority
CN
China
Prior art keywords
android
linux
data
desktop
emugl
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
CN202110430613.9A
Other languages
English (en)
Other versions
CN113220474A (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 CN202110430613.9A priority Critical patent/CN113220474B/zh
Publication of CN113220474A publication Critical patent/CN113220474A/zh
Application granted granted Critical
Publication of CN113220474B publication Critical patent/CN113220474B/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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Abstract

本发明涉及一种基于Android‑EMUGL的安卓应用共享Linux系统屏幕数据的方法,通过Linux端的Emugl Server与Android端的Emugl Client,在Emugl Server接收到录屏请求后,启动Linux桌面数据内存共享;合成一帧新数据,填充到内存共享数据中,并创建对应的共享描述符,Emugl Server监听数据更新,实时读取填充;Emugl Server将数据填充完成、通知Emugl Client;框架层等数据填充完,把主屏显存内容标记为完整数据,供Linux桌面共享。本方法让Linux和Android实现更加深入的融合。

Description

一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据 的方法
技术领域
本专利申请属于Android系统上文件分享技术领域,更具体地说,是涉及一种基于Android-EMUGL的Android(安卓)应用共享Linux系统屏幕数据的方法与机制。
背景技术
随着国家对信息网络安全的重视,越来越多的操作系统开始考虑兼容性和安全性。Linux系统由于其安全机制,常常作为安全性能高的操作系统使用;作为基于Linux内核发展而来的Android系统,是目前移动终端市场中市场份额最高的操作系统,在移动终端领域具有极好的生态环境。因此Android应用生态在Linux操作系统上的兼容成为了近期研究热点。国内外许多研究人员正在尝试将Android运行环境迁移到Linux操作系统平台以实现Android应用程序在Linux操作系统上兼容、支持的效果。
在Windows系统和Android系统上安装一些视频会议类软件时,用户可以通过这类软件将桌面进行共享,这样可以很方便的将桌面上打开的文档同步显示给参会的其他人员,提高了会议的效率。
Linux系统中桌面图像数据属于帧缓冲区,FrameBuffer就是帧缓冲,帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。FrameBuffer是LCD对应的一种HAL(硬件抽象层),提供抽象的、统一的接口操作,用户不必关心硬件层是怎么实施的,这些都是由Framebuffer设备驱动来完成的。
帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可支持多个帧缓冲设备,最多可达32个,分别为/dev/fb0到/dev/fb31,而/dev/fb则为当前缺省的帧缓冲设备,通常指向/dev/fb0,在嵌入式系统中支持一个显示设备就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31,分别对应/dev/fb0-/dev/fb31。
而在兼容Android应用运行的Linux系统上,虽然这些会议类软件可以正常安装,并可以正常使用大部分功能,但是无法获取Linux系统桌面图像数据进行共享,参会人员无法实时查看到会议上正在分享的Linux桌面上显示的文档内容。
发明内容
本发明需要解决的技术问题是提供一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法,以解决在兼容Android运行的Linux系统下运行的Android应用程序无法将Linux桌面(屏幕)共享出来的技术问题。
为了解决上述问题,本发明所采用的技术方案是:
一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法,所述方法包括步骤:
S1、在Linux操作系统上运行容器里的Android兼容环境。
S2、Linux端的事件服务程序(Linux Event Server)与Android端的事件服务程序(Android Event Server)建立本地socket通信。
S3、Linux端的渲染服务端(Emugl Server)与Android端的渲染客户端(EmuglClient)建立本地socket通信。
S4、Android端的渲染客户端(Emugl Client)将Android系统主屏缓冲区的描述符通过socket发送给Linux端的渲染服务端(Emugl Server)。
S5、Android应用发起录屏请求后,由Android系统创建VirtualDisplay事件,通过Android端的事件服务程序(Android Event Server)向Linux端的事件服务程序(LinuxEvent Server)发送通知录屏请求,并等待主屏数据。
S6、Linux端的渲染服务端(Emugl Server)接收到录屏请求后,通知Linux桌面合成程序,开始启动Linux桌面FrameBuffer数据内存共享。
S7、Linux桌面合成程序每合成一帧新数据,就会填充到Linux端的内存共享数据中,并创建对应的共享文件描述符,及时传送给Linux端的渲染服务端(Emugl Server)。
S8、Linux端的渲染服务端(Emugl Server)监听到共享文件描述符数据更新后,实时读取Linux显示设备,并将读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,填充到Android主屏的ColorBuffer中;ColorBuffer就是染色缓冲,此处桌面图形数据经过长宽方向的缩放调整,转变成对应的colorbuffer的数据结构。
S9、Linux端的渲染服务端(Emugl Server)将数据填充完成后,通过socket通知Android端的渲染客户端(Emugl Client)。
S10、Android端的Framework等待到数据填充完,把主屏显存内容标记为完整的一帧图像数据。
S11、Android应用共享App发出当前主屏的图像,展示给其他接收端的主屏图像实际为Linux桌面的共享界面,至此完成Linux桌面共享。
优选地,S5中,Android系统创建VirtualDisplay事件包括如下步骤:
S51、Framework层创建VirtualDisplay,并初始化VirtualDisplay的相关参数。
S52、SurfaceComposerClient远程调用SurfaceFlinger子系统的createDisplay方法为VirtualDisplay创建display的句柄。
S53、SurfaceFlinger子系统服务接收客户端的请求后分配图形缓存区并提供操作这个缓存区的句柄。
优选地,S51中,Framework初始化VirtualDisplay的相关参数包括但不限于displayID、surface、宽、高、密度。
优选地,S8中,Linux端的渲染服务端(Emugl Server)读取Linux显示设备的桌面图形数据,然后将读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,填充到Android主屏的ColorBuffer中包括如下步骤:
S81、Linux端桌面每合成一帧数据,都通过内存共享方式为当前桌面的图像创建成一个可共享的共享文件描述符。
S82、Linux端的渲染服务端(Emugl Server)通过共享文件描述符实时获取当前桌面的每一帧图像数据,并通过硬件加速的方式渲染成可供Android端显示的纹理。
S83、Linux端的渲染服务端(Emugl Server)把需要共享的纹理填充到Android主屏的ColorBuffer中。
优选地,S8中,读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,通过OpenGL ES方式填充到Android主屏的ColorBuffer中。
OpenGL ES(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
由于采用了上述技术方案,本发明取得的有益效果是:
1.符合国家信息网络安全的方针政策,为国家的信息网络安全提供一定的技术支撑。
2.解决了在兼容Android运行的Linux系统下运行的Android应用程序无法将Linux桌面(屏幕)共享出来的技术问题,让Linux和Android实现更加深入的融合。
附图说明
图1为本发明Android应用发起共享桌面后创建VirtualDisplay并执行录屏操作的流程图;
图2为本发明的双向数据交互示意图。
具体实施方式
下面结合实施例对本发明做进一步详细说明。
本发明公开了一种基于Android-EMUGL的Android安卓应用共享Linux系统屏幕数据的方法,参见图1-图2,在本申请实施例中,本发明是一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法与机制,所述方法包括步骤:
S1、在Linux操作系统上运行容器里的Android兼容环境。
S2、Linux端的事件服务程序(Linux Event Server)与Android端的事件服务程序(Android Event Server)建立本地socket通信。
S3、Linux端的渲染服务端(Emugl Server)与Android端的渲染客户端(EmuglClient)建立本地socket通信。
S4、Emugl Client将Android系统主屏缓冲区的描述符通过socket发送给Linux端的Emugl Server。
S5、Android应用发起录屏请求后,由Android系统创建VirtualDisplay事件,通过Android端的事件服务程序Android Event Server向Linux端的事件服务程序Linux EventServer发送通知录屏请求,并等待主屏数据。
S6、Emugl Server接收到录屏请求后,通知Linux桌面合成程序,开始启动Linux桌面FrameBuffer数据内存共享。
S7、Linux桌面合成程序每合成一帧新数据,就会填充到Linux端的内存共享数据中,并创建对应的共享文件描述符,及时传送给Emugl Server。
S8、Emugl Server监听到共享文件描述符数据更新后,实时读取Linux显示设备,并通过OpenGL ES方式将读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,填充到Android主屏的ColorBuffer中,ColorBuffer就是染色缓冲。
OpenGL ES(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
S9、Emugl Server将数据填充完成后,通过socket通知Emugl Client。
S10、Android端的Android Framework等待到数据填充完,把主屏显存内容标记为完整的一帧图像数据。
S11、Android应用共享App发出当前主屏的图像,展示给其他接收端的主屏图像实际为Linux桌面的共享界面,至此完成Linux桌面共享。
在本申请实施例中,所述Android系统创建VirtualDisplay事件包括步骤:
S51、Framework层MediaProjection的方法createVirtualDisplay()最终通过DisplayManagerGloble创建VirtualDisplay;并初始化VirtualDisplay的相关参数(包含displayID、surface、宽、高、密度等参数);
S52、SurfaceComposerClient远程调用SurfaceFlinger子系统的createDisplay方法为VirtualDisplay创建display的句柄;
S53、SurfaceFlinger子系统服务接收客户端的请求后分配图形缓存区并提供操作这个缓存区的句柄。
在本申请实施例中,所述Emugl Serve读取Linux显示设备的桌面图形数据,并将读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,填充到Android主屏的ColorBuffer中包括步骤:
S81、Linux端桌面每合成一帧数据,都通过内存共享方式为当前桌面的图像创建成一个可共享的文件描述符;
S82、Linux端的渲染服务端Emugl Server通过共享文件描述符实时获取当前桌面的每一帧图像数据,并通过硬件加速的方式渲染成可供Android端显示的纹理;
S83、Emugl Server把需要共享的纹理填充到Android主屏的ColorBuffer中。
图1是Android应用发起屏幕共享后创建VirtualDisplay并执行录屏操作的流程图。用户在Android应用中选择屏幕共享后,Android Framework通过调用createVirtualDisplay方法让SurfaceComposerClient远程调用SurfaceFlinger子系统的createDisplay方法创建VirtualDisplay,开始进行录屏操作,并等待Linux端通知Linux桌面图形数据填充完成后进行Linux桌面的共享显示。
VirtualDisplay类代表一个虚拟显示器,需要调用DisplayManager类的createVirtualDisplay()方法,将虚拟显示器的内容渲染在一个Surface控件上,当进程终止时虚拟显示器会被自动的释放,并且所有的Window都会被强制移除。当不再使用他时,调用release()方法来释放资源。
名词记录:Display:提供合理的显示器的像素密度和大小的信息。
从图1可以看出,用户在点击APP的桌面共享按钮后,APP提示“是否录屏”,点击Yes确认后,Framework调用creatVirtualDisplay(),接着SurfaceComposerClient远程调用SurfaceFlinger的creatDisplay(),SurfaceFlinger创建VirtualDisplay,等待Linux桌面图形数据填充完毕后再进行共享显示。
图2是本发明的双向数据交互示意图。用户在Android应用中选择屏幕共享后,Android Framework通过Android事件服务程序Android Event Server以本地socket通信的方式将请求发送给Linux事件服务程序Linux Event Server,如图2中①所示,Linux事件服务程序Linux Event Server收到请求后,通知渲染服务程序Emugl Server读取Linux显示设备的桌面图形数据,并将读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,填充到Android主屏的ColorBuffer(ColorBuffer意思为当前可写的颜色缓冲)中,所述Android主屏的句柄在Android系统启动时已经通过Emugl Client以socket的方式发送给Emugl Server了。待Emugl Server将数据填充完成后,通过socket通知Emugl Client,此时一直处于等待数据到来状态的Framework从主屏图形缓冲区开始读取Linux桌面图形数据,完成Linux桌面图像在Android应用中的共享,如图2中的②所示。

Claims (5)

1.一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法,其特征在于:所述方法包括步骤:
S1、在Linux操作系统上运行容器里的Android兼容环境;
S2、Linux端的事件服务程序与Android端的事件服务程序建立本地socket通信;
S3、Linux端的渲染服务端与Android端的渲染客户端建立本地socket通信;
S4、Android端的渲染客户端将Android系统主屏缓冲区的描述符通过socket发送给Linux端的渲染服务端;
S5、Android应用发起录屏请求后,由Android系统创建VirtualDisplay事件,通过Android端的事件服务程序向Linux端的事件服务程序发送通知录屏请求,并等待主屏数据;
S6、Linux端的渲染服务端接收到录屏请求后,通知Linux桌面合成程序,开始启动Linux桌面FrameBuffer数据内存共享;
S7、Linux桌面合成程序每合成一帧新数据,就会填充到Linux端的内存共享数据中,并创建对应的共享文件描述符,及时传送给Linux端的渲染服务端;
S8、Linux端的渲染服务端监听到共享文件描述符数据更新后,实时读取Linux显示设备的桌面图形数据,并将读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,填充到Android主屏的ColorBuffer中;
S9、Linux端的渲染服务端将数据填充完成后,通过socket通知Android端的渲染客户端;
S10、Android端的Framework等待到数据填充完,把主屏显存内容标记为完整的一帧图像数据;
S11、Android应用共享发出当前主屏的图像,展示给其他接收端的主屏图像实际为Linux桌面的共享界面,至此完成Linux桌面共享。
2.根据权利要求1所述的一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法,其特征在于:S5中,Android系统创建VirtualDisplay事件包括如下步骤:
S51、Framework层创建VirtualDisplay,并初始化VirtualDisplay的相关参数;
S52、SurfaceComposerClient远程调用SurfaceFlinger子系统的createDisplay方法为VirtualDisplay创建display的句柄;
S53、SurfaceFlinger子系统服务接收客户端的请求后分配图形缓存区并提供操作这个缓存区的句柄。
3.根据权利要求2所述的一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法,其特征在于:S51中,Framework初始化VirtualDisplay的相关参数包括但不限于displayID、surface、宽、高、密度。
4.根据权利要求1所述的一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法,其特征在于:S8中,Linux端的渲染服务端读取Linux显示设备的桌面图形数据,然后将读取到的桌面图形数据进行缩放后转变成对应的ColorBuffer的数据结构,填充到Android主屏的ColorBuffer中包括如下步骤:
S81、Linux端桌面每合成一帧数据,都通过内存共享方式为当前桌面的图像创建成一个可共享的共享文件描述符;
S82、Linux端的渲染服务端通过共享文件描述符实时获取当前桌面的每一帧图像数据,并通过硬件加速的方式渲染成可供Android端显示的纹理;
S83、Linux端的渲染服务端把需要共享的纹理填充到Android主屏的ColorBuffer中。
5.根据权利要求1所述的一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法,其特征在于:S8中,读取到的桌面图形数据通过OpenGL ES方式填充到Android主屏的ColorBuffer中。
CN202110430613.9A 2021-04-21 2021-04-21 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法 Active CN113220474B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110430613.9A CN113220474B (zh) 2021-04-21 2021-04-21 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110430613.9A CN113220474B (zh) 2021-04-21 2021-04-21 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法

Publications (2)

Publication Number Publication Date
CN113220474A CN113220474A (zh) 2021-08-06
CN113220474B true CN113220474B (zh) 2022-08-30

Family

ID=77088259

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110430613.9A Active CN113220474B (zh) 2021-04-21 2021-04-21 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法

Country Status (1)

Country Link
CN (1) CN113220474B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113641320B (zh) * 2021-08-16 2023-10-27 深圳技德智能科技研究院有限公司 一种Linux兼容Android的共享屏幕方法及装置
CN113900754B (zh) * 2021-10-09 2023-10-31 深圳技德智能科技研究院有限公司 共享桌面方法、装置、计算机设备和存储介质
CN114095781A (zh) * 2021-11-02 2022-02-25 北京鲸鲮信息系统技术有限公司 多媒体数据处理方法、装置、电子设备及存储介质
CN114489888B (zh) * 2022-01-10 2023-08-04 麒麟软件有限公司 基于DRM的Android应用共享Linux系统屏幕数据的方法
CN114022344B (zh) * 2022-01-10 2022-04-05 北京蔚领时代科技有限公司 基于Linux服务器的Android容器渲染资源共享方法和装置
CN114385304B (zh) * 2022-03-23 2022-07-08 麒麟软件有限公司 安卓应用调用Linux截图工具的方法
CN114741044B (zh) * 2022-06-13 2022-09-30 北京麟卓信息科技有限公司 一种基于异构渲染的跨运行环境显示输出共享方法
CN114816585B (zh) * 2022-06-20 2022-09-02 北京麟卓信息科技有限公司 一种跨运行环境的远程输入重定向方法
CN115857860B (zh) * 2023-03-02 2023-06-02 麒麟软件有限公司 Wayland合成器中的镜像屏优化方法
CN116471446B (zh) * 2023-06-19 2023-08-11 北京麟卓信息科技有限公司 一种跨运行环境的视频播放优化方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106873932A (zh) * 2017-02-17 2017-06-20 浙江大学 一种Android系统服务端、远程桌面图像重定向方法及系统
CN110442389A (zh) * 2019-08-07 2019-11-12 北京技德系统技术有限公司 一种多桌面环境共享使用gpu的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012044557A2 (en) * 2010-10-01 2012-04-05 Imerj, Llc Auto-configuration of a docked system in a multi-os environment

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106873932A (zh) * 2017-02-17 2017-06-20 浙江大学 一种Android系统服务端、远程桌面图像重定向方法及系统
CN110442389A (zh) * 2019-08-07 2019-11-12 北京技德系统技术有限公司 一种多桌面环境共享使用gpu的方法

Also Published As

Publication number Publication date
CN113220474A (zh) 2021-08-06

Similar Documents

Publication Publication Date Title
CN113220474B (zh) 一种基于Android-EMUGL的安卓应用共享Linux系统屏幕数据的方法
US10176549B2 (en) System, method and computer program product for remote graphics processing
US20140310654A1 (en) Method and system for interworking plurality of applications
JP2013542515A (ja) 異環境間リダイレクション
JP2013546043A (ja) 即時リモートレンダリング
US20090006977A1 (en) Method and System of Computer Remote Control that Optimized for Low Bandwidth Network and Low Level Personal Communication Terminal Device
CN113900754B (zh) 共享桌面方法、装置、计算机设备和存储介质
CN114489888B (zh) 基于DRM的Android应用共享Linux系统屏幕数据的方法
CN113687888A (zh) 在Linux系统上兼容运行Android应用的文件分享方法
KR20080018396A (ko) 이동통신 단말기의 디스플레이 정보를 외부 디스플레이장치에서 디스플레이하기 위한 모바일 애플리케이션 및pc 애플리케이션을 기록한 컴퓨터 판독 가능 기록매체
CN112860364A (zh) 一种基于Linux内核的Android图形显示方法
CN113778604A (zh) 一种操作界面的展示方法、装置、电子设备和存储介质
CN113655975B (zh) 图像显示方法、装置、电子设备和介质
CN108595284B (zh) 一种纹理共享方法、计算机设备和存储介质
CN112256226A (zh) 一种无线屏幕扩展方法及系统
CN115988265A (zh) 一种显示画面的渲染方法、装置和终端设备
CN102968807A (zh) 图像自动生成方法和系统
CN114675914B (zh) 虚拟桌面的图像传输方法、装置、电子设备及存储介质
CN111447219B (zh) 图像显示方法及装置、存储介质、计算机设备
CN114780888A (zh) 网页图片生成方法、系统、电子设备及存储介质
CN112199147A (zh) 应用于智能终端内的录屏方法、系统及计算机可读存储介质
CN115698988A (zh) 用于经由远程浏览器实例查看不兼容网页的系统和方法
CN110990109A (zh) 一种拼接屏回显方法、终端、系统及存储介质
CN111263218A (zh) 一种实现多设备同步交互的方法及系统
CN114564260B (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