播放方法及其装置、介质、终端与流程

文档序号:16202414发布日期:2018-12-08 06:44阅读:138来源:国知局
播放方法及其装置、介质、终端与流程

本发明涉及互联网技术领域,尤其是涉及一种播放方法及其装置、介质、终端。

背景技术

随着科学技术的发展及人民生活水平的提高,视频作品已经成为人们工作、学习、社交以及休闲娱乐不可替代的重要方式,并且,人们对于视频的播放要求也越来越高。

目前,在用户需要将多个视频连续播放时,需要将所要播放的视频文件添加到播放器的播放列表中,依次播放。当多个视频文件的封装格式不同时,播放器需要根据视频信息换取不同的解码器,以实现对视频解码并播放。但是在切换解码器的过程中,前后视频衔接的地方连续性较差,甚至会出现短暂的黑屏,导致视频播放的中断,严重影响了用户体验。

现有视频间切换播放时的连续性有待提升。



技术实现要素:

本发明实施例解决的技术问题是提升视频播放的连续性。

为解决上述技术问题,本发明实施例提供一种播放方法,包括:在数据包集合之间插入空数据包,一个所述数据包集合内的数据包的编码方式相同;结合所述空数据包的位置对所述数据包集合中的数据包进行解码,以得到适于播放的播放数据。

可选的,在所述数据包集合之间插入空数据包之前,还包括:解封装多个待播放文件,得到所述待播放文件中的数据包,每个所述待播放文件中的数据包分为一个或多个数据包集合。

可选的,所述数据包根据数据类型分为音频数据包集合和视频数据包集合。

可选的,所述在数据包集合之间插入空数据包包括:将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列;在数据包队列的数据包集合之间插入空数据包。

可选的,所述将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列包括以下至少一种:将解封装得到的音频数据包集合存入音频数据包队列;将解封装得到的视频数据包集合存入视频数据包队列。

可选的,将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列包括:确定存入所述数据包队列的数据包未超过存入的数据包队列的容量上限。

可选的,所述解封装多个待播放文件包括:获取所述待播放文件,所述待播放文件包括文件头部信息和原始文件数据;读取所述文件头部信息,以确定对应的解复用器,所述解复用器用于解封装所述原始文件数据。

可选的,所述原始文件数据包括音频数据和视频数据中至少一种,所述数据包集合包括音频数据包集合和视频数据包集合中至少一种,其中,所述音频数据包集合包括解封装所述待播放文件得到的与音频数据部分的数据包,所述视频数据包集合包括解封装所述待播放文件得到的与视频数据部分的数据包。

可选的,所述解封装多个待播放文件包括:解封装线程按照预设的顺序依次解封装待播放文件。

可选的,结合所述空数据包的位置对所述数据包集合中的数据包进行解码包括:判断所述数据包为空数据包或非空数据包;当所述数据包为非空数据包时,利用解码器解码所述非空数据包,以得到所述播放数据,所述解码器与待播放文件的文件头部信息相对应;当所述数据包为空数据包时,确定解码下一数据包所需的解码器。

可选的,通过判断所述数据包位置信息是否大于等于零,判断所述数据包为空数据包或非空数据包。

可选的,对所述数据包进行解码后,还包括:将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列,以等待播放。

可选的,所述将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列包括:确定添加至所述待播放队列的播放数据未超过所述待播放队列容量上限。

可选的,所述数据包包括音频数据包和视频数据包,所述播放数据包括音频采样数据和视频帧数据,所述待播放队列包括音频采样数据队列和视频帧数据队列;所述将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列包括以下至少一种:将解码所述音频数据包得到的所述音频采样数据添加至所述音频采样数据队列;将解码所述视频数据包得到的所述视频帧数据添加至所述视频帧数据队列。

可选的,解码所述音频数据包和解码所述视频数据包通过不同的线程并行进行。

可选的,所述播放数据包括音频采样数据和视频帧数据,所述得到适于播放的播放数据后,还包括:同步所述音频采样数据和视频帧数据;输出所述音频采样数据和视频帧数据,以运行播放。

本发明实施例还提供了一种播放装置,其特征在于,包括:插入单元,适于在数据包集合之间插入空数据包,一个所述数据包集合内的数据包的编码方式相同;解码单元,适于结合所述空数据包的位置对所述数据包集合中的数据包进行解码,以得到适于播放的播放数据。

可选的,还包括:解封装单元,适于在所述数据包集合之间插入空数据包之前,解封装多个待播放文件,得到所述待播放文件中的数据包,每个所述待播放文件中的数据包分为一个或多个数据包集合。

