本发明涉及远程屏幕显示技术领域,尤其涉及一种ios终端的远程显示方法、系统、节点管理端、计算机设备及存储介质。
背景技术:
进行移动终端app测试的时候,无论是自动化测试还是日常的兼容性测试都需要更全面的设备机型去做测试。很多时候,往往由于缺少某种稀缺测试设备导致无法测试;或者测试设备利用率低,增加了测试成本。移动终端真机租用平台就可以很好的解决这个问题,通过这个平台,既可以获取到各种测试设备(例如各种机型的手机)的资源,同时也能提高测试设备利用率。用户通过浏览器就能对远程连接的测试设备进行操作。这个平台主要包括两个关键技术,一个是远程操作移动终端,驱动移动终端完成一系列点击、滑动、长按、输入等操作,另一个是获取移动终端屏幕的画面。
ios终端(苹果终端)驱动目前主要使用facebook开源的ios自动化框weddriveragent;而屏幕画面获取,目前的解决方案主要有iosminicap,该方案的局限在于一台pc只能支持一台ios终端的图片传输,不符合目前大量真机远控的使用场景。另一种方案就是在weddriveragent中添加快速截屏的功能,单开一个线程对外传输图片,但是传输速度不如minicap,在显示效果上体验较差。
中国专利cn108810585a公开了一种基于ios远程显示系统手机的投屏远程显示方法,其在现有的replaykit框架下集成直播扩展模块,通过直播扩展模块采集屏幕视频流,在直播扩展模块中对采集到的屏幕视频流进行视频编码;所述视频编码优选采用h264编码;通过直播扩展模块与pc端建立tcp连接,并将编码后的数据传输至pc端;pc端对接收到的数据进行解码播放。”但是replaykit框架只支持录制app内的内容,无法录制整个ios远程显示系统的内容。
综上所述,现有远程显示ios设备屏幕内容的技术,在实际使用上显然存在不便与缺陷,所以有必要加以改进。
技术实现要素:
针对上述的缺陷,本发明的目的在于提供一种ios终端的远程显示方法、系统、节点管理端、计算机设备及存储介质,其具有清晰度高,画面显示流畅,且视频流所需带宽小的优点。
为了实现上述目的,本发明提供一种ios终端的远程显示方法,应用于包括依次通信连接的至少一个客户端、节点管理端和至少一个ios终端的ios终端的远程显示系统;所述方法包括步骤有:
在所述ios终端中安装基于replaykit2框架的录屏程序;
所述客户端向所述节点管理端发送屏幕显示指令;
所述节点管理端根据所述屏幕显示指令,向至少一个所述ios终端发送开始录屏指令;
所述ios终端根据所述开始录屏指令,通过所述录屏程序获取屏幕数据并推送给所述节点管理端;
所述节点管理端将所述录屏数据发送给所述客户端。
根据本发明所述的远程显示方法,所述节点管理端根据所述屏幕显示指令,向至少一个所述ios终端发送开始录屏指令的步骤包括:
所述节点管理端收到所述屏幕显示指令后,建立与至少一个所述ios终端的socket连接,并向所述ios终端发送所述开始录屏指令;
所述ios终端根据所述开始录屏指令,通过所述录屏程序获取屏幕数据并推送给所述节点管理端的步骤包括:
所述ios终端收到所述开始录屏指令后,通过所述录屏程序获取所述屏幕数据;
所述ios终端对获取的所述屏幕数据进行编码;
所述ios终端将编码后的所述屏幕数据通过异步socket推送给所述节点管理端;
所述节点管理端将所述录屏数据发送给所述客户端的步骤包括:
所述节点管理端将编码后的所述屏幕数据转换成帧数据,并发送给所述客户端。
根据本发明所述的远程显示方法,所述录屏程序获取所述屏幕数据并进行编码的步骤包括:
通过videotoolbox工具对所述屏幕数据进行h.264编码。
根据本发明所述的远程显示方法,所述在所述ios终端中安装基于replaykit2框架的录屏程序的步骤之后,以及所述客户端向所述节点管理端发送屏幕显示指令的步骤之前还包括:
所述节点管理端向所述ios终端发送启动服务指令;
所述ios终端根据所述启动服务指令,启动所述录屏程序所集成的广播上传扩展,通过rpbroadcastcontroller函数以回调方式将所述屏幕数据发送给processsamplebuffer函数;
所述ios终端收到所述开始录屏指令后,通过所述录屏程序获取所述屏幕数据并进行编码的步骤包括:
所述ios终端收到所述开始录屏指令后,通过所述录屏程序获取所述processsamplebuffer函数的所述屏幕数据并进行编码。
根据本发明所述的远程显示方法,所述节点管理端将所述录屏数据发送给所述客户端的步骤之后还包括:
所述客户端向所述节点管理端发送停止显示指令;
所述节点管理端根据所述停止显示指令,关闭与至少一个所述ios终端的socket连接,并向所述ios终端发送所述停止录屏指令;
所述ios终端根据所述停止录屏指令,停止处理所述processsamplebuffer函数的所述屏幕数据。
根据本发明所述的远程显示方法,所述节点管理端向所述ios终端发送启动服务指令的步骤包括:
所述节点管理端启动service_scrcpy函数,通过weddriveragent框架向所述ios终端发送所述启动服务指令;
所述ios终端根据所述启动服务指令,启动所述录屏程序所集成的广播上传扩展的步骤包括:
所述ios终端根据所述启动服务指令启动所述录屏程序,并将所述录屏程序切换到后台;
所述节点管理端收到所述屏幕显示指令后,建立与至少一个所述ios终端的socket连接,并向所述ios终端发送所述开始录屏指令的步骤包括:
所述节点管理端的service_scrcpy函数收到所述屏幕显示指令后,建立与至少一个所述ios终端的socket连接,并向所述ios终端发送所述开始录屏指令。
根据本发明所述的远程显示方法,所述节点管理端将编码后的所述屏幕数据转换成帧数据,并发送给所述客户端的步骤包括:
通过所述节点管理端的service_scrcpy函数的数据接收线程,接收编码后的所述屏幕数据,并存入数据缓存;
通过所述节点管理端的service_scrcpy函数的数据处理线程,从所述数据缓存中取出数据,转换成nal单元,并存入帧缓存;
通过所述节点管理端的service_scrcpy函数的数据推送线程,从所述帧缓存中取出帧数据发送给所述客户端。
根据本发明所述的远程显示方法,所述客户端向所述节点管理端发送屏幕显示指令的步骤之前还包括:
所述节点管理端新增第一端口和第二端口,所述第一端口为对外提供的socket端口,所述第二端口映射所述ios终端的第三端口;
所述ios终端的所述广播上传扩展创建gcdasyncsocket对象,绑定所述第三端口,等待建立socket连接。
根据本发明所述的远程显示方法,所述客户端通过web服务器、代理端与所述节点管理端通信连接;
所述节点管理端将编码后的所述屏幕数据转换成帧数据,并发送给所述客户端的步骤包括:
所述节点管理端将编码后的所述屏幕数据转换成所述帧数据,发送给所述代理端;
所述代理端将所述帧数据发送给所述web服务器;
所述web服务器将所述帧数据通过websocket方式发送给所述客户端显示。
根据本发明所述的远程显示方法,所述远程显示方法应用于app的真机测试;
所述节点管理端安装于计算机设备;和/或
所述客户端为浏览器。
本发明还提供一种ios终端的远程显示系统,包括有依次通信连接的至少一个客户端、节点管理端和至少一个ios终端;
所述客户端,用于向所述节点管理端发送屏幕显示指令;
所述节点管理端进一步包括:
指令控制模块,用于根据所述屏幕显示指令,向至少一个所述ios终端发送开始录屏指令;
数据处理模块,用于将所述ios终端推送的所述录屏数据发送给所述客户端;
所述ios终端,安装有基于replaykit2框架的录屏程序,用于根据所述开始录屏指令,通过所述录屏程序获取屏幕数据并推送给所述节点管理端。
根据本发明所述的远程显示系统,所述节点管理端的所述指令控制模块用于收到所述屏幕显示指令后,建立与至少一个所述ios终端的socket连接,并向所述ios终端发送所述开始录屏指令;
所述节点管理端的所述数据处理模块用于将所述ios终端推送的编码后的所述屏幕数据转换成帧数据,并发送给所述客户端;
所述ios终端还包括有:
录屏模块,用于收到所述开始录屏指令后,通过所述录屏程序获取所述屏幕数据;
编码模块,用于对获取的所述屏幕数据进行编码;
推送模块,用于将编码后的所述屏幕数据通过异步socket推送给所述节点管理端。
根据本发明所述的远程显示系统,所述ios终端的编码模块用于通过videotoolbox工具对所述屏幕数据进行h.264编码。
根据本发明所述的远程显示系统,所述节点管理端还包括有:
第一启动模块,用于在所述客户端向所述节点管理端发送屏幕显示指令之前,向所述ios终端发送启动服务指令;
所述ios终端还包括有:
第二启动模块,用于根据所述启动服务指令,启动所述录屏程序所集成的广播上传扩展,通过rpbroadcastcontroller函数以回调方式将所述屏幕数据发送给processsamplebuffer函数;
所述ios终端的所述录屏模块,用于收到所述开始录屏指令后,通过所述录屏程序获取所述processsamplebuffer函数的所述屏幕数据并进行编码。
根据本发明所述的远程显示系统,所述节点管理端还包括有:
第一停止模块,用于收到所述客户端发送的停止显示指令后,关闭与至少一个所述ios终端的socket连接,并向所述ios终端发送所述停止录屏指令;
所述ios终端还包括有:
第二停止模块,用于根据所述停止录屏指令,停止处理所述processsamplebuffer函数的所述屏幕数据。
根据本发明所述的远程显示系统,所述节点管理端的所述第一启动模块用于启动service_scrcpy函数,通过weddriveragent框架向所述ios终端发送所述启动服务指令;
所述ios终端的第二启动模块用于根据所述启动服务指令启动所述录屏程序,并将所述录屏程序切换到后台;
所述节点管理端的指令控制模块用于在service_scrcpy函数收到所述屏幕显示指令后,建立与至少一个所述ios终端的socket连接,并向所述ios终端发送所述开始录屏指令。
根据本发明所述的远程显示系统,所述节点管理端的数据处理模块的还包括:
数据接收子模块,用于通过所述节点管理端的service_scrcpy函数的数据接收线程,接收编码后的所述屏幕数据,并存入数据缓存;
数据转化子模块,用于通过所述节点管理端的service_scrcpy函数的数据处理线程,从所述数据缓存中取出数据,转换成nal单元,并存入帧缓存;
数据推送子模块,用于通过所述节点管理端的service_scrcpy函数的数据推送线程,从所述帧缓存中取出帧数据发送给所述客户端。
根据本发明所述的远程显示系统,所述节点管理端新增第一端口和第二端口,所述第一端口为对外提供的socket端口,所述第二端口映射所述ios终端的第三端口;
所述ios终端的所述广播上传扩展创建gcdasyncsocket对象,绑定所述第三端口,等待建立socket连接。
根据本发明所述的远程显示系统,所述客户端通过web服务器、代理端与所述节点管理端通信连接;
所述节点管理端的所述数据处理模块,用于将所述ios终端推送的编码后的所述屏幕数据转换成所述帧数据,发送给所述代理端;
所述代理端,用于将所述帧数据发送给所述web服务器;
所述web服务器,用于将所述帧数据通过websocket方式发送给所述客户端显示。
根据本发明所述的远程显示系统,所述远程显示系统应用于app的真机测试;
所述节点管理端安装于计算机设备;和/或
所述客户端为浏览器。
本发明还提供一种基于节点管理端的ios终端的远程显示方法,应用于包括依次通信连接的至少一个客户端、节点管理端和至少一个ios终端的ios终端的远程显示系统,所述ios终端中安装有基于replaykit2框架的录屏程序;所述远程显示方法包括步骤有:
所述节点管理端收到所述客户端发送的屏幕显示指令后,向至少一个所述ios终端发送开始录屏指令,指令所述ios终端通过所述录屏程序获取屏幕数据并推送给所述节点管理端;
所述节点管理端将所述ios终端推送的所述录屏数据发送给所述客户端。
根据本发明所述的远程显示方法,所述节点管理端根据所述屏幕显示指令,向至少一个所述ios终端发送开始录屏指令的步骤包括:
所述节点管理端收到所述屏幕显示指令后,建立与至少一个所述ios终端的socket连接,并向所述ios终端发送所述开始录屏指令,指令所述ios终端的所述录屏程序获取所述屏幕数据并进行编码,并将编码后的所述屏幕数据通过异步socket推送给所述节点管理端;
所述节点管理端将所述录屏数据发送给所述客户端的步骤包括:
所述节点管理端将编码后的所述屏幕数据转换成帧数据,并发送给所述客户端。
本发明还提供一种节点管理端,应用于包括依次通信连接的至少一个客户端、节点管理端和至少一个ios终端的ios终端的远程显示系统,所述ios终端中安装有基于replaykit2框架的录屏程序;所述节点管理端包括有:
指令控制模块,用于所述节点管理端收到所述客户端发送的屏幕显示指令后,向至少一个所述ios终端发送开始录屏指令,指令所述ios终端通过所述录屏程序获取屏幕数据并推送给所述节点管理端;
数据处理模块,用于将所述ios终端推送的所述录屏数据发送给所述客户端。
根据本发明所述的节点管理端,所述节点管理端的所述指令控制模块用于收到所述屏幕显示指令后,建立与至少一个所述ios终端的socket连接,并向所述ios终端发送所述开始录屏指令,指令所述ios终端的所述录屏程序获取所述屏幕数据并进行编码,并将编码后的所述屏幕数据通过异步socket推送给所述节点管理端;
所述节点管理端的所述数据处理模块用于将所述ios终端推送的编码后的所述屏幕数据转换成帧数据,并发送给所述客户端。
本发明还提供一种存储介质,用于存储一种用于执行上述任意一种ios终端的远程显示方法的计算机程序。
本发明还提供一种计算机设备,包括存储介质、处理器以及存储在所述存储介质上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现任一项所述的ios终端的远程显示方法。
本发明通过在ios终端中安装基于replaykit2框架的录屏程序,客户端向节点管理端发送屏幕显示指令后,节点管理端指令ios终端通过录屏程序获取屏幕数据,再由节点管理端将录屏数据发送给客户端显示。本发明基于replaykit2实现ios终端的远程显示,由于replaykit2的易用性和通用性,并且可以对整个ios终端实现屏幕录制,因此本发明可实现一台计算机对多台连接的ios终端截屏,同时保证客户端流畅显示屏幕画面,具有清晰度高,画面显示流畅,且视频流所需带宽小的优点。
附图说明
图1是本发明ios终端的远程显示系统的结构示意图;
图2是本发明优选ios终端的远程显示系统的结构示意图;
图3是本发明优选ios终端的远程显示方法的信令图;
图4是本发明ios终端的远程显示方法的流程图;
图5是本发明优选ios终端的远程显示方法的流程图;
图6是本发明节点管理端的结构示意图;
图7是本发明基于节点管理端的ios终端的远程显示方法的流程图;
图8是本发明计算机设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要说明的,本说明书中针对“一个实施例”、“实施例”、“示例实施例”等的引用,指的是描述的该实施例可包括特定的特征、结构或特性,但是不是每个实施例必须包含这些特定特征、结构或特性。此外,这样的表述并非指的是同一个实施例。进一步,在结合实施例描述特定的特征、结构或特性时,不管有没有明确的描述,已经表明将这样的特征、结构或特性结合到其它实施例中是在本领域技术人员的知识范围内的。
此外,在说明书及后续的权利要求当中使用了某些词汇来指称特定组件或部件,所属领域中具有通常知识者应可理解,制造商可以用不同的名词或术语来称呼同一个组件或部件。本说明书及后续的权利要求并不以名称的差异来作为区分组件或部件的方式,而是以组件或部件在功能上的差异来作为区分的准则。在通篇说明书及后续的权利要求书中所提及的“包括”和“包含”为一开放式的用语,故应解释成“包含但不限定于”。以外,“连接”一词在此系包含任何直接及间接的电性连接手段。间接的电性连接手段包括通过其它装置进行连接。
图1是本发明ios终端的远程显示系统的结构示意图,所述ios终端的远程显示系统100包括有依次通信连接的至少一个客户端10、节点管理端20和至少一个ios终端30,其中:
客户端10,用于向节点管理端20发送屏幕显示指令。所述客户端10优选为浏览器。
节点管理端20优选安装于计算机设备,进一步包括:
指令控制模块21,用于根据客户端10发来的屏幕显示指令,向至少一个ios终端30发送开始录屏指令。优选的是,指令控制模块21用于收到屏幕显示指令后,建立与至少一个ios终端30的socket(套接字)连接,并向ios终端30发送开始录屏指令。
数据处理模块22,用于将ios终端30推送的录屏数据发送给客户端10。优选的是,数据处理模块22用于将ios终端30推送的编码后的屏幕数据转换成帧数据,并发送给客户端10。
ios终端30,安装有基于replaykit2框架的录屏程序,用于根据开始录屏指令,通过录屏程序获取屏幕数据并推送给节点管理端20。所述屏幕数据包括音频流数据、视频流数据等。使用replaykit2框架获取屏幕数据,需要实现一个宿主app(即录屏程序),该录屏程序集成广播上传扩展(broadcastuploadextension),所述广播上传扩展用于接收屏幕的图像和音频数据,进行直播集成。ios终端30可以是ios手机或ios平板电脑等。
优选的是,所述ios终端的远程显示系统100包括有依次通信连接的至少一个客户端10、web服务器40、代理端50、节点管理端20和至少一个ios终端30,即客户端10通过web服务器40、代理端50与节点管理端20通信连接。
所述节点管理端20的数据处理模块22,用于将ios终端30推送的编码后的屏幕数据转换成帧数据,发送给代理端50。
所述代理端50,用于将帧数据发送给web服务器40。
所述web服务器40,用于将帧数据通过websocket方式发送给客户端10显示。客户端10优选为浏览器,浏览器进行渲染,显示图像。
replaykit是ios10新增的视频流实时直播功能。ios11增强为replaykit2,进一步提升了replaykit的易用性和通用性,并且可以对整个ios终端实现屏幕录制,而replaykit只能对支持replaykit功能的单个app录屏。因此本发明使用replaykit2实现视频流推送功能。
本发明提出基于replaykit2的ios终端的远程显示系统100,用于客户端10远程显示ios终端30的屏幕内容,该远程显示系统100利用了所述ios终端30提供的屏幕录制和屏幕内容直播的权限,将所述ios终端30的屏幕内容流畅的远程显示在客户端10。通过设置节点管理端20(nodemanager)作为所述客户端10和所述ios终端30之间进行信息交互的中介,用于管理多个所述ios终端30,节点管理端20优选设置在一台计算机设备上;通过节点管理端20可以获取多个与其连接的所述ios终端30的屏幕数据,从而可实现一个节点管理端20对多个连接的ios终端30截屏,同时保证客户端10流畅显示的ios终端30的屏幕画面。
本发明ios终端的远程显示系统100优选应用于app的真机测试。
图2是本发明优选ios终端的远程显示系统的结构示意图,所述ios终端的远程显示系统100包括有依次通信连接的至少一个客户端10、节点管理端20和至少一个ios终端30,其中:
客户端10,用于向节点管理端20发送屏幕显示指令。所述客户端10优选为浏览器。
节点管理端20优选安装于计算机设备,进一步包括:
指令控制模块21,用于根据屏幕显示指令,向至少一个ios终端30发送开始录屏指令。优选的是,指令控制模块21用于收到屏幕显示指令后,建立与至少一个ios终端30的socket连接,并向ios终端30发送开始录屏指令。
优选的是,节点管理端20新增第一端口和第二端口,第一端口为对外提供的socket端口,第二端口映射ios终端30的第三端口。ios终端30的广播上传扩展创建gcdasyncsocket对象,绑定第三端口,等待建立socket连接。当存在多个ios终端30连接时,则需要多个第二端口映射到ios终端30的第三端口。
数据处理模块22,用于将ios终端30推送的录屏数据发送给客户端10。优选的是,数据处理模块22用于将ios终端30推送的编码后的屏幕数据转换成帧数据,并发送给客户端10。
ios终端30,安装有基于replaykit2框架的录屏程序,用于根据开始录屏指令,通过录屏程序获取屏幕数据并推送给节点管理端20。优选的是,ios终端30还包括有:
录屏模块31,用于收到开始录屏指令后,通过录屏程序获取屏幕数据。
编码模块32,用于对获取的屏幕数据进行编码。优选的是,编码模块32用于通过videotoolbox工具对屏幕数据进行h.264编码。h.264编码具有码率低、图像质量高等优势。
推送模块33,用于将编码后的屏幕数据通过异步socket推送给节点管理端20。异步socket主要是为了提高图像数据处理和传输速度。
在本发明一优选实施例中,所述节点管理端20还包括有:
第一启动模块23,用于在客户端10向节点管理端20发送屏幕显示指令之前,向ios终端30发送启动服务指令。更好的是,第一启动模块23用于启动service_scrcpy函数,通过weddriveragent框架向ios终端30发送启动服务指令。
所述ios终端30还包括有:
第二启动模块34,用于根据启动服务指令,启动录屏程序所集成的广播上传扩展,通过rpbroadcastcontroller函数以回调方式将屏幕数据发送给processsamplebuffer函数。
录屏程序作为宿主app,集成了广播上传扩展,负责接收
rpbroadcastcontroller传过来的音视频流数据等屏幕数据。更好的是,第二启动模块34用于根据启动服务指令启动录屏程序,并将录屏程序切换到后台。
ios终端30的录屏模块31,用于收到开始录屏指令后,通过录屏程序获取processsamplebuffer函数的屏幕数据,并交由编码模块32进行编码。本发明在没有收到客户端10的屏幕显示指令之前,无需处理processsamplebuffer中的屏幕数据,避免占用系统资源。
在本发明另一优选实施例中,所述节点管理端20还包括有:
第一停止模块24,用于收到客户端10发送的停止显示指令后,关闭与至少一个ios终端30的socket连接,并向ios终端30发送停止录屏指令。
所述ios终端30还包括有:
第二停止模块35,用于根据停止录屏指令,停止处理processsamplebuffer函数的屏幕数据。当客户端10断开连接时,不再处理processsamplebuffer中的屏幕数据。等待下一次连接。
节点管理端20的指令控制模块21用于在service_scrcpy函数收到屏幕显示指令后,建立与至少一个ios终端30的socket连接,并向ios终端30发送开始录屏指令。
优选的是,节点管理端20的数据处理模块22的还包括:
数据接收子模块,用于通过节点管理端20的service_scrcpy函数的数据接收线程,接收编码后的屏幕数据,并存入数据缓存。
数据转化子模块,用于通过节点管理端20的service_scrcpy函数的数据处理线程,从数据缓存中取出数据,转换成nal(networkabstractionlayer,网络提取层)单元(原始h.264帧),并存入帧缓存。
数据推送子模块,用于通过节点管理端20的service_scrcpy函数的数据推送线程,从帧缓存中取出帧数据发送给客户端10。
如图2所示的本发明又一优选实施例中,所述ios终端的远程显示系统100包括有依次通信连接的至少一个客户端10、web服务器40、代理端50、节点管理端20和至少一个ios终端30,即客户端10通过web服务器40、代理端50与节点管理端20通信连接。
所述节点管理端20的数据处理模块22,用于将ios终端30推送的编码后的屏幕数据转换成帧数据,发送给代理端50。
所述代理端50,用于将帧数据发送给web服务器40。
所述web服务器40,用于将帧数据通过websocket方式发送给客户端10显示。客户端10优选为浏览器,浏览器进行渲染,显示图像。
本发明主要涉及两个部分:(1)ios终端的录屏app,优选使用objectc实现。(2)节点管理端(nodemanager),主要负责ios终端的管理和通信,优选使用python实现。为了更好的理解本发明的技术方案,下面分别描述录屏app、节点管理端(nodemanager)的具体实施例。
(一)录屏app的具体实施例。
(1)实现宿主app(即录屏app),命名为replay,添加broadcaseextensiontemplate,系统自动命名为replayex。
使用replaykit2获取屏幕数据,需要实现一个宿主app,该app集成广播上传扩展(broadcastuploadextension),负责接收rpbroadcastcontroller传过来的音视频流数据等屏幕数据。
(2)用户点击开始录屏后,系统会启动broadcastuploadextension,rpbroadcastcontroller会将音视频数据通过回调的方式,传给extension的processsamplebuffer函数。实际应用时,可在该函数中对获取的数据进行编码推送等处理。
(3)在extension中创建gcdasyncsocket对象,绑定8080端口(即第三端口),等待客户端建立socket连接。
(4)没有收到客户端连接请求之前,无需处理processsamplebuffer中的音视频数据,避免占用系统资源。
(5)当收到客户端的连接后,采用videotoolbox对原始图像数据进行h.264编码。
(6)编码完成后,将数据通过异步socket方式,发送至客户端。异步socket主要是为了提高图像数据处理和传输速度。
(7)当客户端断开连接时,不再处理processsamplebuffer中的音视频数据。等待下一次连接。
(二)节点管理端(nodemanager)的具体实施例。
nodemanager主要负责管理连接的ios终端,是ios终端与web服务之间进行信息交互的中介。nodemanager安装于pc端。本发明主要涉及的是nodemanager中的service_scrcpy,负责接收ios终端的h.264流数据,转换成帧数据,并往代理客户端推送。
如图3所示的实施例中,完整的视频流推送流程如下:
(1)节点管理端启动service_scrcpy,通过weddriveragent驱动ios终端iphone操作,打开ios终端的replayapp(即录屏app),点击开始直播,将replayapp切换到后台。
(2)新增端口映射:iproxy808012000。其中8080(即第一端口)为replayex对外提供的socket端口,12000(即第二端口)为pc映射到ios终端的8080端口,多个ios终端连接时,需要多个pc端口映射到ios终端的8080端口。
(3)service_scrcpy接收到客户端start消息,与ios终端建立socket连接。
本实施例中,客户端通过代理端zmqiproxy与节点管理端通信连接。
(4)ios终端接收到socket连接后,开始处理和推送视频数据。
(5)service_scrcpy数据接收线程,接收ios终端的视频流数据,并存入视频流缓存。
(6)service_scrcpy数据处理线程,从视频流缓存中取出数据,转换成nal单元(原始h.264帧),并存入帧缓存。
(7)service_scrcpy数据推送线程,从帧缓存取出数据,通过消息队列,发送给服务器,服务器再将数据通过websocket的方式发送给远程浏览器(即客户端)。浏览器进行渲染,显示图像。
(8)service_scrcpy接收到关闭ios终端视频流服务的消息,关闭与replayex的socket连接。ios终端停止录屏。
图4是本发明ios终端的远程显示方法的流程图,应用于如图1或图2所示ios终端的远程显示系统100,所述方法包括步骤有:
步骤s401,在ios终端30中安装基于replaykit2框架的录屏程序。
所述客户端10优选为浏览器。更好的是,客户端10通过web服务器、代理端与节点管理端2020通信连接。使用replaykit2框架获取屏幕数据,需要实现一个宿主app(即录屏程序),该录屏程序集成广播上传扩展(broadcastuploadextension),所述广播上传扩展用于接收屏幕的图像和音频数据,进行直播集成。ios终端30可以是ios手机或ios平板电脑等。
步骤s402,客户端10向节点管理端20发送屏幕显示指令。
本步骤优选的是,节点管理端20收到屏幕显示指令后,建立与至少一个ios终端30的socket连接,并向ios终端30发送开始录屏指令。节点管理端20优选安装于计算机设备中。客户端10优选为浏览器。
步骤s403,节点管理端20根据屏幕显示指令,向至少一个ios终端30发送开始录屏指令。
本步骤优选进一步包括,ios终端30收到开始录屏指令后,通过录屏程序获取屏幕数据;ios终端30对获取的屏幕数据进行编码;ios终端30将编码后的屏幕数据通过异步socket推送给节点管理端20。
步骤s404,ios终端30根据开始录屏指令,通过录屏程序获取屏幕数据。
ios终端30安装有基于replaykit2框架的录屏程序,根据开始录屏指令,通过录屏程序获取屏幕数据并推送给节点管理端20。所述屏幕数据包括音频流数据、视频流数据等。
步骤s405,节点管理端20将录屏数据发送给客户端10。
本步骤优选的是,节点管理端20将编码后的屏幕数据转换成帧数据,并发送给客户端10。
本发明提出基于replaykit2的ios终端的远程显示非法,用于客户端10远程显示ios终端30的屏幕内容,利用了所述ios终端30提供的屏幕录制和屏幕内容直播的权限,将ios终端30的屏幕内容流畅的远程显示在客户端10。通过设置节点管理端20(nodemanager)作为所述客户端10和所述ios终端30之间进行信息交互的中介,用于管理多个所述ios终端30,节点管理端20优选设置在一台计算机设备上;通过节点管理端20可以获取多个与其连接的所述ios终端30的屏幕数据,从而可实现一个节点管理端20对多个连接的ios终端30截屏,同时保证客户端流10畅显示的ios终端30的屏幕画面。
本发明ios终端的远程显示方法优选应用于app的真机测试。
图5是本发明优选ios终端的远程显示方法的流程图,应用于如图2所示ios终端的远程显示系统100,所述方法包括步骤有:
步骤s501,在ios终端30中安装基于replaykit2框架的录屏程序。
步骤s502,节点管理端20向ios终端30发送启动服务指令。
优选的是,节点管理端20启动service_scrcpy函数,通过weddriveragent框架向ios终端30发送启动服务指令。
步骤s503,ios终端30根据启动服务指令启动录屏程序。
优选的是,录屏程序启动后,将录屏程序切换到后台。
更好的是,ios终端30根据启动服务指令,启动录屏程序所集成的广播上传扩展,通过rpbroadcastcontroller函数以回调方式将屏幕数据发送给processsamplebuffer函数。
步骤s504,客户端10向节点管理端20发送屏幕显示指令。
步骤s505,节点管理端20根据屏幕显示指令,向至少一个ios终端30发送开始录屏指令。
优选的是,节点管理端20的service_scrcpy函数收到屏幕显示指令后,建立与至少一个ios终端30的socket连接,并向ios终端30发送开始录屏指令。
优选的是,节点管理端20新增第一端口和第二端口,第一端口为对外提供的socket端口,第二端口映射ios终端30的第三端口。ios终端30的广播上传扩展创建gcdasyncsocket对象,绑定第三端口,等待建立socket连接。
步骤s506,ios终端30收到开始录屏指令后,通过录屏程序获取屏幕数据。
优选的是,ios终端30收到开始录屏指令后,通过录屏程序获取processsamplebuffer函数的屏幕数据并进行编码。
步骤s507,ios终端30对获取的屏幕数据进行编码。
优选的是,ios终端30通过videotoolbox工具对屏幕数据进行h.264编码。h.264编码具有码率低、图像质量高等优势。
步骤s508,ios终端30将编码后的屏幕数据通过异步socket推送给节点管理端20。
异步socket主要是为了提高图像数据处理和传输速度。
步骤s509,节点管理端20将编码后的屏幕数据转换成帧数据,并发送给客户端10。
本步骤优选进一步包括:
通过节点管理端20的service_scrcpy函数的数据接收线程,接收编码后的屏幕数据,并存入数据缓存。
通过节点管理端20的service_scrcpy函数的数据处理线程,从数据缓存中取出数据,转换成nal单元(原始h.264帧),并存入帧缓存。
通过节点管理端20的service_scrcpy函数的数据推送线程,从帧缓存中取出帧数据发送给客户端10。
客户端10优选为浏览器,浏览器进行渲染,显示图像。
优选的是,客户端10通过web服务器、代理端与节点管理端20通信连接。
本步骤可进一步包括:
节点管理端20将编码后的屏幕数据转换成帧数据,发送给代理端。
代理端将帧数据发送给web服务器。
web服务器将帧数据通过websocket方式发送给客户端10显示。
步骤s510,客户端10向节点管理端20发送停止显示指令。
步骤s511,节点管理端20根据停止显示指令,关闭与至少一个ios终端30的socket连接,并向ios终端30发送停止录屏指令。
步骤s512,ios终端30根据停止录屏指令,停止录屏。
优选的是,ios终端30停止处理processsamplebuffer函数的屏幕数据。
图6是本发明节点管理端20的示意图,所述节点管理端20应用于包括依次通信连接的至少一个客户端10、节点管理端20和至少一个ios终端30的ios终端的远程显示系统,ios终端30中安装有基于replaykit2框架的录屏程序;节点管理端20包括有:
指令控制模块21,用于节点管理端20收到客户端10发送的屏幕显示指令后,向至少一个ios终端30发送开始录屏指令,指令ios终端30通过录屏程序获取屏幕数据并推送给节点管理端20。所述客户端10优选为浏览器。
数据处理模块22,用于将ios终端30推送的录屏数据发送给客户端10。
图7是本发明基于节点管理端20的ios终端的远程显示方法的流程图,所述ios终端的远程显示方法,其特征在于,应用于包括依次通信连接的至少一个客户端10、节点管理端20和至少一个ios终端30的ios终端的远程显示系统,ios终端30中安装有基于replaykit2框架的录屏程序;所述远程显示方法包括步骤有:
步骤s701,节点管理端20收到客户端10发送的屏幕显示指令后,向至少一个ios终端30发送开始录屏指令,指令ios终端30通过录屏程序获取屏幕数据并推送给节点管理端20。
优选的是,节点管理端20收到屏幕显示指令后,建立与至少一个ios终端30的socket连接,并向ios终端30发送开始录屏指令,指令ios终端30的录屏程序获取屏幕数据并进行编码,并将编码后的屏幕数据通过异步socket推送给节点管理端20。更好的是,ios终端30通过videotoolbox工具对屏幕数据进行h.264编码。h.264编码具有码率低、图像质量高等优势。
步骤s708,节点管理端20将ios终端30推送的录屏数据发送给客户端10。
本步骤优选进一步包括:
节点管理端20的指令控制模块用于收到屏幕显示指令后,建立与至少一个ios终端30的socket连接,并向ios终端30发送开始录屏指令,指令ios终端30的录屏程序获取屏幕数据并进行编码,并将编码后的屏幕数据通过异步socket推送给节点管理端20。
节点管理端20的数据处理模块用于将ios终端30推送的编码后的屏幕数据转换成帧数据,并发送给客户端10。
本发明还提供一种存储介质,用于存储如图4~图5所述任意一种ios终端的远程显示方法的计算机程序。例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的存储介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输和/或被存储在根据程序指令运行的计算机设备的存储介质中。在此,根据本申请的一个实施例包括一个如图8所示的计算机设备400,所述计算机设备400优选包括用于存储计算机程序的存储介质200和用于执行计算机程序的处理器300,其中,当该计算机程序被该处理器300执行时,触发该计算机设备400执行基于前述多个实施例中的方法和/或技术方案。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
根据本发明的方法可以作为计算机实现方法在计算机上实现、或者在专用硬件中实现、或以两者的组合的方式实现。用于根据本发明的方法的可执行代码或其部分可以存储在计算机程序产品上。计算机程序产品的示例包括存储器设备、光学存储设备、集成电路、服务器、在线软件等。优选地,计算机程序产品包括存储在计算机可读介质上以便当所述程序产品在计算机上执行时执行根据本发明的方法的非临时程序代码部件。
在优选实施例中,计算机程序包括适合于当计算机程序在计算机上运行时执行根据本发明的方法的所有步骤的计算机程序代码部件。优选地,在计算机可读介质上体现计算机程序。
综上所述,本发明通过在ios终端中安装基于replaykit2框架的录屏程序,客户端向节点管理端发送屏幕显示指令后,节点管理端指令ios终端通过录屏程序获取屏幕数据,再由节点管理端将录屏数据发送给客户端显示。本发明基于replaykit2实现ios终端的远程显示,由于replaykit2的易用性和通用性,并且可以对整个ios终端实现屏幕录制,因此本发明可实现一台计算机对多台连接的ios终端截屏,同时保证客户端流畅显示屏幕画面,具有清晰度高,画面显示流畅,且视频流所需带宽小的优点。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。