数据处理方法及电子设备转让专利

申请号 : CN202210019264.6

文献号 : CN115550708B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李鹏飞李玉姚远许嘉

申请人 : 荣耀终端有限公司

摘要 :

本申请提供了一种数据处理方法及电子设备。该方法包括:与第二电子设备建立通信连接。在建立通信连接之后,接收第二电子设备发送的N个视频数据帧,N为自然数,N大于1。接着,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示,送显周期的时长等于第一电子设备当前垂直同步周期的时长。这样,在一个垂直同步周期内送显一个视频数据帧,与第一电子设备的屏幕刷新频率相匹配,从而避免了第一电子设备的SurfaceFlinger因在一个垂直同步周期内接收到多个视频数据帧而丢帧。如此,通过控制视频数据帧的送显时机,减少了丢失帧的数量,提高了第一电子设备的显示帧率。

权利要求 :

1.一种数据处理方法,其特征在于,应用于第一电子设备,包括:与第二电子设备建立通信连接;

接收所述第二电子设备发送的N个视频数据帧,N为自然数,N大于1;

从所述第一电子设备的解码模块的输出缓存中读取所述N个视频数据帧,存储到第一缓存中,所述第一缓存不属于所述解码模块,所述第一缓存的容量大于所述输出缓存的容量;所述第一缓存的容量与第一差异值成正比,所述第一差异值为所述解码模块的解码速度和当前垂直同步周期对应的屏幕刷新频率之间的差异值;

按照预设的读取周期,从所述第一缓存中读取所述N个视频数据帧,所述读取周期的时长等于所述第一电子设备的当前垂直同步周期的时长;

按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示,所述送显周期的时长等于所述第一电子设备当前垂直同步周期的时长。

2.根据权利要求1所述的方法,其特征在于,按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示,包括:将从所述第一缓存读取到的视频数据帧立即发送给所述第一电子设备的显示系统进行显示。

3.根据权利要求1所述的方法,其特征在于,按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示,包括:将从所述第一缓存读取到的视频数据帧延迟第一时长后发送给所述第一电子设备的显示系统进行显示。

4.根据权利要求1所述的方法,其特征在于,按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示之前,还包括:从所述第一电子设备的解码模块的输出缓存中读取所述N个视频数据帧,存储到第一缓存中;

从所述第一缓存中非周期性地读取所述N个视频数据帧。

5.根据权利要求4所述的方法,其特征在于,从所述第一缓存中非周期性地读取所述N个视频数据帧,包括:在每一个垂直同步周期内的一个随机时刻,从所述第一缓存中读取所述N个视频数据帧中的一个视频数据帧。

6.根据权利要求1所述的方法,其特征在于,按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示之前,还包括:按照预设的读取周期,从所述第一电子设备的解码模块的输出缓存中读取所述N个视频数据帧,所述读取周期的时长等于所述第一电子设备的当前垂直同步周期的时长。

7.根据权利要求6所述的方法,其特征在于,按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示,包括:将从所述输出缓存读取到的视频数据帧立即发送给所述第一电子设备的显示系统进行显示。

8.根据权利要求6所述的方法,其特征在于,按照预设的送显周期将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统,包括:将从所述输出缓存读取到的视频数据帧延迟第一时长后发送给所述第一电子设备的显示系统进行显示。

9.根据权利要求1所述的方法,其特征在于,按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统之前,还包括:从所述第一电子设备的解码模块的输出缓存中非周期性地读取所述N个视频数据帧。

10.根据权利要求9所述的方法,其特征在于,从所述第一电子设备的解码模块的输出缓存中非周期性地读取所述N个视频数据帧,包括:在每一个垂直同步周期内的一个随机时刻,从所述第一电子设备的解码模块的输出缓存中读取所述N个视频数据帧中的一个视频数据帧。

11.根据权利要求1所述的方法,其特征在于,

接收所述第二电子设备发送的N个视频数据帧,包括:

在第一时刻,从所述第一电子设备的解码模块的输出缓存中读取第一视频数据帧;所述输出缓存用于存储所述解码模块从所述第二电子设备发送的编码数据中解码出来的视频数据帧;在第二时刻,从所述解码模块的输出缓存中读取第二视频数据帧,所述第二时刻大于或等于所述第一时刻,所述第二时刻与所述第一时刻的时间差小于所述第一电子设备的当前垂直同步周期;

按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示,包括:在第三时刻,将所述第一视频数据帧发送给所述第一电子设备的显示系统进行显示,所述第三时刻大于所述第一时刻;在第四时刻,将所述第二视频数据帧发送给所述第一电子设备的显示系统,所述第四时刻大于所述第三时刻,且所述第四时刻与所述第三时刻的时间差等于所述第一电子设备的当前垂直同步周期。

12.根据权利要求11所述的方法,其特征在于,

从所述第一电子设备的解码模块的输出缓存中读取第一视频数据帧之后,还包括:将所述第一视频数据帧存储到第一缓存中;