可选的,所述插入单元包括:数据包存入子单元,适于将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列;插入子单元,适于在数据包队列的数据包集合之间插入空数据包。

可选的,所述解封装单元包括:数据文件获取子单元,适于获取所述待播放文件,所述待播放文件包括文件头部信息和原始文件数据;头部信息读取子单元,适于读取所述文件头部信息,以确定对应的解复用器,所述解复用器用于解封装所述原始文件数据。

可选的,所述解码单元包括:数据包判断子单元,适于判断所述数据包为空数据包或非空数据包;解码子单元,适于当所述数据包为非空数据包时,利用解码器解码所述非空数据包,以得到所述播放数据,所述解码器与待播放文件的文件头部信息相对应;切换子单元,适于当所述数据包为空数据包时,确定解码下一数据包所需的解码器。

可选的,还包括:播放数据添加单元,适于对所述数据包进行解码后,将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列,以等待播放。

可选的,所述数据包包括音频数据包和视频数据包,所述播放数据包括音频采样数据和视频帧数据,所述待播放队列包括音频采样数据队列和视频帧数据队列;所述播放数据添加单元包括以下至少一种子单元:音频数据添加子单元,适于将解码所述音频数据包得到的所述音频采样数据添加至所述音频采样数据队列;视频数据添加子单元,适于将解码所述视频数据包得到的所述视频帧数据添加至所述视频帧数据队列。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机指令,,所述计算机指令运行时执行所述播放方法的步骤。

本发明实施例还提供一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行所述播放方法的步骤。

与现有技术相比,本发明实施例的技术方案具有以下有益效果:

本发明实施例中,通过在所述数据包集合之间插入空数据包,结合所述空数据包的位置对所述多个数据文件进行解码,以得到适于播放的视频数据。从而,本发明在数据包集合之间插入一个空数据包,以区分空数据包前后两个数据包所属不同数据包集合。故在本发明实施例中,响应于读取到空数据包,切换为下一数据包对应的解码器,也即,在本发明实施例中,可以在解码过程中确定下一数据包所需的解码器。相较于每次读取数据包所在的待播放文件时确定解码器,本发明实施例中的解码器确定过程效率更高,从而可以确保解码流程的正常进行,解决视频切换播出时出现的黑屏现象。

进一步,在解封装后,将解封装得到的数据包存入数据包队列,按照解封装顺序依次存放,从而可以使得解码线程按照顺序进行解码,并且可以支持解码线程按照对应的顺序在读取到空数据包时确定下一数据包集合的解码器,进而可以提前获取下一解码数据包集合所需的解码器,从而可以提升播放效果。

进一步,将解封装得到的数据包集合存入数据包队列后,确定存入所述数据包队列的数据包数量未超过存入的数据包队列的容量上限,避免在超过容量上限后继续解封装数据文件使得解封得到的数据包丢失,从而影响播放效果。

进一步,通过提前解码数据包,并将解码得到的播放数据添加到待播放队列,从而在播放的时候无需等待解码,提升了视频播放的连续性,进而提升了用户体验。

附图说明

图1是本发明实施例中一种播放方法的的流程图;

图2是本发明实施例中一种解封装数据文件的流程图;

图3是本发明实施例中一种插入空数据包的流程图;

图4是本发明实施例中一种数据包存入数据包队列的流程图;

图5是本发明一具体实施例中解码待播放文件的流程图;

图6是本发明实施例中一种解码数据包的流程图;

图7是本发明实施例中一种播放数据存入待播放队列的流程图;

图8是本发明一具体实施例中解码数据包的流程图;

图9是本发明一具体实施例中播放待播放文件的流程图;

图10是本发明实施例中一种播放装置的结构示意图;

图11是本发明实施例中一种插入单元的结构示意图;

图12是本发明实施例中一种数据包存入子单元的结构示意图;

图13是本发明实施例中一种解封装单元的结构示意图;

图14是本发明实施例中一种解码单元的结构示意图;

图15是本发明实施例中一种播放数据添加单元的结构示意图。

具体实施方式

如背景技术所述,现有视频切换播放时的连续性有待提升。

在一种视频播放过程中,通过待播放文件的文件头部信息确定需要用到的解封装器和解码器,解封装器将原始数据文件解封,得到数据包,所述数据包构成一个或多个数据包集合。在解码的时候,应用解封装之前得到的解码器,对数据包进行解码。当需要连续播放多个待播放文件的时候,尤其是当多个待播放文件的编码方式不同时,为了解码的正常进行,需要在等待一个待播放文件得到的数据包完全解码结束后再进行下一个待播放文件的解封装以及解码。从而,在播放的时候,由于解码流程的中断,前后待播放文件衔接的地方有短暂的播放数据缺失,从而出现黑屏现象,影响用户体验。

