一种实现Android跨进程屏幕录制编码保存的系统和方法技术方案

技术编号:33282473 阅读:15 留言:0更新日期:2022-04-30 23:43
本发明专利技术公开一种实现Android跨进程屏幕录制编码保存的系统和方法,其中系统包括主进程、匿名共享内存块和工作进程,主进程包括录屏模块、封包协议模块;工作进程包括拆包协议模块、编码模块和存储存储模块;主进程设有写入线程,工作进程设有读取线程;其中方法包括主进程启动工作进程,并申请匿名共享内存块,经录屏模块采集屏幕视频数据,再经过封包后,写入到匿名共享内存块,然后工作进程启动,从匿名共享内存块中读取屏幕视频数据、解封,经编码后,写入本地存储。本发明专利技术使用内存文件映射的方式跨进程传输数据,具有传输形式高效,其工作进程编码比主流的主进程编码更加稳定,降低了App主进程的资源消耗,工作稳定性高。工作稳定性高。工作稳定性高。

【技术实现步骤摘要】
一种实现Android跨进程屏幕录制编码保存的系统和方法


[0001]本专利技术涉及屏幕录制编码保存的
,具体为一种实现Android跨进程屏幕录制编码保存的系统和方法。

技术介绍

[0002]现有的录屏方案存在以下几个缺点,第一,系统会自动的在App运行的主进程进行视频编码操作。视频编码会消耗大量的进程资源。第二,编码过程会存在比较大的应用crash风险。

技术实现思路

[0003](一)解决的技术问题
[0004]针对现有技术的不足,本专利技术公开了一种实现Android跨进程屏幕录制编码保存的系统和方法,以解决上述
技术介绍
中提出的问题。
[0005](二)技术方案
[0006]为实现以上目的,本专利技术通过以下技术方案予以实现:
[0007]一种实现Android跨进程屏幕录制编码保存的系统,包括主进程、匿名共享内存块和工作进程,所述主进程包括录屏模块、封包协议模块;所述工作进程包括拆包协议模块、编码模块和存储存储模块;所述主进程设有写入线程,所述工作进程设有读取线程。
[0008]优选地,所述系统还包括心跳包模块,所述心跳包模块包括设于主进程的心跳包模块接收端和设于工作进程的发送端。
[0009]优选地,所述编码模块使用Android MediaCodec封装而成,所述录屏模块使用Android MediaRecord封装而成,所述存储模块通过Android MediaMuxer封装而成。
[0010]本专利技术还提供了一种实现Android跨进程屏幕录制编码保存的方法,包括如下步骤:
[0011]步骤1:手机主进程启动工作进程,并申请匿名共享内存块;
[0012]步骤2:主进程中录屏模块进行初始化,采集屏幕视频数据,经过封包协议模块封包处理后,由主进程写入线程写入到匿名共享内存块;
[0013]步骤3:工作进程启动,由工作进程读取线程从匿名共享内存块中读取屏幕视频数据,经过拆包协议模块拆包处理后,再经编码模块处理后,写入本地存储。
[0014]优选地,工作进程开启的同时会启动一个后台线程,后台线程使用心跳包的机制和主进程进行心跳通信。
[0015]优选地,所述步骤2包括如下子步骤:
[0016]步骤21:所述主进程的录屏模块采集屏幕视频数据,所述屏幕视频数据以byte数组的形式保存在所述主进程的内存中;
[0017]步骤22:封包协议模块收到录屏模块发送过来的包含屏幕视频数据的byte数组,通过收集硬件信息计算匿名共享内存块最优的刷入数据大小,对于过大数据进行分包处
理,生成数据包索引地址;
[0018]步骤23:将所述数据包索引地址放入待处理的任务队列;
[0019]步骤24:开启主进程写入线程,主进程写入线程查询待处理队列中为放入共享内存的数据包,当匿名共享内存块无法在放入数据包时,挂起所述写入线程,并在能再继续工作时唤醒所述写入线程。
[0020]优选地,步骤3中编码模块接受到屏幕视频数据之后会判断硬件设备是否能硬编,优先使用硬编处理需要编码的信息,如果设备不支持硬编则使用FFMPEG进行软编,并将编码之后的byte数组送入存储模块。
[0021]有益效果:
[0022]本专利技术使用工作进程进行视频的编码工作,使用内存文件映射作为跨进程数据传输方式,使用心跳包保证了主进程能实时监控工作进程。工作进程编码比主流的主进程编码更加稳定,降低了App主进程的资源消耗,工作稳定性高。使用内存文件映射的方式跨进程传输数据,比传统的Binder传输形式更高效,Binder存在传输体积限制。心跳包机制保证了在屏幕视频录屏过程中,当发生crash现象时,能够正确的重启工作进程,从而继续进行录屏文件保存,降低了录屏文件丢失的风险相关的内容。
附图说明
[0023]图1:为一种实现Android跨进程屏幕录制编码保存的系统流程图;
[0024]图2:为一种实现Android跨进程屏幕录制编码保存的方法流程图;
具体实施方式
[0025]如图1