在第三时刻,将所述第一视频数据帧发送给所述第一电子设备的显示系统进行显示之前,还包括:在所述第三时刻之前的第五时刻,从所述第一缓存中读取所述第一视频数据帧;

从所述第一电子设备的解码模块的输出缓存中读取第二视频数据帧之后,还包括:将所述第二视频数据帧存储到所述第一缓存中;

在第四时刻,将所述第二视频数据帧发送给所述第一电子设备的显示系统进行显示之前,还包括:在所述第四时刻之前的第六时刻,从所述第一缓存中读取所述第二视频数据帧,所述第六时刻大于所述第五时刻。

13.根据权利要求11所述的方法,其特征在于,接收所述第二电子设备发送的N个视频数据帧,还包括:在第七时刻,从所述解码模块的输出缓存中读取第三视频数据帧,所述第七时刻大于或等于所述第二时刻;

按照预设的送显周期,将所述N个视频数据帧逐个发送给所述第一电子设备的显示系统进行显示,还包括:在第八时刻,将所述第三视频数据帧发送给所述第一电子设备的显示系统进行显示,所述第八时刻大于所述第四时刻,且所述第八时刻与所述第四时刻的时间差等于所述第一电子设备的当前垂直同步周期。

14.根据权利要求1所述的方法,其特征在于,接收所述第二电子设备发送的N个视频数据帧,包括:接收所述第二电子设备发送的N个视频数据帧对应的编码数据,所述编码数据是对所述N个视频数据帧编码得到的;

将所述编码数据写入所述解码模块的输入缓存,以使所述解码模块对所述编码数据进行解码,得到解码出的所述N个视频数据帧;

将解码出的所述N个视频数据帧存储到所述解码模块的输出缓存。

15.一种电子设备,其特征在于,包括:

存储器和处理器,所述存储器与所述处理器耦合;

所述存储器存储有程序指令,当所述程序指令由所述处理器执行时,使得所述电子设备执行权利要求1‑14中任意一项所述第一电子设备所执行的数据处理方法。

16.一种计算机可读存储介质,包括计算机程序,其特征在于,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1‑14中任意一项所述第一电子设备所执行的数据处理方法。

说明书 :

数据处理方法及电子设备

技术领域

[0001] 本申请涉及终端设备领域,尤其涉及一种数据处理方法及电子设备。

背景技术

[0002] 当前,在两个电子设备之间通过网络传输视频数据,然后由接收端电子设备对视频数据对应的内容进行显示的场景中,接收端电子设备接收到视频数据,对视频数据进行解码后直接送显。由于网络传输的不稳定性,网络不是按照垂直同步周期(Vsync周期)固定传输数据,但接收端电子设备的SurfaceFlinger(图形合成者)是按照Vsync周期固定进行屏幕刷新的。这样,在一个Vsync周期内,当接收端电子设备接收到的视频数据多于两帧时,接收端电子设备的SurfaceFlinger就会丢弃一些帧的数据,导致接收端电子设备的显示帧率降低。

发明内容