在本发明实施例中,通过在所述数据包集合之间插入空数据包,结合所述空数据包的位置对所述多个数据文件进行解码,以得到适于播放的视频数据。从而,本发明在数据包集合之间插入一个空数据包,以区分空数据包前后两个数据包所属不同数据包集合。与需要等待前一待播放文件的数据包解码结束后,再确定下一待播放文件的解封装器与解码器,以进行解码解封装的方案相比,本发明在前后两个待播放文件解封装得到的数据包集合之间插入一个空数据包,解码的时候,响应于读取到空数据包,切换为下一数据包对应的解码器,也即,在本发明实施例中,可以在解码过程中确定下一数据包所需的解码器。相较于每次读取数据包所在的待播放文件时确定解码器,本发明实施例中的解码器确定过程效率更高,从而可以确保解码流程的正常进行,解决视频切换播出时出现的黑屏现象。

为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。

图1是本发明实施例中一种播放方法的流程图,具体可以包括如下步骤:

步骤s11,在数据包集合之间插入空数据包,一个所述数据包集合内的数据包的编码方式相同;

步骤s12,结合所述空数据包的位置对所述数据包集合中的数据包进行解码,以得到适于播放的播放数据。

数据包集合包括多个数据包,在具体实施中,数据包集合可以来源于不同的待播放文件,不同的待播放文件的封装格式可以相同或者不同。数据包集合可以是解封装一个待播放文件得到的。通常,一个所述数据包集合内的数据包的编码格式相同,解封装不同待播放文件得到的数据包集合的编码格式可以相同或者不同。在具体实施中,解码是编码的逆向过程,通过将压缩编码后形成的数据包进行解码,得到适于播放的播放数据。

在一些应用场景中,因为教学视频录制与教学互动的原因,需要连续播放多个播放文件。在连续播放多个播放文件时,需要对播放文件进行解码解封装。由于录制时间设备可能不同,播放文件的封装格式,或者编码格式也可能各不相同,常见的封装格式有mp4、fla、avi等,常见的编码格式有ascii、ansi、gbk、gb2312、utf-8、gb18030和unicode等。因而,在解封装后得到的数据包的编码方式可以不同。由于在播放文件切换时,需要更换解封装器与解码器,此时,用以播出的播放数据会有缺失,从而会出现短暂的黑屏。

在本发明实施例中,获取多个数据包集合,在数据包集合之间插入空数据包,以区分空数据包前相邻两个数据包所属不同数据包集合,在解码的时候,通过判断获取的为空数据包,切换为下一数据包的解码器,相较于在读取待播放文件时确定解码器,本发明实施例中的解码器确定效率更高,从而可以确保解码流程的正常进行,解决多个待播放文件切换播出时出现的黑屏现象。

在具体实施中,切换为下一数据包的解码器可以通过以下方式实现。

读取待播放文件时得到的解码器可以存储于存储位或解码器列表中。当存储位或解码器列表只允许存储两个解码器时,根据存储位或解码器列表中存入的第一个解码器解码第一个待播放文件得到的数据包,同时存储位或解码器列表中存放有解码第二个待播放文件对应的解码器。当第二个待播放文件已经读完,且第一个待播放文件得到的数据包还未解码完成,则停止继续读取下一个待播放文件。在第一个待播放文件得到的数据包读取完毕后,获取存储位或解码器列表中对应于第二个待播放文件的解码器解码第二个待播放文件对应的数据包后,进行第三个待播放文件的读取,同时存入第三个待播放文件对应的解码器至存储位或解码器列表。从第一个待播放文件对应的解码器切换到第二个待播放文件对应的解码器可以通过读取到两个待播放文件的数据包集合之间插入的空数据包切换,即,当读取到空数据包时,则获取存储位或解码器列表中的解码器。当存储位或解码器列表中可以存储多个解码器时,不同待播放文件对应的解码器的存入顺序与待播放文件的读取顺序相同,解码数据包的快慢不影响待播放文件的读取。

继续参考图1,在数据包集合之间插入空数据包之前,还可以包括:步骤s13,解封装多个待播放文件,得到所述待播放文件中的数据包,每个所述待播放文件中的数据包分为一个或多个数据包集合。

