投屏方法及相关设备与流程

文档序号:31507854发布日期:2022-09-14 10:37阅读:362来源:国知局
投屏方法及相关设备与流程

1.本公开涉及互联网技术领域,尤其涉及一种投屏方法、投屏装置、电子设备、存储介质及程序产品。


背景技术:

2.投屏已经成为目前生活、学习以及工作中分享信息的重要手段,例如,企业内部可以通过投屏系统进行企业会议;学校可以通过投屏系统进行交互式在线教学等等。通过投屏可以将个人电脑、平板或移动终端等终端设备采集的屏幕流通过网络传输到其他终端,并显示在与这些终端连接的例如电视机或显示器等显示设备上。可以理解,出于实时性和互动性的需要,投屏过程中的时延,特别是首帧时延,是影响使用者体验的重要指标之一。因此,如何尽可能地降低投屏过程的首帧时延,是当前需要解决的关键问题之一。


技术实现要素:

3.有鉴于此,本公开的实施例提供一种投屏方法,可以减小建立投屏过程的时延,也就是投屏首帧时延,从而提高2s投屏成功率。
4.根据本公开的一些实施例,上述方法可以包括:收到会议信息后,视频会议客户端依据所述会议信息初始化一个实时通信(rtc)引擎,并加入与会议信息中会议标识对应的rtc房间;在接收到rtc客户端回调的用户加入事件后,所述视频会议客户端创建视图,并创建渲染器;在接收到所述rtc客户端回调的流加入事件后,所述视频会议客户端依据其中的屏幕流标识将屏幕流与创建的视图进行绑定,并将所述渲染器设置到所述rtc客户端;所述视频会议客户端刷新共享屏幕,将绑定过屏幕流的视图显示在屏幕上;在所述rtc客户端回调出帧之后,所述视频会议客户端进行上屏渲染,得到显示在显示设备上的首帧图像。
5.基于上述方法,本公开的实施例提供了一种投屏装置,包括:
6.第一会议设置模块,用于在收到会议信息后,依据所述会议信息初始化一个实时通信rtc引擎,并加入与会议信息中会议标识对应的rtc房间;
7.视图及渲染器设置模块,用于在接收到rtc客户端回调的用户加入事件后,创建视图,并创建渲染器;
8.绑定模块,用于在接收到所述rtc客户端回调的流加入事件后,依据其中的屏幕流标识将屏幕流与创建的视图进行绑定,并将所述渲染器设置到所述rtc客户端;
9.第一屏幕刷新模块,用于刷新共享屏幕,将绑定过屏幕流的视图显示在屏幕上;以及
10.渲染模块,用于在所述rtc客户端回调出帧之后,所述视频会议客户端进行上屏渲染,得到显示在显示设备上的首帧图像。
11.此外,本公开的实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述投屏方法。
12.本公开的实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可
读存储介质存储计算机指令,所述计算机指令用于使计算机执行上述投屏方法。
13.本公开的实施例还提供了一种计算机程序产品,包括计算机程序指令,当所述计算机程序指令在计算机上运行时,使得计算机执行上述投屏方法。
14.通过上述投屏方法或者投屏装置,在建立投屏过程中,视频会议客户端创建视图,创建渲染器以及将创建的视图显示在屏幕上的操作可以不依赖于rtc客户端的首帧回调,而可以提前执行,也即与rtc客户端的内部操作以及首包事件等操作并行执行,从而大大地压缩了投屏过程从初始化rtc引擎到首帧渲染完毕的时间,降低了建立投屏过程的时延,或者说首帧时延,从而大大提高了2s投屏成功率。
附图说明
15.为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
16.图1显示了本公开一个实施例所述的用于投屏的系统100的内部结构示意图;
17.图2显示了现有建立投屏过程的交互示意图;
18.图3显示了现有在建立投屏的过程中第二终端104内部的具体操作流程;
19.图4显示了本公开一些实施例所述投屏方法的内部交互示意图;
20.图5显示了本公开另一些实施例所述投屏方法的内部交互示意图;
21.图6显示了本公开一些实施例所述投屏装置的内部结构示意图;
22.图7显示了本公开另一些实施例所述投屏装置的内部结构示意图;以及
23.图8示出了本公开一些实施例所述的一种更为具体的电子设备硬件结构示意图。
具体实施方式
24.为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
25.需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
26.如前所述,如何尽可能地降低投屏过程中的时延是当前需要解决的关键问题之一。为此,本技术的实施例提供一种投屏方法,可以有效降低建立投屏过程的时延。
27.在描述本技术实施例之前先对本技术实施例的描述中即将出现的部分名词或者术语进行如下简要说明:
28.1.实时通信(real-time communications,rtc),狭义上一般将rtc称为实时音视
频,其典型的应用为直播连麦、实时音视频通话、视频会议、交互式在线教育等等。rtc从功能流程上来说,一般包含音视频采集端(采集、前处理以及编码)、传输端(音视频采集端至服务器、服务器之间、服务器至播放端的传输)、音视频播放端(解码、缓冲以及渲染)等很多环节。投屏也是rtc的一种应用。在投屏业务中,音视频采集端一般是指投屏操作的发起端,音视频播放端一般是指投屏内容的显示端。
29.2.rtc引擎,是指基于rtc技术建立的音视频引擎,负责进行媒体流的编解码和媒体流传输。在投屏业务中,分别在投屏端和播放端建立的rtc引擎主要负责进行投屏端和播放端屏幕流的编解码和屏幕流传输。
30.3.首帧时延,也可称为建立投屏过程的时延,通常指从投屏端请求投屏开始直至播放端渲染完成第一个图像帧也就是渲染完成首帧图像的时间间隔。
31.4.2s投屏成功率,在投屏业务中是指建立投屏过程的时延小于等于2秒的概率,也就是指从投屏端请求投屏开始2秒钟之内投屏内容的播放端完成首帧图像渲染并显示的概率。2s投屏成功率是目前投屏业务投屏体验的重要指标之一。很明显,2s投屏成功率与建立投屏过程的时延有关,其中,建立投屏过程的时延越小,2s投屏成功率就越高。
32.图1显示了本技术一个实施例所述的用于投屏的系统100的内部结构示意图。如图1所示,上述系统100可以包括:用于采集并提供待投放屏幕流的第一终端102、用于接收待投放屏幕流的第二终端104、用于播放待投放屏幕流的显示设备106、用于在第一终端102以及第二终端104之间建立视频会议的视频会议服务端108以及用于在第一终端102以及第二终端104之间传输屏幕流的rtc服务端110。
33.其中,上述第一终端102通常可以是计算机或个人电脑(pc)、平板电脑或移动终端等终端设备。上述第二终端104可以是投屏盒子等终端设备。上述显示设备106可以是显示器或者电视机。上述第二终端104和上述显示设备106可以是独立的两个设备,例如,第二终端104和显示设备106可以通过hdmi线缆连接。此外,上述第二终端104和上述显示设备106也可以是集成在一起的一个设备。此外,第一终端102与视频会议服务端108之间、视频会议服务端108与第二终端104之间、第一终端102与rtc服务端110之间以及rtc服务端110与第二终端104之间可以通过网络连接。其中,上述网络可以是局域网也可以是互联网。
34.图2显示了现有建立投屏过程的交互示意图。如图2所示,现有的建立投屏过程可以包括如下交互过程。
35.在步骤202,第一终端102发送投屏请求到视频会议服务端108;其中,上述投屏请求中包括投屏码。
36.在本公开的实施例中,上述投屏码与第二终端104相关联。在实际的应用中,如果投屏系统100中包括多个第二终端104,则每个第二终端104将分别对应一个投屏码。在这种情况下,第一终端102的用户可以在第一终端102上输入或选择某个第二终端104对应的投屏码来确定即将用于接收和处理自身屏幕流的第二终端104。在接收到用户输入或者选择的投屏码之后,第一终端102将发送携带有上述投屏码的投屏请求至与其通过网络连接的视频会议服务端108。
37.在实际的应用中,第一终端102上可以安装有视频会议客户端。上述视频会议客户端可以为用户提供预约视频会议、参加视频会议、共享屏幕以及投屏等功能。具体地,在启动了安装在第一终端102上的视频会议客户端后,用户可以直接点击其中的会议室投屏选
项,以直接选择加入某个视频会议并同时实现投屏。此时,视频会议客户端将在界面上显示一个输入框请用户输入投屏码。在收到用户输入的投屏码之后,视频会议客户端将发送携带有投屏码的投屏请求至视频会议服务端108,以选择加入该投屏码所对应第二终端104所在的视频会议并实现投屏。
38.此外,为了实现屏幕流的传输,上述第一终端102上还将安装有rtc客户端,例如,在本公开的一些实施例中,上述rtc客户端可以是rtc软件开发工具包(sdk)。上述rtc客户端用于建立rtc引擎以实现屏幕流的编解码和传输。在用户点击视频会议客户端中的会议室投屏选项后,视频会议客户端还将调用rtc客户端提供的初始化rtc引擎的方法来初始化一个rtc引擎。
39.需要说明的是,相对应的,为了实现屏幕流的传输,上述第二终端104也将安装有相应的视频会议客户端和rtc客户端。
40.在步骤204,在收到投屏请求之后,视频会议服务端108根据上述投屏请求中的投屏码确定对应的第二终端104,并生成会议信息。
41.在本公开的实施例中,由于每个投屏码均与一个第二终端104相关联,因此,上述视频会议服务端108可以根据上述投屏请求中的投屏码确定本次投屏请求对应的第二终端104。
42.在本公开的实施例中,上述会议信息可以包括:会议标识(meeting id)以及参会人信息(包括:参会人标识以及姓名或名称等)。在本公开的另一些实施例中,上述会议信息还可以包括:会议状态信息(例如,结束或者开始)以及会议设置项等等。
43.在步骤206,视频会议服务端108将生成的会议信息分别推送至上述第一终端102和确定的第二终端104。
44.在步骤208,收到上述会议信息之后,上述第一终端102和上述第二终端104分别根据收到的会议信息加入本次视频会议对应的rtc房间。
45.在本公开的实施例中,上述第一终端102中的视频会议客户端可以先从上述会议信息中获取会议标识,然后调用rtc客户端提供的加入rtc房间的方法(joinchannel)加入与上述会议标识对应的rtc房间。如前所述,上述第一终端102侧的rtc引擎可以在用户点击视频会议客户端中的会议室投屏选项后就预先初始化完成。具体方法包括:响应于用户点击视频会议客户端中的会议室投屏选项,视频会议客户端调用rtc客户端提供的初始化rtc引擎的方法来初始化一个rtc引擎。
46.在本公开的实施例中,上述第二终端104中的视频会议客户端则需要先调用自身的rtc客户端提供的初始化rtc引擎的方法来初始化一个rtc引擎;然后,再从上述会议信息中获取会议标识,并调用rtc客户端提供的加入rtc房间的方法加入与上述会议标识对应的rtc房间。
47.可见,上述第一终端102和第二终端104将加入同一个rtc房间。需要说明的是,上述描述仅是以一个第二终端104为例进行的说明,如果视频会议中有多个第二终端104,则在上述步骤中,每个第二终端104均将执行上述操作,也就是说,视频会议的所有参与者都将加入到同一个rtc房间内,从而通过rtc服务端实现屏幕流从第一终端102(投屏端)到所有第二终端104(播放端)之间的传输。
48.在步骤210,第一终端102开始屏幕采集得到屏幕的首帧图像,对上述首帧图像进
行编码,并将经过编码得到的数据包发送至rtc服务端110。
49.在本公开的实施例中,上述数据包通常是实时传输协议(rtp)数据包。
50.此外,需要说明的是,在执行完上述步骤之后,上述第一终端102还将继续进行屏幕采集、图像编码和数据包发送的操作,直至投屏结束。
51.在步骤212,上述rtc服务端110将接收的数据包转发至上述第二终端104。
52.在步骤214,上述第二终端104对接收的数据包进行解码得到上述首帧图像,对上述首帧图像进行渲染,并将渲染后的图像发送至显示设备106。
53.在步骤216,上述显示设备106显示接收的图像。
54.可见,上述步骤210至步骤214描述的是第一终端102和第二终端104之间通过rtc服务端110传输屏幕流的情况。这种情况可以认为终端之间的投屏连接状态是点对服务器(p2s)的,也即终端之间的屏幕流是通过rtc服务器110转发的。需要说明的是,本公开的实施例并不限于上述一种投屏连接状态。在另一些实施例中,第一终端102和第二终端104之间还可以先通过rtc服务端110建立直接连接的传输信道,然后再通过直接连接的传输信道传输屏幕流。也就是说,此时屏幕流的传输并不需要rtc服务端110的中转。这种情况可以认为投屏连接状态是端到端(p2p)的。也就是说,在本公开的实施例中,终端之间的投屏连接状态主要包括p2p以及p2s两种。p2p的方式通常适用于第一终端102和第二终端104在同一个局域网的情况下,例如在同一个会议室中的情况。此时,在上述步骤212,第一终端102经过屏幕采集、编码等操作得到数据包后,将直接将数据包通过建立的直接连接的传输信道发送至第二终端104。
55.至此,第二终端104完成了对第一终端102采集的首帧图像的渲染以及显示。因此,可以看出,建立投屏过程的时延就是完成上述步骤202-214的耗时。
56.具体地,从上述流程可以看出,在建立投屏的过程中,由第二终端104的操作所造成的时延主要包括:执行上述步骤208以及执行上述步骤214的耗时,也即建立rtc引擎过程的耗时、等待首个数据包(简称为首包)以及接收到首包后处理过程的耗时。因此,从第二终端104的角度来看,如果可以尽可能减少上述步骤208或步骤214的耗时即可以减小建立投屏过程的时延,从而提高2s投屏成功率。
57.图3显示了本公开的实施例所述的在建立投屏的过程中第二终端104内部的具体操作流程。其中,如前所述,第二终端104内部包括视频会议客户端以及rtc客户端。图3所示的建立投屏的过程主要包括如下步骤。
58.在步骤302,视频会议客户端在从视频会议服务端108收到会议信息后,调用rtc客户端提供的初始化rtc引擎的方法,初始化一个rtc引擎。
59.由于建立的rtc引擎具有对应的rtc环境属性(vendor type),因此,在本公开的实施例中,在收到会议信息之后,视频会议客户端将先从会议信息中提取rtc环境属性,然后依据提取的rtc环境属性调用rtc客户端提供的初始化rtc引擎的方法初始化一个rtc引擎。
60.此外,在rtc引擎初始化完成后,视频会议客户端可以进一步调用rtc客户端提供的配置会议设置项方法进行会议设置项的设置。
61.在本公开的一些实施例中,上述会议设置项的设置包括设置rtc房间属性(channelprofile)以及解码模式(decodermode)等等。
62.在步骤304,视频会议客户端调用rtc客户端提供的加入rtc房间的方法加入与会
议信息中会议标识对应的rtc房间。
63.在步骤306,在接收到rtc客户端回调的首帧事件后,视频会议客户端创建视图,将订阅的屏幕流与视图进行绑定,创建渲染器以及将创建的视图显示在屏幕上。
64.在步骤308,视频会议客户端将上述创建的渲染器设置到rtc客户端。
65.在步骤310,在rtc客户端回调出帧之后,视频会议客户端进行上屏渲染,得到可以显示在显示设备上的首帧图像。
66.针对上述图3所示的过程,在研发过程中发现,在上述步骤306中,视频会议客户端执行的创建视图,创建渲染器以及将创建的视图显示在屏幕上的操作实际上并不依赖于rtc客户端回调的首帧事件,而目前这些操作都是要等到rtc客户端回调首帧事件后才执行的,无疑会增加建立投屏过程的时延。
67.基于此,本公开的实施例给出了一种投屏方法,该投屏方法由第二终端104执行,可以有效减少上述建立投屏过程的时延。
68.本公开实施例所述的投屏方法的具体实现过程可以参考图4,包括如下步骤:
69.在步骤402,在从视频会议服务端108收到会议信息后,视频会议客户端初始化一个rtc引擎。
70.具体地,在本公开的实施例中,在从视频会议服务端108收到会议信息后,视频会议客户端可以调用rtc客户端提供的初始化rtc引擎的方法(init)初始化一个rtc引擎。
71.更进一步,在rtc引擎初始化完成后,视频会议客户端还可以进一步进行会议设置项的设置。
72.具体地,在本公开的实施例中,视频会议客户端可以调用rtc客户端提供的配置会议设置项方法(prejoinconfig)进行会议设置项的设置。如前所述,上述配置会议设置项可以包括设置rtc房间属性以及解码模式等等。
73.在步骤404,视频会议客户端加入与会议信息中会议标识对应的rtc房间。
74.具体地,在本公开的实施例中,视频会议客户端可以调用rtc客户端提供的加入rtc房间的方法(joinchannel)加入与会议信息中会议标识对应的rtc房间。
75.在步骤406,在接收到rtc客户端回调的用户加入事件(onuserjoined)后,视频会议客户端创建视图。
76.在本公开的实施例中,上述第二终端104还将包括一个rtc客户端封装(rtc sdk wrapper),上述rtc客户端封装主要用于提供rtc客户端之外的部分功能以及提供rtc客户端交互的能力。
77.在本步骤中,视频会议客户端可以调用rtc客户端封装提供的创建视图(createrenderview)的接口,由rtc客户端封装执行初始化渲染实例(init eglrender)的方法创建上述视图。需要说明的是,上述创建视图的接口封装了初始化渲染实例的方法。这样,在视频会议客户端调用rtc客户端封装提供的创建视图的接口时,rtc客户端封装就将执行初始化渲染实例的方法以创建上述视图。
78.需要说明的是,上述用户加入事件的回调通常是在视频会议客户端加入到rtc房间之后但是在接收到来自第一终端102的首包之前发生的事件,因此,要上述用户加入事件的回调要早于rtc客户端的首帧回调。
79.在步骤408,视频会议客户端创建渲染器。
80.在本公开的实施例中,视频会议客户端可以调用rtc客户端封装提供的建立远端屏幕(setupremotescreen)的接口,由rtc客户端封装执行创建渲染器的方法(createvideosink)创建上述渲染器。需要说明的是,上述建立远端屏幕的接口封装了创建渲染器的方法。这样,在视频会议客户端调用rtc客户端封装提供的建立远端屏幕的接口时,rtc客户端封装就将执行创建渲染器的方法以创建上述渲染器。
81.需要说明的是,在上述步骤408中,虽然创建了渲染器,但由于此时并没有收到屏幕流,因此该渲染器其实并没有设置成功。也就是说,rtc客户端封装的提供的建立远端屏幕的接口中并未封装将视图和屏幕流进行绑定的方法,也即未进行渲染器的注册,而只是提前创建了渲染器。
82.在步骤410,在接收到rtc客户端回调的流加入事件(onstreamadd)后,视频会议客户端依据其中的屏幕流标识将收到的屏幕流与已创建的视图进行绑定。
83.在步骤412,在接收到rtc客户端回调的流加入事件后,rtc客户端封装将创建的渲染器设置到rtc客户端。
84.在本公开的实施例中,在上述步骤412,rtc客户端封装将调用rtc客户端的设置渲染器的方法(setupremotescreenrender),将创建的渲染器设置到rtc客户端。
85.在步骤414,视频会议客户端刷新共享屏幕,将已绑定屏幕流的视图显示在屏幕上。
86.在步骤416,在rtc客户端回调出帧之后,视频会议客户端进行上屏渲染,得到可以显示在显示设备上的首帧图像。
87.在本公开的实施例中,在rtc客户端回调出帧,也即在接收到所述rtc客户端回调的屏幕流首帧之后,rtc客户端封装通过开放图形库(open gl)提供的渲染方法(swapbuffers)进行上述上屏渲染。具体地,上述建立远端屏幕的接口还可以进一步封装上述swapbuffers渲染方法。这样,在接收到所述rtc客户端回调的屏幕流首帧之后,rtc客户端封装可以直接通过开放图形库提供的swapbuffers渲染方法对上述屏幕流首帧进行上述上屏渲染。
88.由于在上述方法中第二终端104内部执行的渲染过程不依赖于rtc客户端的首帧回调,因此,在本公开的实施例中,可以将第一次rtc客户端回调出帧定义为首帧并进行埋点上报,从而可以更加准确确定首帧出图的时刻。
89.需要说明的是,为了向用户直观显示建立投屏过程正在进行中的状态,可以在上述步骤402,在从视频会议服务端108收到会议信息后,视频会议客户端可以在显示设备上显示加载中(loading)提示信息。进一步的,在上述步骤416,在rtc客户端回调出帧之后,视频会议客户端可以隐藏上述加载中(loading)提示信息。
90.可见,在上述的建立投屏过程中,视频会议客户端创建视图,创建渲染器以及将创建的视图显示在屏幕上的操作可以不依赖于rtc客户端的首帧回调,而可以提前执行,也即可以与rtc客户端的内部操作以及首包事件等操作并行执行,从而大大地压缩了第二终端104从初始化rtc引擎到首帧渲染完毕的时间,降低了建立投屏过程的时延,或者说首帧时延,从而大大提高了2s投屏成功率。
91.在本公开的另一些实施例中,为了进一步对投屏清晰度进行优化,根据第一终端102的不同,第二终端104可以差异化选择不同的渲染方式。
92.具体地,如果第二终端104的视频会议客户端根据会议信息确定上述第一终端102是计算机,例如pc,则可以通过rtc客户端的视频媒体解码模块(video mediacodec)直接完成屏幕流的解码及渲染操作。而如果确定第一终端102是移动终端,则屏幕流则存在角度信息,而由于rtc的视频媒体解码模块解码渲染不支持图像旋转,因此,无法使用rtc的视频媒体解码模块完成解码及渲染的操作,此时仍可以采用上述图4所述示的方法。
93.本公开实施例所述的通过rtc客户端的视频媒体解码模块完成屏幕流的解码及渲染操作的具体实现过程可以参考图5,包括如下步骤:
94.在步骤502,视频会议客户端在从视频会议服务端108收到会议信息后,调用rtc客户端提供的初始化rtc引擎的方法(init)初始化一个rtc引擎。
95.在本公开的实施例中,在上述步骤502,在初始化rtc引擎时,视频会议客户端需要进一步调用rtc客户端提供的屏幕流自动订阅方法(enablescreencastingautosub)关闭屏幕流自动订阅。
96.此外,视频会议客户端可以进一步在显示设备上显示加载中(loading)提示信息。
97.进一步,视频会议客户端还可以调用rtc客户端提供的配置会议设置项方法(prejoinconfig)进行会议设置项的设置。
98.在步骤504,视频会议客户端调用rtc客户端提供的加入rtc房间的方法加入与会议信息中会议标识对应的rtc房间。
99.在步骤506,视频会议客户端创建视图层组件(surfaceview)。
100.其中,在本公开的实施例中,上述surfaceview是一个组件,可用于在视图(view)层次结构中嵌入其他合成层。surfaceview采用与其他视图相同的布局参数,因此可以像对待其他任何视图一样对其进行操作,但是surfaceview的内容是透明的。
101.在本公开的实施例中,视频会议客户端可以根据接收的会议信息中的参会人标识拼接出流标识(streamid),并依据上述流标识调用rtc客户端封装的创建rtc视图层组件(creatertcrendersurfaceview)的接口,由rtc客户端封装调用操作系统例如安卓(android系统)的相应方法进行创建。操作系统创建成功后会回调视图层组件已创建消息(surfacecreated)向rtc客户端封装进行通知,之后再设置给rtc客户端。
102.在步骤508,在接收到rtc客户端回调的流加入事件(onstreamadd)后,视频会议客户端刷新共享屏幕。
103.在步骤510,响应于确定视图层组件已创建成功,视频会议客户端将创建的视图层组件以及上述流加入事件中的流标识设置到rtc客户端的视频媒体解码模块。
104.在本公开的实施例中,rtc客户端封装可以通过调用rtc客户端提供的设置视图层组件方法(setexternalsurface)将创建的视图层组件以及上述流标识设置到rtc客户端的视频媒体解码模块。具体地,上述创建rtc视图层组件的接口可以封装在收到流加入事件后rtc客户端封装调用rtc客户端提供的设置视图层组件方法的操作。这样,在接收到rtc客户端回调的流加入事件并确定视图层组件已创建成功时,rtc客户端封装就可以直接通过调用rtc客户端提供的设置视图层组件方法将创建的视图层组件以及上述流标识设置到rtc客户端的视频媒体解码模块。
105.在步骤512,视频会议客户端向rtc客户端订阅与上述流标识对应的屏幕流。
106.在本公开的实施例中,rtc客户端封装可以通过调用rtc客户端提供的流订阅方法
(subscribestream)订阅与上述流加入事件中的流标识对应的屏幕流。类似地,上述创建rtc视图层组件的接口还可以封装在收到流加入事件后rtc客户端封装调用rtc客户端提供的流订阅方法的操作。这样,在接收到rtc客户端回调的流加入事件并确定视图层组件已创建成功时,rtc客户端封装就可以直接通过调用rtc客户端提供的流订阅方法订阅与上述流加入事件中的流标识对应的屏幕流。
107.在步骤514,rtc客户端通过上述设置了视图层组件以及流标识的视频媒体解码模块完成上述屏幕流的首帧解码以及渲染,得到屏幕流首帧。
108.在步骤516,rtc客户端回调视图层组件首帧出帧方法将上述屏幕流首帧返回至视频会议客户端。
109.在步骤518,视频会议客户端调整视图比例,得到可以显示在显示设备上的首帧图像。
110.在本公开的实施例中,上述视图比例的调整可以依据显示装置显示界面的宽高比由rtc客户端封装执行调整视图比例方法(updatelayoutsize)实现视图比例的调整,以适配视频帧宽高比,避免显示拉伸。类似地,上述创建rtc视图层组件的接口还可以进一步封装在收到rtc客户端回调的屏幕流首帧之后,执行调整视图比例方法进行视图比例调整的操作。这样,在接收到rtc客户端回调的屏幕流首帧时,rtc客户端封装就可以直接执行调整视图比例方法进行视图比例的调整。
111.经过上述视图比例调整后,rtc客户端封装将首帧事件通过开始渲染(onbeginrender)回调进行通知。与图4类似的,此时,视频会议客户端可以隐藏上述加载中(loading)提示信息。
112.基于上述图4和图5所示的方法,在本公开的实施例中,上述投屏方法可以进一步包括:视频会议客户端在从视频会议服务端108收到会议信息后,根据会议信息中携带的第一终端102的信息判断第一终端102的类型,如果是移动终端,则执行图4所示的流程;如果是计算机,则执行后续图5所示的流程。
113.在上述图5所示的建立投屏过程中,视频会议客户端创建视图层组件,刷新共享屏幕,以及将创建的视图层组件以及流标识设置到rtc客户端的视频媒体解码模块的操作均不依赖于rtc客户端的首帧回调,而可以提前执行,也即可以与rtc客户端的内部操作以及首包事件等操作并行执行,从而大大地压缩了第二终端104从初始化rtc引擎到首帧渲染完毕的时间,降低了建立投屏过程的时延,或者说首帧时延,从而大大提高了2s投屏成功率。
114.通过多次实验可以发现,通过采用本公开实施例所述的投屏方法可以有效减小建立投屏过程的时延近300毫秒,2s投屏成功率可以从原来的37%左右上升至71%左右。
115.需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
116.对应上述投屏方法,本公开的实施例还公开了一种投屏装置。图6显示了本公开实施例所述的装置的内部结构。
117.如图6所示,该投屏装置可以包括:
118.第一会议设置模块602,用于在收到会议信息后,依据所述会议信息初始化一个实时通信rtc引擎,并加入与会议信息中会议标识对应的rtc房间;
119.视图及渲染器设置模块604,用于在接收到rtc客户端回调的用户加入事件后,创建视图,并创建渲染器;
120.绑定模块606,用于在接收到所述rtc客户端回调的流加入事件后,依据其中的屏幕流标识将屏幕流与创建的视图进行绑定,并将所述渲染器设置到所述rtc客户端;
121.第一屏幕刷新模块608,用于刷新共享屏幕,将已绑定屏幕流的视图显示在屏幕上;以及
122.渲染模块610,用于在所述rtc客户端回调出帧之后,所述视频会议客户端进行上屏渲染,得到显示在显示设备上的首帧图像。
123.对应上述投屏方法,本公开的实施例还公开了另一种投屏装置。图7显示了本公开实施例所述的装置的内部结构。
124.如图7所示,该投屏装置可以包括:上述会议设置模块602、视图及渲染器设置模块604、绑定模块606、刷新共享屏幕模块608以及渲染模块610。除了上述模块之外,上述投屏装置还可以包括:投屏端类型确定模块702以及第二会议设置模块712;视图层组件创建模块714;设置模块718;订阅模块720;以及视图比例调整模块722。
125.其中,投屏端类型确定模块702用于在收到会议信息后,根据所述会议信息确定第一终端的类型,响应于确定所述第一终端是移动终端,触发上述会议设置模块602、视图及渲染器设置模块604、绑定模块606、刷新共享屏幕模块608以及渲染模块610的操作;以及响应于确定所述第一终端是计算机,触发上述第二会议设置模块712;视图层组件创建模块714;设置模块718;订阅模块720;以及视图比例调整模块722操作。
126.具体地,上述第二会议设置模块712用于在收到会议信息后,依据所述会议信息初始化一个实时通信rtc引擎,并加入与会议信息中会议标识对应的rtc房间;
127.视图层组件创建模块714用于创建视图层组件;
128.第二屏幕刷新模块716用于在接收到所述rtc客户端回调的流加入事件后,刷新共享屏幕;
129.设置模块718用于响应于确定所述视图层组件已创建成功,将创建的视图层组件以及所述流加入事件中的流标识设置到所述rtc客户端的视频媒体解码模块;
130.订阅模块720用于向所述rtc客户端订阅与所述流标识对应的屏幕流;
131.视图比例调整模块722用于在接收到所述rtc客户端回调的屏幕流首帧后,调整视图比例,得到显示在显示设备上的首帧图像;其中,所述屏幕流首帧是由rtc客户端使用已设置所述平面视图以及所述流标识的视频媒体解码模块对所述屏幕流的首帧进行解码以及渲染后得到的。
132.上述各个模块的具体实现可以参考前述方法以及附图,在此不再重复说明。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
133.上述实施例的装置用于实现前述任一实施例中相应的投屏方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
134.基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种电子
设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的投屏方法。
135.图8示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器2010、存储器2020、输入/输出接口2030、通信接口2040和总线2050。其中处理器2010、存储器2020、输入/输出接口2030和通信接口2040通过总线2050实现彼此之间在设备内部的通信连接。
136.处理器2010可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
137.存储器2020可以采用rom(read only memory,只读存储器)、ram(random access memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器2020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器2020中,并由处理器2010来调用执行。
138.输入/输出接口2030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
139.通信接口2040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
140.总线2050包括一通路,在设备的各个组件(例如处理器2010、存储器2020、输入/输出接口2030和通信接口2040)之间传输信息。
141.需要说明的是,尽管上述设备仅示出了处理器2010、存储器2020、输入/输出接口2030、通信接口2040以及总线2050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
142.上述实施例的电子设备用于实现前述任一实施例中相应的投屏方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
143.基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的投屏方法。
144.本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
145.上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的任务处理方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
146.所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
147.另外,为简化说明和讨论,并且为了不会使本公开实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(ic)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施例。因此,这些描述应被认为是说明性的而不是限制性的。
148.尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态ram(dram))可以使用所讨论的实施例。
149.本公开实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1