[0003] 为了解决上述技术问题,本申请提供一种数据处理方法及电子设备,通过控制解码后的视频数据的送显时机,减少丢失帧的数量,提高显示帧率。
[0004] 第一方面,本申请提供一种数据处理方法。该数据处理方法应用于第一电子设备,包括:与第二电子设备建立通信连接。然后,在建立通信连接之后,接收第二电子设备发送的N个视频数据帧,N为自然数,N大于1。接着,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示,送显周期的时长等于第一电子设备当前垂直同步周期的时长。这样,在一个垂直同步周期内送显一个视频数据帧,与第一电子设备的屏幕刷新频率相匹配,从而避免了第一电子设备的SurfaceFlinger因在一个垂直同步周期内接收到多个视频数据帧而丢帧。如此,通过控制视频数据帧的送显时机,减少了丢失帧的数量,提高了第一电子设备的显示帧率。
[0005] 根据第一方面,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示之前,还包括:从第一电子设备的解码模块的输出缓存中读取N个视频数据帧,存储到第一缓存中,按照预设的读取周期,从第一缓存中读取N个视频数据帧,读取周期的时长等于第一电子设备的当前垂直同步周期的时长。这样,一方面,解码模块的输出缓存中被及时转移到第一缓存中进行存储,减少了因解码数据量过大导致解码模块的输出缓存中的已有视频数据被覆盖的情况,从而减少了丢失帧的数量。另一方面,视频数据帧的读取周期与送显周期长度相同,可以减少视频数据帧在送显之前的等待时长。
[0006] 示例性地,在将视频数据帧存储到第一缓存中后,可以将已存储到第一缓存中的视频数据帧从解码模块的输出缓存中删除。
[0007] 示例性地,在每次发送之后,可以将已发送的视频数据帧从第一缓存中删除。
[0008] 根据第一方面,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示,包括:将从第一缓存读取到的视频数据帧立即发送给第一电子设备的显示系统进行显示。这样,可以减少视频数据帧在送显之前的等待时长。
[0009] 根据第一方面,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示,包括:将从第一缓存读取到的视频数据帧延迟第一时长后发送给第一电子设备的显示系统进行显示。
[0010] 示例性地,第一时长可以根据应用需求或经验确定。
[0011] 根据第一方面,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示之前,还包括:从第一电子设备的解码模块的输出缓存中读取N个视频数据帧,存储到第一缓存中,从第一缓存中非周期性地读取N个视频数据帧。
[0012] 根据第一方面,从第一缓存中非周期性地读取N个视频数据帧,包括:在每一个垂直同步周期内的一个随机时刻,从第一缓存中读取N个视频数据帧中的一个视频数据帧。这样,可以避免在一个垂直同步周期内SurfaceFlinger收到多个视频数据帧而丢帧。
[0013] 根据第一方面,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示之前,还包括:按照预设的读取周期,从第一电子设备的解码模块的输出缓存中读取N个视频数据帧,读取周期的时长等于第一电子设备的当前垂直同步周期的时长。这样,可以无需额外设置缓存,节约存储资源。
[0014] 根据第一方面,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示,包括:将从输出缓存读取到的视频数据帧立即发送给第一电子设备的显示系统进行显示。这样,可以减少视频数据帧在送显之前的等待时长。
[0015] 根据第一方面,按照预设的送显周期将N个视频数据帧逐个发送给第一电子设备的显示系统,包括:将从输出缓存读取到的视频数据帧延迟第一时长后发送给第一电子设备的显示系统进行显示。
[0016] 根据第一方面,按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统之前,还包括:从第一电子设备的解码模块的输出缓存中非周期性地读取N个视频数据帧。
[0017] 根据第一方面,从第一电子设备的解码模块的输出缓存中非周期性地读取N个视频数据帧,包括:在每一个垂直同步周期内的一个随机时刻,从第一电子设备的解码模块的输出缓存中读取N个视频数据帧中的一个视频数据帧。
[0018] 根据第一方面,第一缓存的容量与第一差异值成正比,第一差异值为解码模块的解码速度和当前垂直同步周期对应的屏幕刷新频率之间的差异值。这样,能够合理设置第一缓存的容量,避免存储资源的浪费。
[0019] 根据第一方面,接收第二电子设备发送的N个视频数据帧,包括:在第一时刻,从第一电子设备的解码模块的输出缓存中读取第一视频数据帧,输出缓存用于存储解码模块从第二电子设备发送的编码数据中解码出来的视频数据帧,在第二时刻,从解码模块的输出缓存中读取第二视频数据帧,第二时刻大于或等于第一时刻,第二时刻与第一时刻的时间差小于第一电子设备的当前垂直同步周期;按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示,包括:在第三时刻,将第一视频数据帧发送给第一电子设备的显示系统进行显示,第三时刻大于第一时刻;在第四时刻,将第二视频数据帧发送给第一电子设备的显示系统,第四时刻大于第三时刻,且第四时刻与第三时刻的时间差等于第一电子设备的当前垂直同步周期。这样,尽管在同一个垂直同步周期内第一电子设备可能接收到多个视频数据帧,但是该多个视频数据帧被分别在不同的垂直同步周期内送显,且一个周期内送显一帧,从而可以避免SurfaceFlinger因在一个垂直同步周期内接收到多个视频数据帧而丢帧,以提高显示帧率。
[0020] 根据第一方面,从第一电子设备的解码模块的输出缓存中读取第一视频数据帧之后,还包括:将第一视频数据帧存储到第一缓存中。在第三时刻,将第一视频数据帧发送给第一电子设备的显示系统进行显示之前,还包括:在第三时刻之前的第五时刻,从第一缓存中读取第一视频数据帧。从第一电子设备的解码模块的输出缓存中读取第二视频数据帧之后,还包括:将第二视频数据帧存储到第一缓存中。在第四时刻,将第二视频数据帧发送给第一电子设备的显示系统进行显示之前,还包括:在第四时刻之前的第六时刻,从第一缓存中读取第二视频数据帧,第六时刻大于第五时刻。这样,先将输出缓存中的视频数据帧转存到第一缓存中,可以避免输出缓存因容量不足导致部分视频数据被覆盖而丢帧。
[0021] 根据第一方面,接收第二电子设备发送的N个视频数据帧,还包括:在第七时刻,从解码模块的输出缓存中读取第三视频数据帧,第七时刻大于或等于第二时刻。按照预设的送显周期,将N个视频数据帧逐个发送给第一电子设备的显示系统进行显示,还包括:在第八时刻,将第三视频数据帧发送给第一电子设备的显示系统进行显示,第八时刻大于第四时刻,且第八时刻与第四时刻的时间差等于第一电子设备的当前垂直同步周期。
[0022] 根据第一方面,接收第二电子设备发送的N个视频数据帧,包括:接收第二电子设备发送的N个视频数据帧对应的编码数据,编码数据是对N个视频数据帧编码得到的,将编码数据写入解码模块的输入缓存,以使解码模块对编码数据进行解码,得到解码出的N个视频数据帧,将解码出的N个视频数据帧存储到解码模块的输出缓存。
[0023] 第二方面,本申请提供一种电子设备,包括:存储器和处理器,存储器与处理器耦合;存储器存储有程序指令,当程序指令由所述处理器执行时,使得电子设备执行第一方面任意一项中第一电子设备所执行的数据处理方法。
[0024] 第三方面,本申请提供一种计算机可读存储介质,包括计算机程序,当计算机程序在电子设备上运行时,使得电子设备执行前述的第一方面任意一项中第一电子设备所执行的数据处理方法。