在具体实施中,待播放文件可以包括视频数据和音频数据,或者待播放文件也可以只包括视频数据或音频数据。因此,通过解封装待播放文件得到的数据包构成的数据包集合可以为一个或多个。具体的,根据解封装后得到的数据包数据类型的不同,数据包集合可以分为音频数据包集合和视频数据包集合。其中,音频数据包集合包括一个或多个音频数据包,视频数据包集合包括一个或多个视频数据包。

在具体实施中,解封装待播放文件可以在一个独立的线程,解封装线程可以按照预设的顺序依次解封装待播放文件。

预设的顺序可以是用户将多个待播放文件添加到播放器库的顺序。具体的,用户通过选择待播放文件,将其添加到播放器库,在解封装线程中,按照待播放文件在播放器库中排列的先后顺序对待播放文件进行解封装,以得到数据包。

参考图2,在具体实施中,解封装多个待播放文件,可以包括:

步骤s21,获取所述待播放文件,所述待播放文件包括文件头部信息和原始文件数据;

步骤s22,读取所述文件头部信息,以确定对应的解复用器,所述解复用器用于解封装所述原始文件数据。

在具体实施中,通过将描述数据写入原始文件数据的文件头,以得到包括描述数据和原始文件数据的完整待播放文件,所述描述数据为所述文件头部信息。将描述数据写入文件头的过程叫做封装。其中,描述数据包括编码类型、时间等。如前所述,常见的封装格式有mp4、fla、avi等。解封装不同封装格式的待播放文件需要用到参数不同的解复用器,通过读取待播放文件的文件头部信息,可确定待播放文件的封装格式,从而确定需要用的解封装器。

在具体实施中,所述原始文件数据包括音频数据和视频数据中至少一种,所述数据包集合包括音频数据包集合和视频数据包集合中至少一种,其中,所述音频数据包集合包括解封装所述待播放文件得到的与音频数据部分的数据包,所述视频数据包集合包括解封装所述待播放文件得到的与视频数据部分的数据包。

具体的,解封装只包括音频数据的原始文件数据后得到的数据包为音频数据包,该音频数据包构成音频数据包结合,解封装只包括视频数据的原始文件数据后得到的数据包为视频数据包,该视频数据包构成视频数据包集合,相应的,若原始数据文件既包括音频数据,也包括视频数据,则解封装后得到的数据包包括音频数据包和视频数据包,所述音频数据包构成音频数据包集合,所述视频数据包构成视频数据包集合。

在具体实施中,读取文件头部信息,确定对应的解复用器的同时,还确定解码数据包的解码器。获取的解码器可以存入存储位或者解码器列表,所述存储位或解码器列表可以存储两个或多个解码器。

在具体实施中,通过解封装得到的数据包可以存入数据包队列,为了区分存入数据包队列的数据包属于不同的待播放文件,需要在数据包队列的数据包集合之间插入空数据包,具体的,参考图3,在数据包集合之间插入空数据包可以包括:

步骤s31,将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列;

步骤s32,在数据包队列的数据包集合之间插入空数据包。

其中,队列为一种特殊的线性表,只允许在表的前端进行删除操作,在表的后端进行插入操作。

通过将得到的数据包存入数据包队列,在对数据包进行解码的时候,可以按照解封装的顺序获取数据包进行解码,确保数据包获取顺序正确,以保证视频数据和音频数据的正常播放。

如前所述,数据包集合包括多个数据包,将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列,可以是在解封装得到一个数据包就将该数据包添加到数据包队列,然后继续解封装得到下一数据包。在其他具体实施中,将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列,也可以是等待一个带播放文件解封装完成后,再将得到的数据包添加到数据包队列。

在具体实施中,插入空数据包为在一个待播放文件解封装完成后,在数据包队列中插入一个空数据包,在插入空数据包后再进行下一数据文件的解封装。

如前所述,原始数据文件可以包括音频数据、视频数据或音频数据和视频数据,因此,解封装后得到的数据包集合可以包括一个或多个,将解封装后得到的数据包集合可以存入一个或多个数据包队列。具体的,参考图4,将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列可以包括以下至少一种:

步骤s41,将解封装得到的音频数据包集合存入音频数据包队列;

步骤s42,将解封装得到的视频数据包集合存入视频数据包队列。

在具体实施中,若原始数据文件解封装后只得到了音频数据包,所述音频数据包构成音频数据包集合,将所得到的音频数据包集合中的音频数据包存入音频数据包队列,若原始数据文件解封装后只得到了视频数据包,所述视频数据包构成视频数据包集合,则将所得到的视频数据包集合中的视频数据包存入视频数据包队列,若原始数据文件解封装后得到了音频数据包和视频数据包,所述音频数据包和视频数据包分别构成音频数据包集合和视频数据包集合,则将得到的音频数据包集合中的音频数据包和视频数据包集合中的视频数据包分别存入音频数据包队列和视频数据包队列。