2所示,一种实现Android跨进程屏幕录制编码保存的系统,包括主进程、匿名共享内存块和工作进程,所述主进程包括录屏模块、封包协议模块;所述工作进程包括拆包协议模块、编码模块和存储存储模块;所述主进程设有写入线程,所述工作进程设有读取线程。
[0026]录屏模块是使用Android MediaRecord封装而成,用作屏幕数据采集的功能模块;
[0027]封包协议模块用于将跨进程的数据按照一定大小,一定格式进行封装;
[0028]拆包协议模块用于将跨进程的数据按照一定大小,一定格式进行解封;
[0029]匿名共享内存块为内存映射的载体,内存映射的数据通过匿名共享内存块进行传输;其中内存映射是一种进程间快速传输大体积数据的通信方式。
[0030]编码模块是使用Android MediaCodec封装而成,用于屏幕视频数据的编码或者解码;
[0031]存储模块是使用Android MediaMuxer封装成的,用于将屏幕视频数据封装到视频格式容器中并保存到本地文件;
[0032]写入线程是主进程用来处理数据写入匿名共享内存块的线程。
[0033]读取线程是工作进程用来处理从匿名共享内存块读取数据的线程。
[0034]该系统还包括心跳包模块,心跳包模块包括设于主进程的心跳包模块接收端和设于工作进程的发送端,工作进程定时向主进程发送工作状态信息,主进程能通过这些信息来判断工作进程的工作状态是否健康,进而进行下一步决策。以保证在屏幕视频录屏过程
中,当发生crash现象时,能够正确的重启工作进程,从而继续进行录屏文件保存,降低了录屏文件丢失的风险相关的内容。
[0035]本专利技术还提供了一种实现Android跨进程屏幕录制编码保存的方法,该方法包括如下步骤:
[0036]步骤1:手机主进程启动工作进程,并申请匿名共享内存块。所申请的共享内存块的索引地址通过广播方式发送给工作进程。工作进程读取线程挂起,等待匿名共享内存刷入数据。同时工作进程的心跳包模块发送端初始化,并将工作进程初始化成功的信息发送给主进程的心跳包模块接收端。
[0037]步骤2:主进程中录屏模块进行初始化,申请实时获取屏幕视频数据的权限。录屏模块从Android系统的显存中抓取正在渲染的图片原始数据。交由封包协议模块封包处理,同时心跳包模块实时发送工作进程的工作状态。
[0038]步骤3:封包协议模块收到录屏模块发送过来的包含屏幕视频信息的byte数组,通过收集硬件信息计算匿名共享内存块最优的刷入数据大小,对于过大数据进行分包处理,生成数据包索引地址。同时心跳包模块实时发送工作进程的工作状态。
[0039]步骤4:处理好的数据包索引地址放入主进程写入数据的匿名共享内存块的任务队列,开启用来传输数据的工作进程写入线程,工作进程本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种实现Android跨进程屏幕录制编码保存的系统,其特征在于:包括主进程、匿名共享内存块和工作进程,所述主进程包括录屏模块、封包协议模块;所述工作进程包括拆包协议模块、编码模块和存储存储模块;所述主进程设有写入线程,所述工作进程设有读取线程。2.根据权利要求1所述的一种实现Android跨进程屏幕录制编码保存的系统,其特征在于:所述系统还包括心跳包模块,所述心跳包模块包括设于主进程的心跳包模块接收端和设于工作进程的发送端。3.根据权利要求1所述的一种实现Android跨进程屏幕录制编码保存的系统,其特征在于:所述编码模块使用Android MediaCodec封装而成,所述录屏模块使用Android MediaRecord封装而成,所述存储模块通过Android MediaMuxer封装而成。4.一种实现Android跨进程屏幕录制编码保存的方法,其特征在于:包括如下步骤:步骤1:手机主进程启动工作进程,并申请匿名共享内存块;步骤2:主进程中录屏模块进行初始化,采集屏幕视频数据,经过封包协议模块封包处理后,由主进程写入线程写入到匿名共享内存块;步骤3:工作进程启动,由工作进程读取线程从匿名共享内存块中读取屏幕视频数据,经过拆包协议模块拆包处理后,再经编码模块处理后,写...

【专利技术属性】
技术研发人员:李韩乔治李雪欣邹西山罗岚陈星弋翔罗志亮林泽涛蔡炳锋阮锐华
申请(专利权)人:联通沃音乐文化有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1