附图说明

[0025] 图1为示例性示出的电子设备100的结构示意图;
[0026] 图2为示例性示出的本申请实施例的电子设备100的软件结构框图;
[0027] 图3为示例性示出的本申请实施例的数据处理方法的一种应用场景示意图;
[0028] 图4为示例性示出的图3所示应用场景中的数据处理过程示意图;
[0029] 图5为示例性示出的本申请实施例的数据处理方法中数据的一种流转过程示意图;
[0030] 图6为示例性示出的视频帧处理过程中的时序示意图。

具体实施方式

[0031] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0032] 本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
[0033] 本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
[0034] 在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
[0035] 在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。
[0036] 首先,对本文中涉及的几个概念进行说明。
[0037] 本文中,显示帧率(Frame Rate)是指电子设备显示视频帧的速率,单位为FPS(Frames Per Second,每秒传输帧数)。
[0038] 屏幕刷新频率(Refresh Rate或Scanning Frequency)是指电子设备刷新屏幕的频率,单位为Hz(赫兹)。对于特定的设备来说,屏幕刷新频率为常量,例如60Hz、120Hz等。
[0039] Vsync周期即垂直同步周期,也可称为屏幕刷新周期。Vsync周期与屏幕刷新频率之间为倒数关系。例如当屏幕刷新频率为60Hz时,Vsync周期为16.6ms(毫秒),当屏幕刷新频率为120Hz时,Vsync周期为8.3ms。
[0040] 本申请实施例的数据处理方法可以应用于投屏场景。在投屏场景中,第一电子设备作为源端,将视频数据编码后,可以通过网络,例如Wi‑Fi、蓝牙等,传输给第二电子设备,第二电子设备为接收端。第二电子设备对视频数据进行解码后,将解码后的视频数据送到显示系统进行显示(简称送显)。
[0041] 传统方案中,视频数据被解码后立即被送显。然而,第二电子设备的显示系统是按照固定的屏幕刷新频率(与Vsync周期相对应)进行屏幕刷新的,当在一个Vsync周期内送显的视频数据多于两帧时,第二电子设备的SurfaceFlinger显示一帧视频数据,丢弃其他帧数据。这导致第二电子设备的显示帧率降低。
[0042] 例如,假设第一电子设备在1s(秒)内向第二电子设备传输了60帧数据,由于上述丢帧现象的存在,第二电子设备在1s内显示了40帧数据。这样,显示帧率降低,导致显示效果不佳,影响了用户体验。
[0043] 在一个示例中,第一电子设备例如可以是PC(Personal Computer,个人计算机)机,该PC机可以安装Windows系统。第二电子设备可以是安装有安卓(Android)系统的手机、平板等。
[0044] 在另一个示例中,第一电子设备例如可以是安装有安卓系统的手机、平板等,第二电子设备可以是安装Windows系统的PC机。
[0045] 在另一个示例中,第一电子设备例如可以是安装有安卓系统的手机、平板等,第二电子设备也可以是安装有安卓系统的手机、平板等。
[0046] 本申请实施例提供一种数据处理方法,能够提升第二电子设备的显示帧率,改善第二电子设备的显示效果,提升用户使用体验。
[0047] 本申请实施例的数据处理方法可以应用于前述的第二电子设备。该第二电子设备的结构可以如图1所示。
[0048] 图1为示例性示出的电子设备100的结构示意图。应该理解的是,图1所示电子设备100仅是电子设备的一个范例,并且电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图1中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
[0049] 请参见图1,电子设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器
170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器
192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
[0050] 其中,传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器
180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
[0051] 电子设备100的软件系统可以采用分层架构、事件驱动架构、微核架构、微服务架构,或云架构。本申请实施例以分层架构的安卓(Android)系统为例,示例性说明电子设备100的软件结构。
[0052] 图2为示例性示出的本申请实施例的电子设备100的软件结构框图。
[0053] 电子设备100的分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,Android系统可以包括应用程序层、应用程序框架层、以及内核层等。
[0054] 应用程序层可以包括一系列应用程序包。
[0055] 如图2所示,电子设备100的应用程序层的应用程序包可以包括业务、业务管理、业务设置、传输模块、解码逻辑模块、显示模块等模块。
[0056] 其中,业务模块用于实现具体的业务功能。业务管理模块用于实现与业务模块所对应的业务相应的管理功能。业务管理模块用于实现与业务模块所对应的业务相应的设置功能。
[0057] 例如,业务模块可以为无线投屏模块。
[0058] 其中,解码逻辑模块用于执行本申请的数据处理方法。解码逻辑模块的具体功能请参见本文后续实施例中的详细说明。
[0059] 其中,显示模块用于对视频数据进行显示。本申请实施例中,电子设备的显示系统可以包括显示模块和SurfaceFlinger。显示模块可以调用SurfaceFlinger将视频数据等显示内容发送至显示器等硬件实现显示功能。
[0060] 需要说明的是,尽管在图2所示的实施例中,显示模块位于应用程序层,但可以理解的是,在本申请其他实施例中,显示模块也可以位于应用程序层以外的其他层,例如显示模块还可以位于应用程序框架层。
[0061] 如图2所示,应用程序框架层可以包括基础能力、视频编解码、Socket、SurfaceFlinger等模块。
[0062] 其中,基础能力模块用于提供构建应用程序时可能用到的各种API(Application Programming Interface,应用程序接口)。
[0063] 视频编解码模块用于实现对视频数据的编码和解码功能。视频编解码模块可以包括编码模块和解码模块。编码模块用于对视频数据进行编码,解码模块用于对视频数据进行解码。视频编解码模块可以是采用硬件方式对视频数据进行编码和解码的模块。其中,应用程序层的编码逻辑模块可以调用视频编解码模块中的编码模块进行编码,应用程序层的解码逻辑模块可以调用视频编解码模块中的解码模块进行解码。
[0064] Socket(套接字)是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
[0065] SurfaceFlinger用于将视频数据等显示内容发送至显示器等硬件实现显示功能。
[0066] 内核层是硬件和软件之间的层。
[0067] 如图2所示,内核层可以包括传感器驱动、Wi‑Fi驱动、USB驱动等模块。
[0068] 可以理解的是,图2示出的软件结构中的层以及各层中包含的部件,并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的层,以及每个层中可以包括更多或更少的部件,本申请不做限定。
[0069] 图3为示例性示出的本申请实施例的数据处理方法的一种应用场景示意图。请参见图3,本实施例的应用场景中包括源端和接收端,二者均为电子设备。接收端的软件架构可以如图2所示,此处不再赘述。源端的软件架构可以包括应用程序层、应用程序框架层、以及内核层。其中,源端的应用程序层可以包括业务、业务管理、业务设置、传输模块、抓屏模块、编码逻辑模块等模块。源端的应用程序框架层可以与接收端的应用程序框架层结构相同,源端的内核层可以与接收端的内核层结构相同,请参见前述对图2所示软件结构的相关描述,此处不再赘述。
[0070] 图4为示例性示出的图3所示应用场景中的数据处理过程示意图。请参见图4,本实施例中,数据处理过程可以包括如下步骤:
[0071] S1、当源端的业务启动后,源端的业务模块向源端的抓屏模块发送业务启动通知。
[0072] 本实施例中,以源端为安装有安卓系统的手机A、接收端为安装有安卓系统的平板B、源端将视频投屏到接收端为例进行说明。
[0073] 当用户开启手机A的无线投屏功能后,在手机A中搜索能够接收手机A投屏的设备,获得能够接收手机A投屏的可用设备列表C,可用设备列表C中包括平板B。然后,用户可以在搜索到的可用设备列表C中选中平板B作为本次的接收投屏设备。接着,手机A与平板B之间建立无线连接,例如Wi‑Fi连接或者蓝牙连接。
[0074] 手机A与平板B之间的无线连接建立成功后,手机A中的无线投屏模块向手机A中的抓屏模块发送业务启动通知。该业务启动通知用于指示抓屏模块抓取屏幕上的视频数据。
[0075] 在手机A与平板B之间的无线连接建立成功后,平板B中的解码逻辑模块创建第一线程、第二线程、第三线程和第一缓存。
[0076] 其中,第一缓存的容量需要大于平板B中解码模块的输出缓存(OutputBuffer)的容量。
[0077] 在实际应用中,第一缓存的容量可以根据经验设置。例如,如果平板B中解码模块的解码速度与平板B的屏幕刷新频率相差较小,可以设置较小容量的第一缓存。解码模块的解码速度与单位时间内需要写入到第一缓存中的视频数据帧的数量成正比,屏幕刷新频率与单位时间内从第一缓存中读出的视频数据帧的数量成正比,这样,单位时间内第一缓存中需要缓存的视频数据帧的数量就与解码模块的解码速度和屏幕刷新频率之间的差值成正比。从而,当平板B中解码模块的解码速度与平板B的屏幕刷新频率相差较小,可以设置较小容量的第一缓存。反之,如果平板B中解码模块的解码速度与平板B的屏幕刷新频率相差较大,可以设置较大容量的第一缓存。
[0078] S2、源端的抓屏模块抓取源端屏幕上的视频数据。
[0079] 例如,手机A的抓屏模块接收到业务启动通知后,开始抓取手机A屏幕上的视频数据。抓屏模块可以按照一定的帧率抓取视频数据,例如60FPS。
[0080] S3、源端的抓屏模块向源端的编码逻辑模块发送视频数据。
[0081] 例如,手机A的抓屏模块向手机A的编码逻辑模块发送抓取到的视频数据。
[0082] S4、源端的编码逻辑模块调用编码模块对视频数据进行编码,得到编码数据。
[0083] 此处,编码模块为源端的视频编解码模块中的模块。
[0084] 其中,编码模块可以基于视频编码标准H.264对视频数据进行编码。编码模块还可以采用JPEG(Joint Photographic Experts Group,联合图像专家小组)、H.261、MPEG(Moving Picture Experts Group,动态图像专家组)等中的任一种编码方法进行编码。
[0085] 在另一个示例中,编码模块还可以采用两种以上的编码方法进行混合编码。
[0086] 需要说明的是,以上仅为编码模块所采用的编码方法的示意性说明,并不排除其它的编码方法,本申请实施例对编码模块所采用的编码方法不做限制。
[0087] S5、源端的编码逻辑模块向源端的传输模块发送编码数据。
[0088] 其中,在一个示例中,传输模块可以为Wi‑Fi模块。在另一个示例中,传输模块可以为蓝牙模块。
[0089] 假设手机A和平板B都安装有Wi‑Fi模块和蓝牙模块。当在无线投屏中手机A与平板B之间的无线连接为Wi‑Fi连接时,手机A的编码逻辑模块向手机A的Wi‑Fi模块发送编码数据。如果在无线投屏中手机A与平板B之间的无线连接为蓝牙连接,手机A的编码逻辑模块向手机A的蓝牙模块发送编码数据。
[0090] S6、源端的传输模块向接收端的传输模块发送编码数据。
[0091] 例如,如果在无线投屏中手机A与平板B之间的无线连接为Wi‑Fi连接,手机A的Wi‑Fi模块向平板B的Wi‑Fi模块发送编码数据。
[0092] 如果在无线投屏中手机A与平板B之间的无线连接为蓝牙连接,手机A的蓝牙模块向平板B的蓝牙模块发送编码数据。
[0093] 在一些实施例中,接收端在一个Vsync周期内接收到的帧数是不固定的。例如,在第1个Vsync周期,接收端接收到一帧数据;在第2个Vsync周期,如果网络传输不稳定,接收端可能接收到2帧数据;在第3个Vsync周期,接收端接收到1帧数据……。
[0094] S7、接收端的传输模块向接收端的解码逻辑模块发送编码数据。
[0095] 例如,平板B的Wi‑Fi模块接收到手机A的Wi‑Fi模块发送的编码数据后,可以向平板B的解码逻辑模块发送编码数据。
[0096] 需要说明的是,本申请实施例中,解码逻辑模块可以在源端电子设备和接收端电子设备成功建立无线连接之后、步骤S8之前的任意时机创建第一线程、第二线程、第三线程和第一缓存。
[0097] S8、接收端的编码逻辑模块通过已创建的第一线程接收编码数据。
[0098] S9、接收端的编码逻辑模块通过第一线程发送编码数据到解码模块的输入缓存。
[0099] 此处,解码模块为源端的视频编解码模块中的模块。解码模块自身有两个缓存,一个为输入缓存(InputBuffer),另一个为输出缓存(OutputBuffer)。前述的第一缓存不属于解码模块,第一缓存是解码逻辑模块所创建的缓存。
[0100] S10、接收端的解码模块对编码数据进行解码,得到视频数据,存储到解码模块的输出缓存。
[0101] 解码模块从编码数据中解码出视频数据后,会立即将视频数据存储到解码模块的输出缓存OutputBuffer中。
[0102] S11、接收端的解码逻辑模块通过已创建的第二线程从解码模块的输出缓存中获视频数据,并存储到已创建的第一缓存中。
[0103] 第二线程可以对解码模块的输出缓存OutputBuffer进行监听。一旦输出缓存OutputBuffer中被写入视频数据,立即将输出缓存OutputBuffer中的视频数据读取到第一缓存中。然后,输出缓存OutputBuffer可以删除第二线程已读取完毕的视频数据。
[0104] S12、接收端的解码逻辑模块通过已创建的第三线程从第一缓存中周期性地读取视频数据。
[0105] 例如,上述周期可以为Vsync周期。如果平板B的Vsync周期为16.6ms,那么第三线程每隔16.6ms从第一缓存中读取一帧视频数据。如果平板B的Vsync周期为8.3ms,那么第三线程每隔8.3ms从第一缓存中读取一帧视频数据。
[0106] 需要说明的是,在本申请其他实施例中,第三线程从第一缓存中读取视频数据的方式还可以是:第三线程从第一缓存中非周期性地读取视频数据。例如,第三线程从第一缓存中非周期性地读取视频数据可以包括:第三线程在每一个Vsync周期内的随机时刻读取一帧视频数据。例如,假设Vsync周期为16.6ms,在第1个周期的5ms时,第三线程从第一缓存中读取一帧视频数据;在第2个周期的12ms时,第三线程从第一缓存中读取一帧视频数据;在第3个周期的9ms时,第三线程从第一缓存中读取一帧视频数据……。即在该种方式中,相邻两帧视频数据的读取时间间隔不一定等于一个Vsync周期。在本申请其他实施例中,第三线程从第一缓存中非周期性地读取视频数据的方式还可以是:第三线程在任意的随机时刻从第一缓存中读取视频数据。
[0107] S13、接收端的解码逻辑模块通过第三线程按照Vsync周期发送视频数据至显示模块。
[0108] 例如,如果平板B的Vsync周期为16.6ms,那么第三线程每隔16.6ms向显示模块发送一帧视频数据。如果平板B的Vsync周期为8.3ms,那么第三线程每隔8.3ms向显示模块发送一帧视频数据。
[0109] 在一个示例中,第三线程从第一缓存中读取视频数据帧后可以立即将读取的视频数据帧发送给电子设备的显示系统。此时,从第一缓存中读取视频数据帧的周期与发送视频数据至显示模块的周期是同步的。
[0110] 在另一个示例中,第三线程从第一缓存中读取视频数据帧后,可以延迟一段时间,再将读取的视频数据帧发送给电子设备的显示系统。在该示例中,当第三线程从第一缓存中周期(周期时长等于一个Vsync周期)性地读取视频数据帧时,读取的不同视频数据帧延迟相同的时间。在该示例中,当第三线程从第一缓存中非周期性地读取视频数据帧、并且在每一个Vsync周期内的随机时刻读取一帧视频数据时,读取的不同视频数据帧可以延迟不同的时间。
[0111] 需要说明的是,第三线程的送显周期(即第三线程向显示系统发送视频数据帧的周期)的时长与Vsync周期的时长相同,但送显周期的起止时刻可以与Vsync周期的的起止时刻不同。
[0112] 显示模块接收到视频数据后,可以调用releaseOutputBuffer方法,通过releaseOutputBuffer方法调用安卓系统的MediaCodec,MediaCodec再调用SurfaceFlinger,由SurfaceFlinger按照送显的视频数据进行显示。
[0113] 图5为示例性示出的本申请实施例的数据处理方法中数据的一种流转过程示意图。结合图4,如图5所示,第一线程接收源端传输过来的编码数据,然后将编码数据存储到解码模块的输入缓存中。然后,解码模块对输入缓存中的数据进行解码,将解码出的视频数据存储到解码模块的输出缓存中。接着,第二线程从解码模块的输出缓存中获取视频数据,并将视频数据存储到第一缓存中。接下来,第三线程按照Vsync周期从第一缓存中逐帧读取视频数据,待接收到Vsync信号,第三线程将读取的视频数据传送给SurfaceFlinger进行显示。SurfaceFlinger接收到视频数据后,按照Vsync周期逐帧显示视频图像。
[0114] 这样,一方面,在本申请实施例中,解码模块的输出缓存中被及时转移到第一缓存中进行存储,减少了因解码数据量过大导致解码模块的输出缓存中的已有视频数据被覆盖的情况,从而减少了丢失帧的数量。因为如果短时间内解码数据量过大,可能会出现解码模块的输出缓存容量小于应存储解码数据量的情况。此时,由于容量不够,后解码出的视频数据存储到输出缓存时,会覆盖先解码出的已存储在输出缓存、但还没有被送显的视频数据,从而造成视频数据的丢失。
[0115] 另一方面,在本申请实施例中,第三线程按照Vsync周期逐帧送显,不会出现在一个Vsync周期内SurfaceFlinger接收到多帧视频数据的情况,因此SurfaceFlinger不会丢弃视频数据,减少了丢失帧的数量。
[0116] 图6为示例性示出的视频帧处理过程中的时序示意图。图6中,假设Vsync周期为16.6ms(此处仅为示意性说明,本申请实施例对于Vsync周期的数值不作限制,在实际应用中,可以实时获取电子设备的SurfaceFlinger所采用的Vsync周期)。
[0117] 图6中,竖直的虚线形成的周期是本实施例中向显示系统发送视频数据帧的周期,为描述方便记为送显周期,假设该送显周期与解码逻辑模块监听到的Vsync信号的周期相同。竖直的实线形成的周期是SurfaceFlinger显示视频数据的周期,为描述方便记为显示周期。送显周期和显示周期的时长均与Vsync周期的时长相等。图6中的所有时间轴是对齐的。请参见图6,第三线程每隔16.6ms监听到一个Vsync信号。假设在第一个送显周期内,第二线程从输出缓存中读取完整的第一帧视频数据以及读取第二帧视频数据的一部分(处于第一个送显周期内的部分)。在第二个送显周期内,第二线程从输出缓存中读取第二帧视频数据的一部分(处于第二个送显周期内的部分)以及读取完整的第三帧视频数据。在第三个送显周期内,第二线程从输出缓存中读取完整的第四帧视频数据以及读取完整的第五帧视频数据。
[0118] 请继续参见图6,在传统方案中,各个视频帧被送显的时序与图6中从输出缓存中获取视频帧的时序相同,即存储到输出缓存中的视频帧被读取后立即送显。传统方案中,送显后,SurfaceFlinger在第二个送显周期内显示第一帧视频数据;SurfaceFlinger在第三个送显周期内显示第三帧视频数据,而第二帧视频数据由于不完整(第二帧视频数据在两个Vsync周期内被送显)被SurfaceFlinger丢弃;SurfaceFlinger在第四个送显周期内显示第五帧视频数据,第四帧视频数据被SurfaceFlinger丢弃,因为SurfaceFlinger在一个Vsync周期内只能显示一帧图像,即刷新一次屏幕。可见,传统方案中,源端传输给接收端的第二帧视频数据和第四帧视频数据被SurfaceFlinger丢弃。
[0119] 请继续参见图6,在本申请实施例中,第三线程在第一个送显周期内将第一帧视频数据送显,在第二个送显周期内将第二帧视频数据送显,在第三个送显周期内将第三帧视频数据送显,在第四个送显周期内将第四帧视频数据送显,在第五个送显周期内将第五帧视频数据送显……。然后,在本申请实施例中,SurfaceFlinger在第一个显示周期内显示第一帧视频数据,在第二个显示周期内显示第二帧视频数据,在第三个显示周期内显示第三帧视频数据,在第四个显示周期内显示第四帧视频数据,后续,SurfaceFlinger将在第五个显示周期内显示第五帧视频数据……。可见,源端传输给接收端的所有视频数据都没有被丢弃,SurfaceFlinger显示了所有的视频数据。
[0120] 可见,本申请实施例的数据处理方法,通过控制解码后的视频数据按照Vsync周期送显,在每一个Vsync周期送显一帧视频数据,减少了丢失帧的数量,从而提高了接收端的显示帧率。
[0121] 需要说明的是,图6所示实施例中送显周期和显示周期是不重合的,但在本申请其他实施例中,送显周期和显示周期也可以是重合的。并且,图6中视频帧的送显时刻与视频帧的显示时延长度仅为示意性说明,并不用于对本申请实施例进行限制。在本申请其他实施例中,可以根据需要设置不同的显示时延长度。
[0122] 需要说明的是,以上的数据处理方式仅为本申请数据处理方法的一个实施例,本申请数据处理方法还可以采用其他的实施例。
[0123] 例如,前述实施例中采用了3个处理线程,并且构建了一个新的缓存,即第一缓存,而在本申请其他实施例中,也可以采用2个处理线程,并且无需构建上述的第一缓存。
[0124] 在采用2个处理线程的实施例中,一个线程可以与前述的第一线程相同,另一个线程可以用于周期性(该周期的时长等于一个Vsync周期)地从解码模块的输出缓存中读取视频数据帧,读取后立即发送给电子设备的显示系统或者延迟一段时间后发送给电子设备的显示系统。例如,假设,在第1个Vsync周期,接收端接收到第1帧数据;在第2个Vsync周期,接收端接收到第2帧数据和第3帧数据;在第3个Vsync周期,接收端接收到第4帧数据……。解码模块对这些数据解码后存储到输出缓存中。然后,在第1个Vsync周期,另一个线程从输出缓存中获取解码后的第1帧视频数据并发送给显示模块,以由SurfaceFlinger显示第1帧视频图像;在第2个Vsync周期,另一个线程从输出缓存中获取解码后的第2帧视频数据并发送给显示模块,以由SurfaceFlinger显示第2帧视频图像;在第3个Vsync周期,另一个线程从输出缓存中获取解码后的第3帧视频数据并发送给显示模块,以由SurfaceFlinger显示第3帧视频图像;在第4个Vsync周期,另一个线程从输出缓存中获取解码后的第4帧视频数据并发送给显示模块,以由SurfaceFlinger显示第4帧视频图像……。这样,通过控制解码后的视频数据的送显时机,也减少了丢失帧的数量,从而提高了接收端的显示帧率。需要说明的是,在本申请其他实施例中,在采用2个处理线程的实施例中,另一个线程可以在每一个Vsync周期内的随机时刻从解码模块的输出缓存中读取一帧视频数据,然后按照预设的送显周期将读取的视频数据帧发送给电子设备的显示系统。
[0125] 本申请实施例还提供一种电子设备,该电子设备包括存储器和处理器,存储器与处理器耦合,存储器存储有程序指令,当程序指令由所述处理器执行时,使得电子设备前述电子设备所执行的数据处理方法。
[0126] 可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0127] 本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的数据处理方法。
[0128] 本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的数据处理方法。
[0129] 另外,本申请实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的数据处理方法。
[0130] 其中,本实施例提供的电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
[0131] 通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0132] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0133] 作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0134] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0135] 本申请各个实施例的任意内容,以及同一实施例的任意内容,均可以自由组合。对上述内容的任意组合均在本申请的范围之内。
[0136] 集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0137] 上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
[0138] 结合本申请实施例公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(Read Only Memory,ROM)、可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD‑ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。
[0139] 本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
[0140] 上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。