进一步地,将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列可以包括:确定存入所述数据包队列的数据包未超过存入的数据包队列的容量上限。若存入所述数据包队列内的数据包超过存入的数据包队列的容量上限,则停止继续解封所述原始数据文件。

具体的,原始数据文件只包括音频数据,则只需要确认解封装后存入音频数据包队列的音频数据包是否超过音频数据包队列的容量上限,若超过所述音频数据包队列的容量上限,则停止继续解封原始数据文件;原始数据文件只包括视频数据,则只需要确定解封装后存入视频数据包队列的视频数据包是否超过视频数据包队列的容量上限,若超过所述视频数据包队列的容量上限,则停止继续解封原始数据文件;若原始数据文件包括音频数据和视频数据,则需要同时确认解封装后存入音频数据包队列的音频数据包是否超过音频数据包队列的容量上限和存入视频数据包队列的视频数据包是否超过视频数据包队列的容量上限,若超过音频数据包队列的容量上限或视频数据包队列的容量上限,则停止继续解封原始数据文件。

图5是本发明一具体实施例中解码待播放文件的流程图。现结合图1至图5做进一步说明。

如图5所示,当用户需要播放多个待播放文件的时候,按照设定顺序获取待播放文件,步骤s51读取待播放文件的文件头部信息,确定对应的解封装器和解码器。待播放文件包括文件头部信息和原始数据文件。所述原始数据文件包括音频数据和视频数据,或者,所述原始数据文件可以只包括音频数据或视频数据。

进一步的,步骤s52解封装原始数据文件。如前所述,当原始数据文件同时包括视频数据和音频数据,解封装可以得到音频数据包和视频数据包,所述音频数据包组成音频数据包集合,所述视频数据包组成视频数据包集合。在其他具体实施例中,可以只得到音频数据包集合或视频数据包集合。

进一步的,步骤s54数据包存入数据包队列。解封装待播放文件得到的数据包可以存入数据包队列。如前所述,解封装原始数据文件可以只得到音频数据包或视频数据包。因此,解封装后将得到的数据包存入数据包队列,可以只包括将解封装得到的音频数据包集合存入音频数据包队列和将解封装得到的视频数据包集合存入视频数据包队列中的一种。

进一步的,步骤s55判断是否超过数据包队列的容量上限。将获得的数据包存入数据包队列后,需要判断存入数据包队列的数据包是否超过存入的数据包队列的容量上限。具体的,若存入所述数据包队列的数据包未超过存入的数据包队列的容量上限,则继续级封装原始数据文件,若所述数据包队列的数据包已超过所述数据包队列的容量上限,则停止继续解封装原始数据文件,步骤s56等待不超过数据包队列的容量上限。

在本具体实施例中,在解封装原始数据文件的过程中,还包括步骤s53判断原始数据文件是否解封装完成。若原始数据文件未解封装完成,则继续解封装原始数据文件,并将解封装得到的数据包存入数据包队列,若原始数据文件已解封装完成,则在数据包队列的数据包集合之间插入空数据包。在插入空数据包的同时,读取下一待播放文件的文件头部信息,进行下一待播放数据文件的解封装操作。

在具体实施中,播放的数据为进行解码后的数据,结合参考图1和图6,步骤s12中结合所述空数据包的位置对所述数据包集合中的数据包进行解码包括:

步骤s61,判断所述数据包为空数据包或非空数据包;

步骤s62,当所述数据包为非空数据包时,利用解码器解码所述非空数据包,以得到所述播放数据,所述解码器与待播放文件的文件头部信息相对应;

步骤s63,当所述数据包为空数据包时,确定解码下一数据包所需的解码器。

在具体实施中,空数据包为空的结构体,为一种空的数据结构。通过判断数据包的位置信息是否大于等于零,从而判断所述数据包为空数据包或非空数据包。具体的,当获取的数据包的位置信息大于等于零,则所获取的数据包为非空数据包,若获取的数据包位置信息小于零,则所获取的数据包为空数据包。

通过判定数据包是否为空数据包,以确定解码下一数据包所需的解码器,从而避免了使用错误的解码器解码数据包使得程序崩溃现象的发生,保证了解码流程的正常进行。

在具体实施中,当获取的数据包为空数据包时,则确定空数据包前后两个数据包所属不同待播放文件,从而确定下一数据包所需解码器。

