一种显示设备、数据传输方法及存储介质与流程

文档序号:29617372发布日期:2022-04-13 12:11阅读:132来源:国知局
一种显示设备、数据传输方法及存储介质与流程

1.本发明涉及显示技术领域,尤其涉及一种显示设备、数据传输方法及存储介质。


背景技术:

2.随着显示设备的中央处理(central processing unit,cpu)、内存等硬件的升级,显示设备不仅可以作为数据接收端接收传输流(transport stream,ts)数据,而且还常常需要作为数据发送端产生并向其它终端设备发送ts数据,因此保证数据发送的稳定性和效率已成为显示技术领域重要的研究课题之一。
3.虽然音频数据、视频数据等基本流(elementary stream,es)数据可以不经封装直接通过网络协议传输,但考虑到拥塞控制的复杂性以及客户端的支持能力,目前普遍的做法是将基本流数据封装之后再进行传输。相关技术在对音频数据、视频数据等基本流数据进行封装时,通常不会形成清晰的帧边界,一个完整的视频帧的传输范围内往往会夹杂着音频数据,同样一个完整的音频数据传输范围也往往会夹杂着视频数据。由于相关技术中在对音频帧或视频帧进行封装时不会形成完整的帧边界,因此相关技术中的封装方式不支持对封装得到的传输包的优化处理。


技术实现要素:

4.为了解决上述技术问题或者至少部分地解决上述技术问题,本发明提供了一种显示设备、数据传输方法及存储介质,可以在对音频帧或视频帧进行封装时形成清晰的帧边界,进而支持对封装得到的传输包的优化处理。
5.第一方面,本发明提供了一种显示设备,包括:
6.控制器,被配置为:获取流媒体数据;
7.确定所述流媒体数据是否为视频帧或音频帧的数据;
8.在所述流媒体数据为视频帧或音频帧的数据的情况下,通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,并将所述视频帧或所述音频帧对应的传输包写入缓存队列;
9.通信器,被配置为:向数据接收端设备发送所述缓存队列中的传输包。
10.本发明一些实施例中,所述控制器,具体被配置为:
11.配置用于存储对数据进行封装得到的传输包的内存空间,用于将对数据进行封装得到的传输包写入所述内存空间的写入方法,以及用于将所述内存空间中的传输包写入所述缓存队列的回调方法;
12.根据预设封装格式对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包;
13.通过所述写入方法将所述传输包写入所述内存空间,并实时判断所述视频帧或所述音频帧对应的传输包是否已全部写入所述内存空间;
14.若所述视频帧或所述音频帧对应的传输包已全部写入所述内存空间,则通过所述
回调方法将所述内存空间中的传输包写入所述缓存队列,并释放所述内存空间。
15.在本发明一些实施例中,所述控制器,具体被配置为:
16.在所述流媒体数据为音频帧的数据的情况下,为所述音频帧分配容量为第一容量的内存空间;
17.在所述流媒体数据为视频帧的数据的情况下,为所述视频帧分配容量为第二容量的内存空间;
18.其中,所述第二容量大于所述第一容量。
19.在本发明一些实施例中,所述控制器,还被配置为:
20.在确定所述内存空间的容量小于所述视频帧或所述音频帧对应的传输包的数据量的情况下,扩充所述内存空间的容量。
21.在本发明一些实施例中,所述控制器,还被配置为:
22.在所述流媒体数据为视频帧的数据的情况下,为所述视频帧对应的传输包添加预设标识;
23.当所述缓存队列的数据量大于阈值数据量时,按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包。
24.在本发明一些实施例中,所述通信器,还被配置为:
25.接收所述数据接收端设备发送的指示信息,所述指示信息用于指示所述数据接收端设备传输包解码异常;
26.获取最新视频帧对应的传输包,所述最新视频帧为封装完成时刻距离当前时刻最近的视频帧;
27.向所述数据接收端设备发送所述最新视频帧对应的传输包。
28.在本发明一些实施例中,所述控制器,还被配置为:在为所述视频帧对应的传输包添加预设标识之后,判断预设缓存空间中是否具有缓存数据;若所述预设缓存空间中具有缓存数据,则清空所述预设缓存空间中的缓存数据,并将所述视频帧对应的传输包写入所述预设缓存空间中;若所述预设缓存空间中没有缓存数据,则将所述视频帧对应的传输包写入所述预设缓存空间中;
29.所述通信器,具体被配置为:读取所述预设缓存空间中的传输包作为所述最新视频帧对应的传输包。
30.第二方面,本发明提供一种数据传输方法,包括:
31.获取流媒体数据;
32.确定所述流媒体数据是否为视频帧或音频帧的数据;
33.在所述流媒体数据为视频帧或音频帧的数据的情况下,通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,并将所述传输包写入缓存队列;
34.向数据接收端设备发送所述缓存队列中的传输包。
35.在本发明一些实施例中,所述通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,并将所述传输包写入缓存队列,包括:
36.配置用于存储对数据进行封装得到的传输包的内存空间,用于将对数据进行封装
得到的传输包写入所述内存空间的写入方法,以及用于将所述内存空间中的传输包写入所述缓存队列的回调方法;
37.根据预设封装格式对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包;
38.通过所述写入方法将所述传输包写入所述内存空间,并实时判断所述视频帧或所述音频帧对应的传输包是否已全部写入所述内存空间;
39.若所述视频帧或所述音频帧对应的传输包已全部写入所述内存空间,则通过所述回调方法将所述内存空间中的传输包写入所述缓存队列,并释放所述内存空间。
40.在本发明一些实施例中,所述配置用于存储对数据进行封装得到的传输包的内存空间,包括:
41.在所述流媒体数据为音频帧的数据的情况下,为所述音频帧分配容量为第一容量的内存空间;
42.在所述流媒体数据为视频帧的数据的情况下,为所述视频帧分配容量为第二容量的内存空间;
43.其中,所述第二容量大于所述第一容量。
44.在本发明一些实施例中,所述方法还包括:
45.在确定所述内存空间的容量小于所述视频帧或所述音频帧对应的传输包的数据量的情况下,扩充所述内存空间的容量。
46.在本发明一些实施例中,所述方法还包括:
47.在所述流媒体数据为视频帧的数据的情况下,为所述视频帧对应的传输包添加预设标识;
48.当所述缓存队列的数据量大于阈值数据量时,按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包。
49.在本发明一些实施例中,所述方法还包括:
50.接收所述数据接收端设备发送的指示信息,所述指示信息用于指示所述数据接收端设备传输包解码异常;
51.获取最新视频帧对应的传输包,所述最新视频帧为封装完成时刻距离当前时刻最近的视频帧;
52.向所述数据接收端设备发送所述最新视频帧对应的传输包。
53.在本发明一些实施例中,所述方法还包括:在为所述视频帧对应的传输包添加预设标识之后,判断预设缓存空间中是否具有缓存数据;若所述预设缓存空间中具有缓存数据,则清空所述预设缓存空间中的缓存数据,并将所述视频帧对应的传输包写入所述预设缓存空间中;若所述预设缓存空间中没有缓存数据,则将所述视频帧对应的传输包写入所述预设缓存空间中;
54.所述获取最新视频帧对应的传输包,包括:
55.读取所述预设缓存空间中的传输包作为所述最新视频帧对应的传输包。
56.第三方面,本发明提供了一种计算机可读存储介质,包括:计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现如第二方面所示的数据传输方法。
57.第四方面,本发明提供了一种计算机程序产品,其特征在于,包括:当计算机程序
产品在计算机上运行时,使得计算机实现如第二方面所示的数据传输方法。
58.本发明实施例提供的显示设备和数据传输方法在获取流媒体数据后,首先确定所述流媒体数据是否为视频帧或音频帧的数据,并在所述流媒体数据为视频帧或音频帧的数据的情况下通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,以及将所述视频帧或所述音频帧对应的传输包写入缓存队列,最后向数据接收端设备发送所述缓存队列中的传输包,以向所述数据接收端设备发送所述流媒体数据。由于本发明实施例在确定流数据为视频帧或音频帧的数据的情况下,会通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,进而获取对应的传输包,而同步锁机制在同一时刻只允许单一线程对流媒体数据进行封装,因此只有在完成了当前音频帧或视频帧的数据的封装,并将当前音频帧或视频帧对应的数据包写入缓存队列后,才会进行下一个音频帧或视频帧的数据的封装,因此本发明实施例可以在对数据进行封装时形成清晰的帧边界,进而支持对封装得到的传输包的优化处理。
附图说明
59.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
60.为了更清楚地说明本发明实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
61.图1为相关技术中未形成清晰的帧边界的缓存队列的示意图;
62.图2为本发明一个或多个实施例的显示设备与控制装置之间操作场景的示意图;
63.图3为本发明一个或多个实施例的显示设备200的硬件配置框图;
64.图4为本发明一个或多个实施例的控制设备100的硬件配置框图;
65.图5为本发明一个或多个实施例中的数据传输方法的场景架构图;
66.图6为本发明一个或多个实施例进行数据传输方法的系统框架图;
67.图7为图6所示数据传输方法的系统框架图对应的显示设备200中软件配置示意图;
68.图8为本发明一个或多个实施例进行数据传输方法的系统框架图;
69.图9为图8所示数据传输方法的系统框架图对应的显示设备200中软件配置示意图;
70.图10为本发明一个或多个实施例进行数据传输方法的步骤流程图;
71.图11为本发明一个或多个实施例中的缓存队列的示意图;
72.图12为本发明一个或多个实施例中丢弃缓存队列中的数据包的示意图;
73.图13为本发明一个或多个实施例中获取并发送最新视频帧对应的传输包的示意图。
具体实施方式
74.为了能够更清楚地理解本发明的上述目的、特征和优点,下面将对本发明的方案进行进一步描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可
以相互组合。
75.在下面的描述中阐述了很多具体细节以便于充分理解本发明,但本发明还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本发明的一部分实施例,而不是全部的实施例。
76.为了提高基本流数据的封装效率,相关技术在对基本流数据进行封装时,普遍会通过多线程并行的方式对基本流数据进行封装,因此相关技术在对同时包含音频数据和视频数据的基本流数据进行封装时,不会形成清晰的帧边界。例如:参照图1所示,流媒体数据包括视频帧a的数据和音频帧b的数据,分别通过线程1和线程2对视频帧a的数据和音频帧b的数据进行封装。当封装时序上,线程1和线程2依次输出的传输包:为视频帧a对应的传输包a1、音频帧b对应的传输包b1、音频帧b对应的传输包b2、视频帧a对应的传输包a2、音频帧b对应的传输包b3、音频帧b对应的传输包b4、视频帧a对应的传输包a3、视频帧a对应的传输包a4、视频帧a对应的传输包a5、视频帧a对应的传输包a6,基本流数据包对应的传输包形成的缓存队列中,由先到后依次包括:传输包a1、传输包b1、传输包b2、传输包a2、传输包b3、传输包b4、传输包a3、传输包a4、传输包a5、传输包a6。视频帧a的传输范围内(传输包a1~传输包a6)夹杂着音频帧b的数据(传输包b1~传输包b4),音频帧b的传输范围内(传输包b1~传输包b4)也夹杂着视频帧a的数据(传输包a2),没有形成清晰的帧边界。因为相关技术在对音频数据、视频数据等基本流数据进行封装时,通常不会形成清晰的帧边界,无法确定哪些传输包为视频帧对应的传输包,也无法确定哪些传输包为音频帧对应的传输包,因此相关技术中的封装方式不支持丢弃非视频帧对应的传输包、重传视频帧对应的传输包等优化处理。
77.为解决上述问题,本发明获取流媒体数据后,先确定所述流媒体数据是否为视频帧或音频帧的数据,在所述流媒体数据为视频帧或音频帧的数据的情况下,通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述传输包,并在完成所述流媒体数据的封装时,将所述传输包写入缓存队列,向数据接收端设备发送所述缓存队列中的传输包,以向所述数据接收端设备发送所述流媒体数据。即,利用同步锁在同一时刻只允许单一线程对流媒体数据进行封装的机制,使显示设备在完成了一个音频帧或视频帧的数据的封装,并将已完成封装的音频帧或视频帧对应的数据包写入缓存队列后,才会进行下一个音频帧或视频帧的数据的封装,从而形成清晰的帧边界,进而使缓存队列中的传输包可以支持丢弃非视频帧对应的传输包、重传视频帧对应的传输包等优化处理。
78.本发明实施例中的基本流(elementary stream,es)数据是指:数字电视的显示信号中各组成部分编码后所形成的直接表示基本元素内容的数据流。通常es数据包含视频帧数据和音频帧数据的连续码流。
79.本发明实施例中的传输流(transport stream,ts)数据是指:是对多媒体文件的视频帧数据、音频帧数据、解码信息等数据进行封装得到的传输包形成的码流,主要用于多媒体文件的传输。
80.图2为根据本发明一个或多个实施例的显示设备与控制装置之间操作场景的示意图,如图2所示,用户可通过控制装置100和/或移动终端300操作显示设备200。控制装置100可以是遥控器,遥控器和显示设备的通信包括红外协议通信、蓝牙协议通信,无线或其他有线方式来控制显示设备200。用户可以通过遥控器上按键,语音输入、控制面板输入等输入
用户指令,来控制显示设备200。在一些实施例中,也可以使用移动终端、平板电脑、计算机、笔记本电脑、和其他智能设备以控制显示设备200。
81.在一些实施例中,移动终端300可与显示设备200安装软件应用,通过网络通信协议实现连接通信,实现一对一控制操作的和数据通信的目的。也可以将移动终端300上显示音视频内容传输到显示设备200上,实现同步显示功能显示设备200还与服务器400通过多种通信方式进行数据通信。可允许显示设备200通过局域网(lan)、无线局域网(wlan)和其他网络进行通信连接。服务器400可以向显示设备200提供各种内容和互动。显示设备200,可以液晶显示器、oled显示器、投影显示设备。显示设备200除了提供广播接收电视功能之外,还可以附加提供计算机支持功能的智能网络电视功能。
82.图3示例性示出了根据示例性实施例中控制装置100的配置框图。如图3所示,控制装置100包括控制器110、通信接口130、用户输入/输出接口140、存储器、供电电源。控制装置100可接收用户的输入操作指令,且将操作指令转换为显示设备200可识别和响应的指令,起用用户与显示设备200之间交互中介作用。通信接口130用于和外部通信,包含wifi芯片,蓝牙模块,nfc或可替代模块中的至少一种。用户输入/输出接口140包含麦克风,触摸板,传感器,按键或可替代模块中的至少一种。
83.图4示出了根据示例性实施例中显示设备200的硬件配置框图。如图4所示显示设备200包括调谐解调器210、通信器220、检测器230、外部装置接口240、控制器250、显示器260、音频输出接口270、存储器、供电电源、用户接口280中的至少一种。控制器包括中央处理器,视频处理器,音频处理器,图形处理器,ram,rom,用于输入/输出的第一接口至第n接口。显示器260可为液晶显示器、oled显示器、触控显示器以及投影显示器中的至少一种,还可以为一种投影装置和投影屏幕。调谐解调器210通过有线或无线接收方式接收广播电视信号,以及从多个无线或有线广播电视信号中解调出音视频信号,如以及epg数据信号。检测器230用于采集外部环境或与外部交互的信号。控制器250和调谐解调器210可以位于不同的分体设备中,即调谐解调器210也可在控制器250所在的主体设备的外置设备中,如外置机顶盒等。
84.在一些实施例中,上述显示设备是具有显示功能的终端设备,例如电视机、手机、电脑、学习机等。
85.在一些实施例中,控制器250,通过存储在存储器上中各种软件控制程序,来控制显示设备的工作和响应用户的操作。控制器250控制显示设备200的整体操作。用户可在显示器260上显示的图形用户界面(gui)输入用户命令,则用户输入接口通过图形用户界面(gui)接收用户输入命令。或者,用户可通过输入特定的声音或手势进行输入用户命令,则用户输入接口通过传感器识别出声音或手势,来接收用户输入命令。
86.输出接口(显示器260,和/或,音频输出接口270),被配置为输出用户交互信息;
87.通信器220,用于与服务器400或其它设备进行通信。
88.在一些实施例中,所述控制器250能够获取流媒体数据,并判断获取的流媒体数据是否为视频帧的数据或音频帧的数据,以及在所述流媒体数据为视频帧的数据或音频帧的数据的情况下,调用获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包并写入缓存队列,最后控制通信器220按照传输包的写入顺序,由先到后依次对缓存队列中的数据进行推流。其中,所述控制器250对所述流媒体
数据进行封装的实现方式可以为:当检测到获取的流媒体数据为视频帧的数据或音频帧的数据的情况下,先配置用于存储传输包的内存空间、将传输包写入所述内存空间的写入方法以及将传输包有内存空间转移到缓存队列的回调方法,为后续封装做好准备工作。当上述准备工作完成后,控制器250开始基于预先设定的封装对所述流媒体数据进行封装,并调用预先配置的写入方法将封装得到的数据包写入预先配置的内存空间中,并实时判断当前音频帧或视频帧的数据是否已封装完,在当前视频帧或音频帧的数据已封装完后,控制器250调用预先配置的回调方法,将内存空间中的传输写入缓存队列中,并清空内存空间中的传输包。
89.因为视频帧的数据量普遍比音频帧的数据量大,因此控制器250配置用于存储传输包的内存空间的方式可以为:当流媒体数据为视频帧的数据时配置一个容量较大(第二容量)的内存空间,当流媒体数据为视频帧的数据时配置一个容量较大(第一容量)的内存空间。又因为在完成封装之前,视频帧或音频帧的传输包的数据量是无法确定的,因此在控制器250将传输包写入内存空间的过程中,很可能会出现内存空间已被先前写入的传输包占满,无法继续写入的情况,所以控制器250需要实时通过检测内存空间剩余容量等方式确定在确定预分配的述内存空间是否能够存储封存当前音频帧或视频帧得到的全部传输包,若不能,则控制器250需要再次进行内存配置,以扩充所述内存空间的容量。
90.在显示设备的网络较差、数据接收端设备网络故障等情况下,显示设备很可能出现无法及时对缓存队列中的数据包进行推流,进而导致缓存队列中的数据包的数据量大于阈值的情况。当缓存队列中的数据包的数据量大于阈值时,控制器250可以将除视频帧的数据以外的其他数据对应的传输包丢弃,且进行数据丢弃的方式可以为:为所述视频帧对应的传输包添加预设标识,需要进行数据丢弃时,按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包。此外,数据接收端设备网络故障、解码资源不足等情况下,数据接收端设备很可能会因为无法正常接收或解码数据发送端设备(显示设备)发送的传输包,进而出现花屏、卡顿、丢包等异常。当数据接收端设备出现传输包解码异常时,数据接收端设备可以向显示设备发送相应的指示信息,以告知显示设备其出现了解码异常。显示设备收到数据接收端设备发送的指示信息后,控制器250可以将封装完成时刻距离当前时刻最近的视频帧一个视频帧对应的传输包发送至数据接收端设备,从而使数据接收端设备快速恢复正常显示。其中,控制器250将封装完成时刻距离当前时刻最近的视频帧一个视频帧对应的传输包发送至数据接收端设备的方式可以为:每次一个完成视频帧的封装时,在将视频帧对应的传输包写入缓存队列的同时,将视频帧对应的传输包写入预设缓存空间中,并替换掉之前写入的视频帧对应的传输包,在需要获取将封装完成时刻距离当前时刻最近的视频帧一个视频帧对应的传输包发送至数据接收端设备时,直接从预设缓存空间中读取。
91.图5为一些实施例中的场景示意图。如图5所示,本发明实施例提供的输出传输方法包括:显示设备200和数据接收端设备500。其中,显示设备200和数据接收端设备500之间建立有通信连接,且在进行输出包传输之前,显示设备200和数据接收端设备500可以通过通信之间的通信连接进行交互,以确定数据传输协议、用于存储传输包的缓存队列的容量、缓存优化策略等信息。显示设备200可以获取流媒体数据,并在确定所述流媒体数据为视频帧或音频帧的数据的情况下,通过获取了封装同步锁的封装线程对所述流媒体数据进行封
装,获取所述视频帧对应的传输包或所述音频帧对应的传输包,将所述视频帧对应的传输包或所述音频帧度对应的传输包写入缓存队列,以及向数据接收端设备500发送所述缓存队列中的传输包。接收端设备500可以接收显示设备发送的推流数据(传输包),并解析接收到的传输包获取视频帧数据和/或音频帧数据以及根据视频帧数据和/或音频帧数据播放多媒体内容。图5中以数据接收端设备500为手机为例示出,但本发明实施例并不限定于此,本发明实施例中的数据接收端设备500还可以为其它类型的设备,例如:数据接收端设备500还可以为电视机、智能手表、个人电脑、掌上电脑等。
92.在图4所示显示设备200的硬件配置框图的基础上,参照图6所示的本发明一个或多个实施例进行数据传输的系统框架图,一方面,显示设备200通过声音采集器601(麦克风)进行音频数据的采集,将采集的声音转换为电信号,从而获取音频数据,通过音频处理器602使用音频滤波、音频增强等方式对声音采集器601采集的音频数据做降噪处理,再通过音频基本流编码模块603对降噪处理后的音频数据进行编码,生成音频数据对应的基本流数据(音频帧)。另一方面,显示设备200还通过图像采集器604进行图像数据的采集,采集的光转换为电信号,从而获取视频数据通过图像数据输出模块605将图像采集器604采集的视频数据输出到纹理级滤镜处理模块606,通过纹理级滤镜处理模块606对视频数据进行滤镜处理,以生成预设色彩模式和预设视频格式的视频数据,再通过视频基本流编码模块607对滤镜处理后的视频数据进行编码,生成视频数据对应的基本流数据(视频帧)。再通过封装模块608对音频帧的数据和视频帧的数据进行封装,获取音频帧或视频帧的对应的传输包,并将封装得到的传输包写入缓存队列609,最后通过通信器220对缓存队列609中的传输包做推流处理,以向数据接收端设备发送实时采集的视频和音频数据。
93.图7为图6所示显示设备200的软件配置示意图,如图7所示,将系统分为四层,从上至下分别为应用程序(applications)层(简称“应用层”),应用程序框架(application framework)层(简称“框架层”),安卓运行时(android runtime)和系统库层(简称“系统运行库层”),以及内核层。内核层至少包含以下驱动中的至少一种:音频驱动、显示驱动、蓝牙驱动、摄像头驱动、wifi驱动、usb驱动、hdmi驱动、传感器驱动(如指纹传感器,温度传感器,压力传感器等)、以及电源驱动等。应用层包括:用于进行视频数据采集的图像采集器(camera)、用于进行音频数据采集的音频采集器(audio record)、用于对将图像采集器采集的视频数据输出到图形数处理器(gpu flinger)的图形数据输出器(surfaceflinger、surfaceview、glsurfaceview、textureview等),用于对视频数据进行处理的图形数处理器(gpu flinger)、用于对音频处理进行降噪的音频数据处理器(audio effect)、用于对基本流数据进行封装的封装器(mux)以及用于进行数据推流的数据输出模块。
94.在图4所示显示设备200的硬件配置框图的基础上,参照图8所示的本发明一个或多个实施例进行数据传输的系统框架图,显示设备200通过调谐解调器210或通信器220接收传输流数据,并通过视频数据处理器801对传输流数据进行解析,获取视频数据对应的基本流数据(视频帧),通过音频数据处理器802对传输流数据进行解析,获取音频数据对应的基本流数据(音频帧),再通过封装模块803对基本流数据做封装处理,获取音频帧和视频帧的对应的传输包,以及将封装得到的传输包写入缓存队列804,最后通过通信器220对缓存队列804中的传输包做推流处理,以实现向数据接收端设备发送从调谐解调器210或通信器220获取的视频数据和音频数据。
95.图6所示系统框架图与图8所示系统框架图的区别之处在于,两个系统框架图中显示设备200获取流媒体数据的方式不同,图6所示系统框架图为视频通信场景下的系统框架图,在图6所示系统框架图中,显示设备获取流媒体数据的方式为通过自身相关硬件和软件生成流媒体数据,而图6所示系统框架图为投屏场景下的系统框架图,在图6所示系统框架图中,显示设备获取流媒体数据的方式为接收其它设备(例如:视频服务器)发送的流媒体数据。图6所示系统框架图与图8所示系统框架图的相同之处在于,两个系统框架图中显示设备200采用了相同的方式对获取的流媒体数据进行封装和传输(本发明实施例提供的数据传输方法),且在对数据进行封装时均可以形成清晰的帧边界,进而支持对封装得到的传输包的优化处理。
96.图9为图8所示显示设备200的软件配置示意图,如图9所示,将系统分为四层,从上至下分别为应用层,应用程序框架层,安卓运行时和系统库层以及内核层。应用层包括:用于接收传输流数据的通信器或调谐解调器、用于对接收的数据进行解析的数据解析器、用于对基本流数据进行封装的封装器(mxu)以及用于进行数据推流的数据输出模块。
97.本发明实施例中提供的数据传输方法,可以在对音频数据或视频数据进行封装时,为流媒体数据设置封装同步锁,从而使只有获取了封装同步锁的线程可以对流媒体数据进行封装,并在完成一个音频帧或视频帧的数据的封装,并将封装得到的传输包写入缓存队列后,才会进行下一个音频帧或视频帧的数据的封装,因此本发明实施例可以在对数据进行封装时形成清晰的帧边界,进而支持对封装得到的传输包的优化处理。
98.为了更加详细的说明本方案,以下将以示例性的方式结合图10进行说明,可以理解的是,图10中所涉及的步骤在实际实现时可以包括更多的步骤,或者更少的步骤,并且这些步骤之间的顺序也可以不同,以能够实现本发明实施例中提供的数据传输方法为准。如图10所示,图10为根据本发明一个或多个实施例实现数据传输方法的步骤流程图,该数据传输方法:
99.s101、获取流媒体数据。
100.在一些实施例中,本发明实施例中的流媒体数据可以为包括一路音频数据和一路视频数据的基本流数据。
101.需要说明的是,本发明实施例中以流媒体数据包括一个音频帧的数据或视频帧的数据为例对本发明实施例提供的数据传输方法进行说明,但可以理解的是本发明实施例中流媒体数据可以是连续且周期性获取的,且因此流媒体数据也可以包括多个音频帧的数据和/或视频帧的数据,当流媒体数据包括多个音频帧的数据和/或视频帧的数据时,可以对依次流媒体数据进行封装,并在每一个音频帧或视频帧的数据封装完整时,将当前封装当前音频帧或视频帧对应的传输包写入缓存队列即可。
102.在一些实施例中,获取流媒体数据的实现方式可以包括:
103.分别通过显示设备的声音采集装置和图像采集装置采集环境声音和环境图像,并根据声音采集装置采集的环境声音和图像采集装置采集的环境图像生成所述流媒体数据。
104.例如:在通过显示设备与数据接收端设备进行视频通话的场景中,显示设备可以分别通过摄像头和麦克风采集用户语音和用户图像,并根据摄像头采集的用户语音和麦克风采集的用户图像生成所述流媒体数据。
105.在一些实施例中,获取流媒体数据的实现方式可以包括:
106.从服务器接收传输流数据,并解析所述传输流数据获取所述流媒体数据。
107.例如:在通过显示设备向数据接收端设备投屏的场景中,设备可以接收视频器服务器发送的传输流数据,并解析视频器服务器发送的传输流数据获取视频数据和音频数据,从而获取所述流媒体数据。
108.s102、确定所述流媒体数据是否为视频帧或音频帧的数据。
109.在一些实施例中确定所述流媒体数据是否为视频帧或音频帧的数据的实现方式可以为:
110.根据所述流媒体数据的数据格式确定所述流媒体数据是否为视频帧或音频帧的数据。
111.在一些实施例中,确定所述流媒体数据是否为视频帧或音频帧的数据的实现方式包括如下步骤a至步骤e:
112.步骤a、判断所述流媒体数据的数据格式是否与视频帧的数据格式匹配。
113.在上述步骤a中,若所述流媒体数据的数据格式与视频帧的数据格式匹配,则执行步骤b。
114.步骤b、确定所述流媒体数据为视频帧的数据。
115.在上述步骤a中,若所述流媒体数据的数据格式与视频帧的数据格式不匹配,则执行如下步骤c。
116.步骤c、判断所述流媒体数据的数据格式是否与音频帧的数据格式匹配。
117.在上述步骤c中,若所述流媒体数据的数据格式与音频帧的数据格式匹配,则执行步骤d。
118.步骤d、确定所述流媒体数据为音频帧的数据。
119.在上述步骤d中,若所述流媒体数据的数据格式与视频帧的数据格式不匹配,则执行如下步骤e。
120.步骤e、确定所述流媒体数据不为视频帧或音频帧的数据。
121.在一些实施例中,当确定所述流媒体数据不为视频帧或音频帧的数据时,显示设备可以跳过对所述流媒体数据的封装处理,直接通过通信协议发送所述流媒体数据。例如:当获取的流媒体数据为字幕数据时,显示设备可以跳过对所述流媒体数据的封装处理,直接通过通信协议发送字幕数据。
122.在一些实施例中,当确定所述流媒体数据不为视频帧或音频帧的数据时,显示设备可以丢弃所述流媒体数据。
123.在一些实施例中,显示设备可以根据流媒体数据所携带的数据类型标识确定所述流媒体数据是否为视频帧或音频帧的数据。
124.在上述步骤s102中,若确定所述流媒体数据为视频帧或音频帧的数据则执行如下步骤s103。
125.s103、通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,并将所述视频帧或所述音频帧对应的传输包写入缓存队列。
126.本发明实施例中的同步锁机制是一种保证目标数据在同一时刻最多只能被一个线程使用的机制。同步锁的基本实现原理为:在目标数据中保存一个同步锁,当没有线程访
问目标数据时,保存在目标数据中的同步锁是空的,相应设备中的任意线程可以直接访问目标数据;当第一个线程访问目标数据时,保存在目标数据中的同步锁会保存该线程的标识,并允许该线程进行目标数据的访问,在当前线程释放目标数据之前,如果再有其他线程想要访问目标数据,则需要等待同步锁释放,在当前线程释放目标数据之后,保存在目标数据中的同步锁会释放该线程的标识,并下一个线程访问目标数据时保存下一个访问目标数据的线程的标识。
127.在一些实施例中,可以为所述流媒体数据配置一个封装同步锁(monitor),当封装同步锁被占用时流媒体数据会处于锁定状态,封装线程执行封装指令时尝试获取封装同步锁的所有权的过程可以如下:
128.如果封装同步锁的进入数为0,则当前封装线程允许进入封装同步锁,然后将进入数设置为1,当前线程即为封装同步锁的所有者,可以访问流媒体数据,并执行封装处理。
129.如果其他封装线程已经占用了封装同步锁,则当前封装线程进入阻塞状态,直到封装同步锁的进入数为0,再重新尝试获取封装同步锁的所有权。
130.由于本发明实施例仅会通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,并将所述视频帧或所述音频帧对应的传输包写入缓存队列,因此缓存队列中的传输包可以如图11所示。图11所示,缓存队列包括:音频帧n-1、音频帧n、视频帧n-1以及、视频帧n的传输包,且音频帧n-1、音频帧n、视频帧n-1、视频帧n的传输范围没有交叉,形成了清晰的帧边界。
131.在一些实施例中,通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,并将所述视频帧或所述音频帧对应的传输包写入缓存队列的实现过程可以包括如下步骤:
132.步骤1、配置用于存储对数据进行封装得到的传输包的内存空间,用于将对数据进行封装得到的传输包写入所述内存空间的写入方法,以及用于将所述内存空间中的传输包写入所述缓存队列的回调方法。
133.在一些实施例中,配置用于存储对数据进行封装得到的传输包的内存空间的实现方式包括:
134.在所述流媒体数据为音频帧的数据的情况下,为所述音频帧分配容量为第一容量的内存空间;
135.在所述流媒体数据为视频帧的数据的情况下,为所述视频帧分配容量为第二容量的内存空间;
136.其中,所述第二容量大于所述第一容量。
137.示例性的,第一容量可以为512byte,第二容量可以为1024byte。
138.由于不同的音频帧或视频帧对应的传输包的数据量是不确定的,且一般情况下视频帧对应的传输包的数据量大于音频帧对应的传输包的数据量,为了避免内存空间的浪费,本发明实施例在每次输入一帧音频帧或视频帧的数据时,先根据数据类型申请内存空间,且该内存空间的初始大小与根据音频帧或视频帧类型有所区分。例如:当数据为视频帧数据时内存空间的初始容量和可以为1024byte,当数据为音频帧数据时内存空间的初始容量和可以为512byte。
139.在一些实施例中,本发明实施例提供的数据传输方法还包括:
140.在确定为所述流媒体数据分配的所述内存空间的容量小于所述传输包的数据量的情况下,扩充为所述流媒体数据分配的所述内存空间的容量。
141.例如:对于一帧数据量为10540byte的视频帧,若通过mpeg-ts的格式封装格式对该视频帧进行封装,则至少输出为57个188byte的传输包,即该视频帧对应的传输包的数据量至少为10716byte,而为该视频帧分配的内存空间的初始容量仅为1024byte,为该视频帧分配的内存空间的初始容量小于该视频帧对应的传输包的数据量,因此需要扩充为所述流媒体数据分配的所述内存空间的容量。
142.上述实施例音频帧或视频帧对应的传输包写入内存空间的过程中,若发现分配的内存空间的容量小于需要写入的传输包的数据量,则动态申请扩充内存空间的容量,相比于为音频帧或视频帧分配容量较大的初始内存空间,动态申请扩充内存空间的容量可以避免内存空间的浪费,进而提升显示设备的内存资源利用率。
143.在一些实施例中,可以在用于将对数据进行封装得到的传输包写入所述内存空间的写入方法中配置动态内存的扩充的方法,进而通过用于将对数据进行封装得到的传输包写入所述内存空间的写入方法动态扩充内存。
144.步骤2、根据预设封装格式对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包。
145.本发明实施例中的预设封装格式可以为任一种封装格式,本发明实施例对此不做限定。在一些实施例中,所述预设封装格式可以为mpeg-ts格式。
146.步骤3、通过所述写入方法依次将对数据进行封装得到的传输包写入所述内存空间,并实时判断所述视频帧或所述音频帧对应的传输包是否已全部写入所述内存空间。
147.由于每次在确定获取的流媒体数据为音频帧或视频帧的数据时,显示设备均配置了用于存储对数据进行封装得到的传输包的内存空间和用于将对数据进行封装得到的传输包写入所述内存空间的写入方法,因此显示设备可以直接通过所述写入方法将封装音频帧或视频帧的数据得到的传输包写入所述内存空间中。
148.在一些实施例中,实时判断所述视频帧或所述音频帧对应的传输包是否已全部写入所述内存空间的实现方式可以包括:
149.在将任一传输包写入所述内存空间时,判断所述视频帧或所述音频帧对应的传输包是否已全部写入所述内存空间。
150.在上述步骤3中,若所述视频帧或所述音频帧对应的传输包未全部写入所述内存空间中,则继续进行封装和写入操作,直到若所述视频帧或所述音频帧对应的传输包全部写入所述内存空间;若所述视频帧或所述音频帧对应的传输包已全部写入所述内存空间,则执行如下步骤4。
151.步骤4、通过所述回调方法将所述内存空间中的传输包写入缓存队列,并释放所述内存空间。
152.上述实施例在将所述内存空间中的传输包写入所述缓存队列后及时释放内存空间,可以避免封装线程长时间占用内存空间,进而提升显示设备的内存资源的利用率。
153.s104、向数据接收端设备发送所述缓存队列中的传输包。
154.在一些实施例中,显示设备可以按照传输包写入所述缓存队列的先后顺序,由先到后依次向数据接收端设备发送所述缓存队列中的传输包,从而向所述数据接收端设备发
送所述显示设备获取的所述流媒体数据。
155.本发明实施例提供的显示设备和数据传输方法在获取流媒体数据后,首先确定所述流媒体数据是否为视频帧或音频帧的数据,并在所述流媒体数据为视频帧或音频帧的数据的情况下通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,获取所述视频帧或所述音频帧对应的传输包,以及将所述视频帧或所述音频帧对应的传输包写入缓存队列,最后向数据接收端设备发送所述缓存队列中的传输包,以向所述数据接收端设备发送所述流媒体数据。由于本发明实施例在确定流数据为视频帧或音频帧的数据的情况下,会通过获取了封装同步锁的封装线程对所述流媒体数据进行封装,进而获取对应的传输包,而同步锁机制在同一时刻只允许单一线程对流媒体数据进行封装,因此只有在完成了当前音频帧或视频帧的数据的封装,并将当前音频帧或视频帧对应的数据包写入缓存队列后,才会进行下一个音频帧或视频帧的数据的封装,因此本发明实施例可以在对数据进行封装时形成清晰的帧边界,进而支持对封装得到的传输包的优化处理。
156.在一些实施例中,本发明实施例提供的数据传输方法还包括:
157.在所述流媒体数据为视频帧的数据的情况下,为视频帧对应的传输包添加预设标识;当所述缓存队列的数据量大于阈值数据量时,按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包。
158.具体的,缓存队列中的数据包主要包括音频帧对应的传输包和视频帧对应的传输包,而上述实施例为视频帧对应的传输包了添加所述预设标识,因此按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包,即为:按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃各个音频帧对应的传输包,直到所述缓存队列的数据量小于或等所述阈值数据量。
159.示例性的,参照图12所示,缓存队列中依次写入的传输包为传输包1至传输包30。其中,传输包1至传输包10为视频帧a的传输包,携带有预设标识,传输包11至传输包15为音频帧b的传输包,未携带预设标识,传输包16至传输包25为视频帧c的传输包,携带有预设标识,传输包26至传输包30为音频帧d的传输包,未携带预设标识。当所述缓存队列的数据量大于阈值数据量时,先丢弃最先写入缓存队列中且未携带预设标识的传输包(传输包11-15),然后重新判断所述缓存队列的数据量大于阈值数据量,若所述缓存队列的数据量仍大于阈值数据量,则再次丢弃最先写入缓存队列中且未携带预设标识的传输包(传输包26-30)。
160.在一些实施例中,所述预设标识可以为关键帧标识(i帧标识),且所述预设标识可以通过结构体(struct)的方式添加所述缓存队列中。
161.具体的,结构体是一种数据结构,是c语言中聚合数据类型(aggregate data type)的一类,其可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。在一些实施例中,可以将预设标识和视频帧对应的传输包聚合为结构体,并结构体成员列表(member-list)列出预设标识和视频帧对应的各个传输包。
162.在一些实施例中,确定所述缓存队列的数据量是否大于阈值数据量的实现方式可以包括:
163.确定所述缓存队列中的传输包对应的视频帧的播放时长是否大于预设时长,若确定缓存队列中的传输包对应的视频帧的播放时长大于预设时长,则确定所述缓存队列的数
据量大于阈值数据量。
164.例如:判断所述缓存队列中的传输包对应的视频帧的播放时长是否超过2秒,若所述缓存队列中的传输包对应的视频帧的播放时长超过2秒,则很可能出现了数据接收端设备网络异常,或传输包解码出现异常的问题,因此显示设备由先到后依次丢弃缓存队列中不包含所述预设标识的传输包。
165.在一些实施例中,确定所述缓存队列的数据量是否大于阈值数据量的实现方式可以包括:
166.确定用于存储所述缓存队列的内存空间的剩余容量,当用于存储所述缓存队列的内存空间的剩余容量小于或等于阈值容量(例如:0byte),则确定所述缓存队列的数据量大于阈值数据量。
167.上述实施例在所述缓存队列的数据量大于阈值数据量的情况下,按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包,因此上述实施例可以在降低传输传输延迟的同时,保留缓存队列中视频帧对应的传输包,进而在一定程度上避免数据接收端设备出现花屏等问题。
168.在一些实施例中,所述数据接收端设备可以将接收到的传输包存储于所述数据接收端设备构建的缓存队列中,并在所述数据接收端设备构建的缓存队列的数据量过多时,基于预设优化策略丢弃其中的至少一部分传输包。在这种场景下,显示设备只需要依次对所述缓存队列中的传输包进行推流即可,无需判断所述缓存队列中的传输包是否过多,也无需在缓存队列中的传输包过多时按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包。这种场景下,所述数据接收端设备可以通过指定方式指示显示设备仅依次对所述缓存队列中的传输包进行推流,而不对缓存队列中的传输包做其他处理。
169.在一些实施例中,所述显示设备可以与所述数据接收端设备预先约定,从而使显示设备只依次对自身构建的缓存队列中的传输包进行推流,而不判断自身构建的缓存队列中的传输包是否过多,也不在缓存队列中的传输包过多时按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包。
170.在一些实施例中,所述数据接收端设备可以向所述显示设备发送指示信息,以指示显示设备只依次对自身构建的缓存队列中的传输包进行推流,而不判断自身构建的缓存队列中的传输包是否过多,也不在缓存队列中的传输包过多时按照所述缓存队列中各个传输包的写入顺序,由先到后依次丢弃不包含所述预设标识的传输包。示例性的,指示信息可以为应用控制协议(session description protocol,sdp)字段、实时流协议(real time streaming protocol)字段等,本发明实施例对此对做限定,实际使用中可以根据显示设备与所述数据接收端设备之间的数据传输协议使用进行扩展。
171.在一些实施例中,所述数据传输方法还包括:
172.接收所述数据接收端设备发送的指示信息,所述指示信息用于指示所述数据接收端设备传输包解码异常;
173.获取最新视频帧对应的传输包,所述最新视频帧为封装完成时刻距离当前时刻最近的视频帧;
174.向所述数据接收端设备发送所述最新视频帧对应的传输包。
175.即,当数据接收端设备通过指示信息告知显示设备所述数据接收端设备传输包解码异常时,所述显示设备获取最新完成封装的视频对应的传输包,并将最新完成封装的视频对应的传输包发送给数据接收端设备。
176.上述实施例提供的数据传输方法中,显示设备接收到数据接收端设备发送的用于指示所述数据接收端设备传输包解码异常的指示信息时,显示会获取封装完成时刻距离当前时刻最近的视频帧对应的传输包,并向所述数据接收端设备发送所述最新视频帧对应的传输包,因此上述实施例提供的数据传输方法可以避免数据接收端设备在播放视频时长时间花屏。
177.在一些实施例中,显示获取封装完成时刻距离当前时刻最近的视频帧的传输包(最新视频帧对应的传输包)的实现方式包括:
178.在为所述传输包添加预设标识之后,判断预设缓存空间中是否具有缓存数据;
179.若所述预设缓存空间中具有缓存数据,则清空所述预设缓存空间中的缓存数据,并将所述传输包写入所述预设缓存空间中;
180.若所述预设缓存空间中没有缓存数据,则将所述传输包写入所述预设缓存空间中;
181.读取所述预设缓存空间中的传输包作为所述最新视频帧对应的传输包。
182.示例性的,参照图13所示,当显示设备200接收到数据接收端设备500发送的指示信息时,显示设备从预设存储空间201中读取最新视频帧对应的传输包,并将最新视频帧对应的传输包发送至数据接收端设备500。
183.由于在为所述传输包添加预设标识之后,显示会先判断预设缓存空间中是否具有缓存数据(上一个视频帧对应的传输包);且在所述预设缓存空间中具有缓存数据的情况下,清空所述预设缓存空间中的缓存数据,并将所述传输包写入所述预设缓存空间中;在所述预设缓存空间中没有缓存数据的情况下,将所述传输包写入所述预设缓存空间中,因此上述实施例可以保证预设缓存空间时刻存储的数据都是成时刻距离当前时刻最近的视频帧对应的传输包,进而是显示可以方便、快捷的获取封装完成时刻距离当前时刻最近的视频帧对应的传输包。
184.本发明实施例提供还提供了一种计算机可读存储介质,该计算机可读存储介质上存储计算机程序,该计算机程序被处理器执行时实现上述数据传输方法执行的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
185.其中,该计算机可读存储介质可以为只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等。
186.本发明提供一种计算机程序产品,其特征在于,包括:当所述计算机程序产品在计算机上运行时,使得所述计算机实现上述的数据传输方法。
187.为了方便解释,已经结合具体的实施方式进行了上述说明。但是,上述在一些实施例中讨论不是意图穷尽或者将实施方式限定到上述公开的具体形式。根据上述的教导,可以得到多种修改和变形。上述实施方式的选择和描述是为了更好的解释原理以及实际的应用,从而使得本领域技术人员更好的使用实施方式以及适于具体使用考虑的各种不同的变形的实施方式。
188.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽
管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1