在本发明一具体实施中,空数据包插入两个待播放文件解封装后得到的数据包集合之间,与所述空数据包相邻的数据包的编码格式可以相同,也可以不同。在解码过程中,当获取到空数据包,则判定下一数据包与前一数据包所属不同待播放文件,则通过存入存储位或解码器列表的顺序确定对应于下一数据包的解码器。

在又一具体实施中,空数据包插入两种不同编码格式的数据文件解封后得到的数据包集合之间。在解码数据包的过程中,当判定获取的数控包为空数据包,则确定需要切换解码器,具体的,通过获取存储位或解码器列表中的下一解码器从而实现解码器切换,以进行后一数据包的解码。

通过在两个不同编码格式的数据包集合之间插入空数据包,当检测到空数据包即切换解码器,无需再确定是否需要更换解码器,节约了系统运算时间,加快了解码流程。

继续参考图1,当获取的数据包为非空数据包时,在对该非空数据包进行解码后,还可以包括:步骤s14,将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列,以等待播放。

具体的,解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列可以是对单个数据包解码完成后,将解码得到的播放数据添加到待播放队列,也可以是在对单个数据包进行解码的同时,将得到的播放数据添加到待播放队列。

在具体实施中,数据包包括音频数据包和视频数据包,所述播放数据包括音频采样数据和视频帧数据,所述待播放队列包括音频采样数据队列和视频帧数据队列,结合参考图1和图7,步骤s14中将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列包括以下至少一种:

步骤s71,将解码所述音频数据包得到的所述音频采样数据添加至所述音频采样数据队列;

步骤s72,将解码所述视频数据包得到的所述视频帧数据添加至所述视频帧数据队列。

其中,通过解码得到的所述音频采样数据与所述视频帧数据为待播放文件在录制过程中得到的数据。

在具体实施中,解码所述音频数据包和解码所述视频数据包通过不同的线程并行进行。即,解码音频数据包得到音频采样数据,并将得到的音频采样数据添加到音频采样数据队列为独立线程,解码视频数据包得到视频帧数据,并将得到的视频帧数据添加到视频帧数据队列为独立线程,解音频线程与解视频线程并行进行。

继续参考图1,在具体实施中,步骤s14中将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列可以包括:确定添加至所述待播放队列的播放数据未超过所述待播放队列容量上限。

如前所述,播放数据包括音频采样数据和视频帧数据,待播放队列包括音频采样数据队列和视频帧数据队列,将解封得到的音频采样数据添加到音频采样数据队列后,需要判断音频采样数据队列的音频采样数据的数量是否超过音频采样数据队列的容量上限,如果超过容量上限,则停止继续解码音频数据包,将解封得到的视频帧数据添加到视频帧数据队列后,需要判断视频帧数据队列的视频帧数据的数量是否超过视频帧数据队列的容量上限,如果超过容量上限,则停止继续解码视频数据包。

通过判断待播放队列的播放数据数量是否超过待播放队列的容量上限,在超过容量上限的时候停止继续解封数据包,以避免在超过容量上限后继续解码数据包使得解封得到的播放数据丢失,从而影响播放效果。

图8是本发明一具体实施例中解码数据包的流程图。以下将结合图8做进一步说明。

如图8所示,步骤s81从数据包队列中获取一个数据包,在得到数据包后,步骤s82判断数据包是否为空数据包,在具体实施中,通过确定数据包的位置信息大于等于零,从而确定数据包为非空数据包,位置信息小于零,从而确定数据包为空数据包。通过确定所述数据包为非空数据包时,步骤s83利用解码器解码所述非空数据包,以得到播放数据。在具体实施中,所述解码器与待播放文件的文件头部信息相对应。

进一步的,通过解码非空数据包,得到播放数据后,步骤s84将播放数据存入待播放队列。在具体实施中,数据包可以包括音频数据包和视频数据包,解码音频数据包得到音频采样数据,解码视频数据包得到视频帧数据,将解码得到的音频采样数据存入音频采样数据队列,将解码得到视频帧数据存入视频帧数据队列。

进一步的,解码得到的播放数据存入待播放队列后,步骤s85判断是否超过待播放队列的容量上限。在具体实施中,若添加至所述待播放队列的播放数据未超过所述待播放队列容量上限,则按照流程继续解码数据包,若添加至所述待播放队列的播放数据已超过所述待播放队列容量上限,则停止继续解码数据包,步骤s86等待不超过待播放队列的容量上限,然后继续解码数据包。

本发明具体实施中,步骤s82中,当获取的数据包是空数据包,步骤s87切换解码器,通过新解码器解码下一数据包,解码器的切换如前所述,在此不再赘述。

继续参考图1,在另一具体实施中,在得到适于播放的音频采样数据和视频帧数据后,所述播放方法,还可以包括:

步骤s15,同步所述音频采样数据和视频帧数据;

步骤s16,输出所述音频采样数据和视频帧数据,以运行播放。

在具体实施中,通过调整音频采样数据和视频帧数据的时间戳以使音频采样数据和视频帧数据同步。在运行播放时,音频采样数据由操作系统的音频驱动主动从音频采样数据队列获取,视频帧数据在固定的时间送往显示设备刷新,从而实现对音频采样数据和视频帧数据的播放。

在本发明实施中,通过调整音频采样数据和视频帧数据的时间戳,以使得到的音视采样数据和视频帧数据实现同步,以保证视频播放音视频的同步播出,增加用户体验。

图9是本发明一具体实施例中播放待播放文件的流程图,以下将结合图9做进一步说明。

如图9所示,根据用户需求,步骤s91获取待播放文件,在具体实施中,待播放文件可以是多个,且所述多个待播放文件封装格式和编码方式可以不同。

进一步的,步骤s92解封装待播放文件。在具体实施中,应用解封装器对获取的待播放数据进行解封装。通过解封装待播文件,可以得到视频数据包和音频数据包。在具体实施中,所述待播放文件包括文件头部信息和原始文件数据,结合图5,步骤s51读取文件头部信息,可以确定对应的解复用器和解码器,所述解复用器用于解封装所述原始文件数据。

进一步,解封装后得到的音频数据包和视频数据包可以添加到不同的数据包队列,即将解封装得到的音频数据包添加到音频数据包队列,将解封装得到的视频数据包放视频数据包队列。在具体实施中,根据待播放文件的不同,解封装得到的数据包可以只包括音频数据包或视频数据包,因此,可以只包括将音频数据包添加到音频数据包队列或将视频数据包添加到视频数据包队列。

进一步的,需要对解封装后得到的音频数据包和视频数据包进行解码。以解码视频数据包为例,步骤s93获取视频数据包队列的视频数据包。在具体实施中,视频数据包按照解封装过程中获取的顺序存入视频数据包队列,在对视频数据数据包解码时,按照存入的顺序获取视频数据包。从视频数据包队列获取得到视频数据包后,步骤s94解码视频数据包。具体的,应用解封装时得到的解码器对获取的视频数据包进行解码,以得到适于播放的视频帧数据。

进一步的,通过解码得到的播放数据可以存入待播放队列,继续以解码视频数据包流程为例,步骤s95将获取的视频帧数据存入视频帧数据队列。

在具体实施中,解码音频数据包和解码视频数据包通过不同的线程并行进行。解码音频数据包的流程与解码视频数据包的流程类似,包括步骤s96获取音频数据包队列的音频数据包,步骤s97解码音频数据包,步骤s98将音频采样数据存入音频采样数据队列,详细解释在此不再赘述。

进一步的,在播放解码得到的音频采样数据和视频帧数据之前,包括步骤s99同步音频采样数据和视频帧数据。具体的,通过调整音频采样数据和视频帧数据的时间戳以使音频采样数据和视频帧数据同步。

进一步的,同步后的音频采样数据和视频帧数据通过驱动或者设备播出。具体的,音频采样数据由操作系统的音频驱动主动从音频采样数据队列获取,视频帧数据在固定的时间送往显示设备刷新,从而实现对音频采样数据和视频帧数据的播放。

在具体实施中,解封装为一独立的线程,解码音频数据包为一独立的线程,解码视频数据包为一独立的线程,同步音频采样数据与视频帧数据并播放为一独立的线程。所述四个线程可以同时并行运行。

本发明实施例还提供一种播放装置,其结构示意图见图10,具体的可以包括:

插入单元101,适于在数据包集合之间插入空数据包,一个所述数据包集合内的数据包的编码方式相同;

解码单元102,适于结合所述空数据包的位置对所述数据包集合中的数据包进行解码,以得到适于播放的播放数据。

在具体实施中,数据包可以通过解封装待播放数据获得,所述播放装置还可以包括:

解封装单元103,适于在所述数据包集合之间插入空数据包之前,解封装多个待播放文件,得到所述待播放文件中的数据包,每个所述待播放文件中的数据包分为一个或多个数据包集合。

在具体实施中,根据待播放文件可以包括音频数据和视频数据,解封装待播放文件后得到的数据包根据数据类型可以分为音频数据包集合和视频数据包集合。

在具体实施中,解封装多个待播放文件在一个独立的线程,解封装线程按照预设的顺序依次解封装多个待播放文件。

结合参考图10和图11,在解封装多个待播放文件后,为了区分相邻两个数据包所述不同数据包集合,需要在数据包集合之间插入空数据包,在具体实施中,所述插入单元101可以包括:

数据包存入子单元111,适于将解封装多个待播放文件得到的数据包集合存入一个或多个数据包队列;

插入子单元112,适于在数据包队列的数据包集合之间插入空数据包。

在其他具体实施中,所述插入单元101还可以包括:

数据包队列确认子单元113,适于将解封装得到的数据包集合存入一个或多个数据包队列后,确定存入所述数据包队列的数据包未超过存入的数据包队列的容量上限。

进一步地,根据待播放文件的不同,得到的数据包不同,参照图12,所述数据包存入子单元111可以包括以下至少一种模块:

音频数据包存入模块121,适于将解封装得到的音频数据包集合存入音频数据包队列;

视频数据包存入模块122,适于将解封装得到的视频数据包集合存入视频数据包队列。

在具体实施中,集合参考图10和图13,解封装单元103可以包括:

数据文件获取子单元131,适于获取所述待播放文件,所述待播放文件包括文件头部信息和原始文件数据;

头部信息读取子单元132,适于读取所述文件头部信息,以确定对应的解复用器,所述解复用器用于解封装所述原始文件数据。

进一步地,所述原始文件数据可以包括音频数据和视频数据中至少一种,所述数据包集合可以包括音频数据包集合和视频数据包集合中至少一种,其中,所述音频数据包集合可以包括解封装所述待播放文件中音频数据部分的数据包,所述视频数据包集合可以包括解封装所述待播放文件中视频数据部分的数据包。

在具体实施中,空数据包位于数据包集合之间,结合空数据包的位置对数据包集合中的数据包进行解码,结合参考图10和图14,解码单元102可以包括:

数据包判断子单元141,适于判断所述数据包为空数据包或非空数据包;

解码子单元142,适于当所述数据包为非空数据包时,利用解码器解码所述非空数据包,以得到所述播放数据,所述解码器与待播放文件的文件头部信息相对应;

切换子单元143,适于当所述数据包为空数据包时,确定解码下一数据包所需的解码器。

在具体实施中,数据包判断子单元141可以通过判断所述数据包位置信息是否大于等于零,判断所述数据包为空数据包或非空数据包。

通过解码得到适于播放的播放数据后,所述播放数据需要存入待播放队列以等待播放,继续参考图10,在其他实施例中,播放装置还可以包括:

播放数据添加单元104,适于对所述数据包进行解码后,将解码所述非空数据包得到的所述播放数据按照解码顺序添加至一个或多个待播放队列,以等待播放。

进一步地,所述播放数据添加单元104可以包括:待播放队列容量确定子单元,适于确定添加至所述待播放队列的播放数据未超过所述待播放队列容量上限。若所述待播放队列的数据包数量超过所述待播放队列的容量上限,则等待并停止继续解码数据包。

结合参考图10和图15,在具体实施中,所述数据包包括音频数据包和视频数据包,所述播放数据包括音频采样数据和视频帧数据,所述待播放队列包括音频采样数据队列和视频帧数据队列;所述播放数据添加单元104包括以下至少一种子单元:

音频数据添加子单元151,适于将解码所述音频数据包得到的所述音频采样数据添加至所述音频采样数据队列;

视频数据添加子单元152,适于将解码所述视频数据包得到的所述视频帧数据添加至所述视频帧数据队列。

进一步地,解码所述音频数据包和解码所述视频数据包通过不同的线程并行进行。

继续参考图10,在其他具体实施中,通过解码得到适于播放的音频采样数据和视频帧数据后,需要同步音频采样数据和视频帧数据后,以输出播放,所述播放装置还包括:

同步单元105,适于同步所述音频采样数据和视频帧数据,所述播放数据包括所述音频采样数据和视频帧数据;

输出单元106,适于输出所述音频采样数据和视频帧数据,以运行播放。

本发明实施例中的播放装置中涉及的名词解释、原理、具体实施以及有益效果可以参见本发明实施例中的播放方法,在此不在赘述。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述播放方法的步骤。所述计算机可读存储介质可以是光盘、机械硬盘、固态硬盘等。

本发明实施例还提供一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机指令,所述处理器运行所述计算机指令时执行前述播放方法的步骤。所述终端可以是手机、电脑,或者其他可执行本发明实施例中播放方法的设备。

虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1