1.本技术涉及多媒体技术领域,特别涉及一种流媒体数据的时间戳更新方法。本技术同时涉及一种流媒体数据的时间戳更新装置,一种计算设备,以及一种计算机可读存储介质。
背景技术:2.随着计算机技术和网络技术的快速发展,各种直播层出不穷,在直播场景中主播端需要向观众端推送流媒体数据,为了让观众有较好的观看体验,除了优秀的画质外,流畅程度和音画同步也至关重要,而这两个指标都和时间戳相关。
3.现有技术中,主播端向观众端推送的流媒体数据中可以携带时间戳,在流媒体数据的时间戳连续的情况下,流媒体数据中音视频是相互对应的,观众端的播放器可以基于接收到的流媒体数据的时间戳来同步流媒体数据中的音视频帧进行渲染。
4.然而,某些情况下流媒体数据的时间戳可能会不连续,会导致流媒体数据中音视频不对应,进而导致画面跳变、卡顿、音画不同步,甚至是播放器断流等问题,极大影响了用户体验。
技术实现要素:5.有鉴于此,本技术实施例提供了一种流媒体数据的时间戳更新方法。本技术同时涉及一种流媒体数据的时间戳更新装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的流媒体数据的时间戳不连续导致的音视频不对应的技术问题。
6.根据本技术实施例的第一方面,提供了一种流媒体数据的时间戳更新方法,包括:
7.接收目标流媒体数据包,其中,目标流媒体数据包携带数据类型和接收时间戳;
8.根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳,其中,参考流媒体数据包与目标流媒体数据包的数据类型相同;
9.在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长;
10.根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳。
11.根据本技术实施例的第二方面,提供了一种流媒体数据的时间戳更新装置,包括:
12.接收模块,被配置为接收目标流媒体数据包,其中,目标流媒体数据包携带数据类型和接收时间戳;
13.第一确定模块,被配置为根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳,其中,参考流媒体数据包与目标流媒体数据包的数据类型相同;
14.第二确定模块,被配置为在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长;
15.第三确定模块,被配置为根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳。
16.根据本技术实施例的第三方面,提供了一种计算设备,包括:
17.存储器和处理器;
18.存储器用于存储计算机可执行指令,处理器用于执行计算机可执行指令,以实现下述方法:
19.接收目标流媒体数据包,其中,目标流媒体数据包携带数据类型和接收时间戳;
20.根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳,其中,参考流媒体数据包与目标流媒体数据包的数据类型相同;
21.在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长;
22.根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳。
23.根据本技术实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现任意流媒体数据的时间戳更新方法的步骤。
24.本技术提供的流媒体数据的时间戳更新方法,可以接收目标流媒体数据包,其中,目标流媒体数据包携带数据类型和接收时间戳;根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳,其中,参考流媒体数据包与目标流媒体数据包的数据类型相同;在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长;根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳。
25.这种情况下,接收到当前的目标流媒体数据包时,可以确定接收时间戳与之前的参考流媒体数据包的参考时间戳之间的时间间隔,若时间间隔大于间隔阈值,则说明当前接收到的目标流媒体数据包与之前的参考流媒体数据包间隔过大,该类型的流媒体数据包的时间戳不连续,此时可以根据目标流媒体数据包的当前更新状态确定更新步长,对接收时间戳进行更新,修正当前接收到的目标流媒体数据包的时间戳,使得目标流媒体数据包与之前的参考流媒体数据的时间戳连续,保证了流媒体数据中不同类型的数据包相互对应,避免了画面跳变、卡顿、音画不同步、播放器断流等问题,进而保证了用户体验。
附图说明
26.图1是本技术一实施例提供的一种流媒体数据的时间戳更新方法的流程图;
27.图2是本技术一实施例提供的一种应用于直播场景下的流媒体数据的时间戳更新方法的处理流程图;
28.图3是本技术一实施例提供的一种流媒体数据的时间戳更新装置的结构示意图;
29.图4是本技术一实施例提供的一种计算设备的结构框图。
具体实施方式
30.在下面的描述中阐述了很多具体细节以便于充分理解本技术。但是本技术能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本技术内涵的情况下做类似推广,因此本技术不受下面公开的具体实施的限制。
31.在本技术一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而
非旨在限制本技术一个或多个实施例。在本技术一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本技术一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
32.应当理解,尽管在本技术一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
33.首先,对本技术一个或多个实施例涉及的名词术语进行解释。
34.流媒体(streaming media):是指将连续的影音信息经压缩处理后放到网络服务器上,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,也即流媒体是指在网络中使用流式传输技术传输的连续时基媒体,以流的形式进行多媒体数据的传输,例如音频、视频、动画或其他多媒体文件,此技术使得数据包得以像流水一样发送。如果不使用此技术,就必须在使用前下载整个媒体文件,流式传输可传送现场影音或预存于服务器上的影片,当观看者在收看这些影音文件时,影音数据在送达观看者的计算机后立即由特定播放软件播放。
35.在本技术中,提供了一种流媒体数据的时间戳更新方法,本技术同时涉及一种流媒体数据的时间戳更新装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
36.图1示出了根据本技术一实施例提供的一种流媒体数据的时间戳更新方法的流程图,可以应用于时间戳更新装置,具体包括以下步骤102至步骤108:
37.步骤102:接收目标流媒体数据包,其中,目标流媒体数据包携带数据类型和接收时间戳。
38.需要说明的是,目标流媒体数据包是指当前接收到的流媒体数据包;数据类型用于指示目标流媒体数据包是什么类型的数据,该数据类型可以包括视频和音频;接收时间戳是指接收到目标流媒体数据包的时间,即目标流媒体数据包的传输时间,如80ms、120ms等。
39.实际应用中,一个流媒体数据包可以包括一帧或多帧数据,如一帧视频或者多帧视频,若流媒体数据包中包括一帧数据,则流媒体数据包的数据类型为该帧数据的数据类型,流媒体数据包的接收时间戳为该帧数据的接收时间戳;若流媒体数据包中包括多帧数据,该多帧数据为同一数据类型,流媒体数据包的数据类型为该多帧数据的数据类型,流媒体数据包的接收时间戳为该多帧数据中第一帧数据的接收时间戳。
40.本技术实施例中,时间戳更新装置可以对接收到的目标流媒体数据包进行解析,获取对应的数据类型和接收时间戳,以便后续基于数据类型和接收时间戳,对目标流媒体数据包的接收时间戳进行更新,保证目标流媒体数据包的接收时间戳与之前的流媒体数据包连续。
41.步骤104:根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳,其中,参考流媒体数据包与目标流媒体数据包的数据类型相同。
42.需要说明的是,流媒体数据可以包括多种数据类型的数据,同类型的流媒体数据包的时间戳连续,即可保证流媒体数据中各数据类型的数据包是对应的,若某类流媒体数据包的时间戳不连续,则可能会导致该类型的流媒数据包与其他类型的流媒体数据包不对应,只需将该类型的流媒体数据包的时间戳修正为连续的时间戳,即可保证流媒体数据中各数据类型的数据包是对应的。
43.示例的,假设流媒体数据包括视频和音频,在常见的音视频协议中,如rtmp、http-flv、hls等,都是用32比特位的时间戳来表示,单位是ms,视频一般为25帧,则每帧40ms,音频一般每帧23ms,通过在一个相同的时间基准线上依次播放,来实现音视频相对关系的还原。也即,流媒体数据中视频的连续时间戳应该为40ms、80ms、120ms
……
,音频的连续时间戳应该为23ms、46ms、69ms、92ms
……
,正常情况下视频和音频对应。假设当前接收到的目标流媒体数据包为第三帧视频,该第三帧视频的接收时间戳为5000ms,与之前的视频帧不连续,接收端的播放器基于该第三帧视频的接收时间戳5000ms进行播放,会导致播放器播放的视频和音频不对应,因而此时需要对第三帧视频的接收时间戳进行修正。
44.实际应用中,为了确定目标流媒体数据包与之前的流媒体数据包是否连续,可以获取目标流媒体数据包之前的参考流媒体数据包,此处“之前”指的是时间轴的先后顺序,也就是说参考流媒体数据包在时间轴上位于目标流媒体数据包之前,即以时间轴为基准,参考流媒体数据包在先,目标流媒体数据包在后。
45.另外,由于需要确定的是同一数据类型的流媒体数据包的时间戳是否连续,因而参考流媒体数据包与目标流媒体数据包的数据类型相同,然后可以确定参考流媒体数据包的参考时间戳,后续可以基于接收时间戳和参考时间戳,确定目标流媒体数据包与之前的参考流媒体数据包的时间戳是否连续,从而确定是否需要对当前接收到的目标流媒体数据包的接收时间戳进行修正。
46.一种可能的实现方式中,参考流媒体数据包是目标流媒体数据包的前一个、与目标流媒体数据包的数据类型相同的流媒体数据包;或者,参考流媒体数据包还可以是目标流媒体数据包的前第n个、与目标流媒体数据包的数据类型相同的流媒体数据包。
47.本技术实施例中,可以确定出目标流媒体数据包之前的、与目标流媒体数据包的数据类型相同的参考流媒体数据包,然后获取参考流媒体数据包的参考时间戳,后续可以基于接收时间戳和参考时间戳,确定目标流媒体数据包与之前的参考流媒体数据包的时间戳是否连续,从而确定是否需要对当前接收到的目标流媒体数据包的接收时间戳进行修正。
48.步骤106:在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长。
49.具体的,目标流媒体数据包的当前更新状态可以是指时间戳更新模块当前所处的状态,更新步长可以是指更新接收时间戳的幅度。
50.需要说明的是,时间戳更新模块中设置有更新状态,不同的更新状态可以采取不同的处理方式对接收时间戳进行更新,更新状态可以包括初始状态和快速更新状态,初始状态下,可以先对目标流媒体数据包的时间戳进行一次匀速更新,当一次匀速更新后发现无法修正时间戳,则会直接一次性将时间戳更新到位,使得流媒体数据连续;而在快速更新状态下,可以直接一次性将当前接收到的目标流媒体数据包的接收时间戳更新到位,保证
流媒体数据连续。时间戳更新模块在初始化时,当前更新状态为初始状态,即第一个流媒体数据包的当前更新状态为初始状态。
51.另外,间隔阈值用于确定当前接收到的目标流媒体数据包与之前的参考流媒体数据包的时间戳之间的时间间隔是否过大,从而确定目标流媒体数据包与之前的参考流媒体数据包的时间戳是否连续,该间隔阈值可以基于目标流媒体数据包与参考流媒体数据包之间相差的数据包个数确定,如参考流媒体数据包为目标流媒体数据包的前一个数据包,该间隔阈值可以为两个连续的流媒体数据包之间最大相差的数值;或者,参考流媒体数据包为目标流媒体数据包的前第3个数据包,该间隔阈值可以为四个连续的流媒体数据包之间最大相差的数值。
52.实际应用中,在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,说明目标流媒体数据包与之前的参考流媒体数据包时间戳相隔较大,目标流媒体数据包与之前的参考流媒体数据包不连续,此时需要更新目标流媒体数据包的接收时间戳。具体实现时,由于不同的更新状态对应的更新方式并不相同,因而可以根据目标流媒体数据包的当前更新状态,确定更新步长,后续基于更新步长对目标流媒体数据包的接收时间戳进行更新。
53.本实施例一个可选的实施方式中,间隔阈值还可以基于当前更新状态确定,也即在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长之前,还可以包括:
54.确定目标流媒体数据包的当前更新状态;
55.在当前更新状态为初始状态的情况下,将间隔阈值设置为第一数值;
56.在当前更新状态为快速更新状态的情况下,将间隔阈值设置为第二数值;
57.其中,第二数值小于第一数值。
58.需要说明的是,时间戳更新模块可以设置有状态记录单元,该状态记录单元中可以记录有当前更新状态,在接收到当前的目标流媒体数据包,解析获得接收时间戳后,可以从状态记录单元中读取当前更新状态。
59.实际应用中,当前更新状态可以包括初始状态和快速更新状态,快速更新状态是为了更快速地把时间戳补上,因而对差值比较敏感,间隔阈值可以设置的较小,而初始状态下对差值比较容忍,需要尽量保证不更新时间戳,因而间隔阈值可以设置的较大。也即是,在当前更新状态为初始状态的情况下,可以将间隔阈值设置为较大的第一数值,尽量保证不更新时间戳;在当前更新状态为快速更新状态的情况下,可以将间隔阈值设置为较小的第二数值,从而快速地更新时间戳,如第一数值可以为1s,第二数值可以为100ms。
60.本技术实施例中,间隔阈值设置的越小,对时间戳更新的越多,期望应该是尽量保证不更新时间戳,除非时间戳发生大的跳变时才会进行更新,然后快速更新完成后,仍然保持尽量不更新,因而在当前更新状态为初始状态时,可以将间隔阈值设置的较大,而当前更新状态为快速更新状态时,可以将间隔阈值设置的较小,保证了时间戳更新的准确率,避免过度更新。
61.本实施例一个可选的实施方式中,在不同的更新状态下,可以采用不同的处理方式,确定更新步长,也即根据目标流媒体数据包的当前更新状态,确定更新步长,具体实现过程可以如下:
62.确定当前更新状态是否为快速更新状态;
63.若是快速更新状态,则将目标流媒体数据包的期望时间戳和接收时间戳之间的时间差值作为更新步长,其中,期望时间戳基于目标流媒体数据包的预设传输时间确定;
64.若不是快速更新状态,则将当前时间之前的流媒体数据包的平均传输时间作为更新步长。
65.需要说明的是,若当前更新状态为快速更新状态,则可以一次性将当前接收到的目标流媒体数据包的接收时间戳更新到位,具体实现时,可以确定目标流媒体数据包的期望时间戳,该期望时间戳可以表示当前接收到的目标流媒体数据包在正常情况下的正常值,期望时间戳和接收时间戳之间的时间差值可以表示异常的接收时间戳和正常值之间的差距,因而可以直接将该时间差值作为更新步长,对目标流媒体数据包的接收时间戳进行更新,一次性将该接收时间戳更新至正常值。
66.另外,若当前更新状态不为快速更新状态,即当前更新状态为初始状态,则可以先对目标流媒体数据包的时间戳进行一次匀速更新,当一次匀速更新后发现无法修正时间戳,再直接一次性将时间戳更新到位,使得流媒体数据连续,具体实现时,可以确定当前时间之前的流媒体数据包的平均传输时间,将该平均传输时间作为更新步长,也即先对当前接收到的流媒体数据包更新平均传输时间,进行一次匀速更新,后续可以基于匀速更新的结果,确定是否进一步直接一次性更新到位。
67.本技术实施例中,在快速更新状态下,可以将期望时间戳和接收时间戳之间的时间差值作为更新步长,对目标流媒体数据包的接收时间戳进行更新,一次性将该目标流媒体数据包的接收时间戳更新至正常值;而在初始状态下,则可以将当前时间之前的流媒体数据包的平均传输时间作为更新步长,先对目标流媒体数据包进行一次匀速更新,确定是否更新到正常值,优先通过匀速更新的方式将流媒体数据包的时间戳修正为连续的。如此,不同的更新状态可以采取不同的处理方式确定更新步长,从而对目标流媒体的接收时间戳进行更新,针对不同的情况,采取不同的更新方式,更新目标流媒体数据包的接收时间戳的灵活性较高,可以适应多种不同类型的时间戳异常,避免影响用户体验。
68.本实施例一个可选的实施方式中,目标流媒体数据包还携带数据包序号标识,可以根据数据包序号标识确定当前接收到的目标流媒体数据包在正常情况下的正常值;也即将目标流媒体数据包的期望时间戳和接收时间戳之间的时间差值作为更新步长之前,还可以包括:
69.根据数据类型,确定目标流媒体数据包对应的预设传输时间;
70.根据预设传输时间和数据包序号标识,确定目标流媒体数据包对应的期望时间戳。
71.需要说明的是,不同数据类型的流媒体数据的预设传输时间不同,如一帧视频的预设传输时间可以为40ms,而一帧音频的预设传输时间可以为23ms。因而,可以根据目标流媒体数据包的数据类型,确定目标流媒体数据包对应的预设传输时间,即一个该数据类型的流媒体数据包传输需要多少时间。
72.实际应用中,数据包序号标识可以是指当前接收到的目标流媒体数据包是整个流媒体数据中的第几个数据包,预设传输时间可以表示正常情况下,传输一个流媒体数据包所需的时间,因而根据预设传输时间和数据包序号标识,即可确定出正常情况下,传输至目
标流媒体数据包所需的时间,即目标流媒体数据包对应的期望时间戳。
73.沿用上例,假设当前更新状态为快速更新状态,目标流媒体数据包的数据包序号标识为3,数据类型为视频,一帧视频对应的预设传输时间为40ms,此时可以确定出目标流媒体数据包对应的期望时间戳为120ms。假设目标流媒体数据包的接收时间戳为5000ms,期望时间戳和接收时间戳之间的时间差值为4880ms,此时确定出更新步长为4880ms。
74.本技术实施例中,根据预设传输时间和数据包序号标识,即可确定出正常情况下传输至目标流媒体数据包所需的时间,将该时间作为目标流媒体数据包对应的期望时间戳,也即将正常情况下目标流媒体的正常值作为期望时间戳,便于确定出正常情况下目标流媒体的正常值与异常情况下目标流媒体的异常值之间的差距,进而一次性补足该差距,提高了对目标流媒体数据包的接收时间戳的更新效率。
75.本实施例一个可选的实施方式中,可以基于当前时间之前传输的流媒体数据包,确定传输一个流媒体数据所需的平均时间,也即将当前时间之前的流媒体数据包的平均传输时间作为更新步长之前,还可以包括:
76.根据数据类型,确定当前时间之前接收到的同类型数据包的个数;
77.根据同类型数据包的个数和传输时间,确定当前时间之前的流媒体数据包的平均传输时间。
78.需要说明的是,传输时间是指开始接收第一个流媒体数据包至接收到当前的目标流媒体数据包耗费的时间,可以先确定出当前时间之前接收到的同类型数据包的个数,然后将传输时间除以该同类型数据包的个数,即可获得传输一个该类型的流媒体数据包的平均传输时间,可以将平均传输时间作为更新步长,对目标流媒体数据包的接收时间戳进行更新。
79.沿用上例,假设当前更新状态为初始状态,目标流媒体数据包的数据类型为视频,当前时间之前接收到的视频帧的个数为40个,传输时间为3520ms,确定出当前时间之前视频帧的平均传输时间为88ms,此时确定出更新步长为88ms。
80.本技术实施例中,可以根据当前时间之前接收到的同类型数据包的个数和传输时间,确定当前时间之前的流媒体数据包的平均传输时间,将该平均传输时间作为更新步长,对目标流媒体数据包的接收时间戳进行更新,从而先对目标流媒体数据包的接收时间戳进行小幅度调整,再根据后续数据包的具体情况,进行后续调整,避免了过度调整。
81.步骤108:根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳。
82.需要说明的是,更新步长可以是指目标流媒体数据包的接收时间的调整幅度,根据更新步长对接收时间戳进行调整,即可获得目标流媒体数据包的更新时间戳。
83.实际应用中,当前接收到的目标流媒体数据包的接收时间戳可能晚于正常情况下的正常值,此时在接收时间戳上增加更新步长,即可获得目标流媒体数据包的更新时间戳;或者,当前接收到的目标流媒体数据包的接收时间戳还可能早于正常情况下的正常值,此时在接收时间戳上减去更新步长,即可获得目标流媒体数据包的更新时间戳。
84.示例的,对于某些网络或其他原因导致的回退情况,当前接收到的目标流媒体数据包的接收时间戳发生了回退,即接收时间戳小于目标流媒体数据包之前的参考流媒体数据包的参考时间戳,此时在接收时间戳上增加更新步长,将目标流媒体的接收时间戳向后移,获得目标流媒体数据包的更新时间戳,从而将发生回退的目标流媒体数据包的接收时
间戳更新回正常值。或者,对于某些网络或其他原因导致的卡顿情况,当前接收到的目标流媒体数据包的接收时间戳晚于正常值,此时在接收时间戳上减去更新步长,将目标流媒体的接收时间戳向前移,获得目标流媒体数据包的更新时间戳,从而将异常的目标流媒体数据包的接收时间戳更新回正常值。
85.又一示例,对于时间戳偏移累计情况,一般发生在推流端采集时精度偏移的情况下,比如每一秒视频多加了0.3ms,则差不多1个小时后,视频会比音频快1s,就会导致音画不同步问题,需要将视频的时间戳向后移,将音频的时间戳向前移,也即使视频慢一点,音频快一点。假设目标流媒体数据包为视频,此时可以在目标流媒体数据包的接收时间戳上增加更新步长,将目标流媒体的接收时间戳向后移,获得目标流媒体数据包的更新时间戳,从而将目标流媒体数据包的接收时间戳更新回正常值。
86.再一示例,对于流媒体数据包的时间戳回环情况,这种一般发生在超长时间推流,比如安全监测中,流媒体数据包的接收时间戳会一直增长,但是在传输过程中记录一个时间戳最长为32个比特位,当溢出后时间戳需要重新从0开始计数,服务端上行接收导致回环,而不同的播放链接其时间戳和上行存在偏移,需要把回环后的偏移进行计算并同步到播放端,因而此时接收时间戳小于目标流媒体数据包之前的参考流媒体数据包的参考时间戳,此时在接收时间戳上增加更新步长,将目标流媒体的接收时间戳向后移,获得目标流媒体数据包的更新时间戳,从而将重新计数的接收时间戳更新回正常值。
87.本实施例一个可选的实施方式中,流媒体数据的数据类型包括音频和视频,除了保证视频连续正增长、音频连续正增长外,还需要保证整个流媒体数据包的时间戳是正增长,即当前视频帧的时间戳不能早于前一个音频帧的时间戳,也即需要保证当前接收到的目标流媒体数据包的时间戳要大于等于前一个不同类型的流媒体数据包的时间戳,因而根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳,具体实现过程可以如下:
88.根据接收时间戳和更新步长,确定初步更新值;
89.确定目标流媒体数据包的上一流媒体数据包的校验时间戳,其中,上一流媒体数据包与目标流媒体数据包的数据类型不同;
90.在初步更新值大于等于校验时间戳的情况下,将初步更新值作为更新时间戳;
91.在初步更新值小于校验时间戳的情况下,对校验时间戳增加预设时间作为更新时间戳。
92.需要说明的是,对于音视频时间戳交错的情况,指音频和视频的时间戳并不是正增长的,即可能在音频播了一段时间后,视频才开始推流,此时视频的时间戳仍然是从0开始的,会形成虽然单个音频或者视频时间戳是递增的,但是从每个数据包来看是非递增的,某些较严格的播放器就会播放失败。
93.实际应用中,可以将根据接收时间戳和更新步长确定出的时间值作为初步更新值,并获取目标流媒体数据包的上一个流媒体数据包的校验时间戳,该上一流媒体数据包与目标流媒体数据包的数据类型不同。然后,可以确定初步更新值是否大于等于校验时间戳,若初步更新值大于等于校验时间戳,则说明当前接收到的目标流媒体数据包的接收时间戳在前一个不同类型的流媒体数据包的接收时间戳上正增长,即此时整个流媒体数据包的时间戳是正增长的,确定出的初步更新值即可作为最终的更新时间戳。
94.另外,若初步更新值小于校验时间戳,则说明当前接收到的目标流媒体数据包的
接收时间戳早于前一个不同类型的流媒体数据包的时间戳,时间戳不是正增长,此时整个流媒体数据包的时间戳不是正增长,因而此时可以对校验时间戳增加预设时间作为更新时间戳,即在前一个不同类型的流媒体数据包的校验时间戳上直接增加预设时间,作为最终的更新时间戳,保证时间戳正增长。其中,预设时间可以预先设置,一般设置的较小,也可以直接设置为0,也即当前接收到的目标流媒体数据包的接收时间戳至少要与前一个不同类型的流媒体数据包的时间戳相同。
95.本技术实施例中,在根据接收时间戳和更新步长,确定初步更新值之后,还可以确定初步更新值是否大于等于校验时间戳,从而确定当前接收到的目标流媒体数据包的接收时间戳是否晚于或等于前一个不同类型的流媒体数据包的时间戳,从而保证整个流媒体数据包的时间戳是正增长,避免播放失败。
96.本实施例一个可选的实施方式中,在更新目标流媒体数据包的接收时间戳后,还可以对当前更新状态进行设置,在更新步长为时间差值的情况下,根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳之后,还可以包括:
97.将当前更新状态设置为初始状态。
98.需要说明的是,在更新步长为时间差值的情况下,说明当前更新状态为快速更新状态,此时基于目标流媒体数据包的期望时间戳和接收时间戳之间的时间差值,对目标流媒体数据包的接收时间戳一次性更新到位,后续无需再保持快速更新状态,因而此时可以将当前更新状态设置为初始状态,即当前更新状态由快速更新状态变更为初始状态。
99.本技术实施例中,在对目标流媒体数据包的接收时间戳一次性更新到位后,可以及时变更当前更新状态,保证了当前更新状态可以根据更新情况及时变换,从而适应不同的场景,提高了灵活性和适应性。
100.本实施例一个可选的实施方式中,在更新目标流媒体数据包的接收时间戳后,还可以对当前更新状态进行设置,在更新步长为平均传输时间的情况下,根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳之后,还可以包括:
101.将当前更新状态设置为快速更新状态。
102.需要说明的是,在更新步长为平均传输时间的情况下,说明当前更新状态为初始状态,此时可以先对目标流媒体数据包的时间戳进行一次匀速更新,若一次匀速更新无法将时间戳更新为正常值,则后续可以直接一次性更新,使得流媒体数据连续,也即当前接收到的目标流媒体数据包的接收时间戳可能没有更新完全,后续的流媒体数据包的接收时间戳很有可能需要直接进行一次性更新,因而此时可以将当前更新状态设置为快速更新状态,即当前更新状态由初始状态变更为快速更新状态。
103.本技术实施例中,在基于平均传输时间对目标流媒体数据包的接收时间戳进行更新后,可以及时变更当前更新状态,保证对下一个流媒体数据包可以采取快速更新方式,提高更新效率,保证了当前更新状态可以根据更新情况及时变换,从而适应不同的场景,提高了灵活性和适应性。
104.本实施例一个可选的实施方式中,若目标流媒体数据包的接收时间戳正常,则无需更新,也即根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳之后,还可以包括:
105.在接收时间戳与参考时间戳之间的时间间隔不大于间隔阈值的情况下,将接收时
间戳作为更新时间戳,并将当前更新状态设置为初始状态。
106.需要说明的是,在接收时间戳与参考时间戳之间的时间间隔不大于间隔阈值的情况下,说明目标流媒体数据包与之前的参考流媒体数据包时间戳相隔较小,目标流媒体数据包与之前的参考流媒体数据包是连续的,此时无需更新目标流媒体数据包的接收时间戳,直接将接收时间戳作为更新时间戳进行存储即可,避免了对正常的时间戳进行错误更新,保证了时间戳更新的准确率。
107.另外,在接收时间戳与参考时间戳之间的时间间隔不大于间隔阈值的情况下,说明目标流媒体数据包的接收时间戳是正常的,因而此时可以将当前更新状态设置为初始状态,也即使得时间戳更新模块的当前更新状态恢复到初始状态,以进行后续流媒体数据包的时间戳更新。
108.本技术提供的流媒体数据的时间戳更新方法,接收到当前的目标流媒体数据包时,可以确定接收时间戳与之前的参考流媒体数据包的参考时间戳之间的时间间隔,若时间间隔大于间隔阈值,则说明当前接收到的目标流媒体数据包与之前的参考流媒体数据包间隔过大,该类型的流媒体数据包的时间戳不连续,此时可以根据目标流媒体数据包的当前更新状态确定更新步长,对接收时间戳进行更新,修正当前接收到的目标流媒体数据包的时间戳,使得目标流媒体数据包与之前的参考流媒体数据的时间戳连续,保证了流媒体数据中音视频相互对应,避免了画面跳变、卡顿、音画不同步、播放器断流等问题,进而保证了用户体验。
109.下述结合附图2,以本技术提供的流媒体数据的时间戳更新方法在直播场景下的应用为例,对流媒体数据的时间戳更新方法进行进一步说明。其中,图2示出了本技术一实施例提供的一种应用于直播场景下的流媒体数据的时间戳更新方法的处理流程图,具体包括以下步骤:
110.步骤202:接收目标直播流数据包,其中,目标直播流数据包携带数据类型、接收时间戳和数据包序号标识。
111.步骤204:根据数据类型,确定目标直播流数据包之前的参考直播流数据包的参考时间戳,其中,参考直播流数据包与目标直播流数据包的数据类型相同。
112.步骤206:确定目标直播流数据包的当前更新状态,在当前更新状态为初始状态的情况下,将间隔阈值设置为第一数值;在当前更新状态为快速更新状态的情况下,将间隔阈值设置为第二数值;其中,第二数值小于第一数值。
113.步骤208:确定接收时间戳与参考时间戳之间的时间间隔是否大于间隔阈值,若否,执行下述步骤210-212,若是,执行下述步骤214。
114.步骤210:将接收时间戳作为更新时间戳。
115.步骤212:将当前更新状态设置为初始状态,等待下一个直播流数据包,返回执行步骤202。
116.步骤214:确定当前更新状态是否为快速更新状态,若是,则执行下述步骤216-218,若否,则执行下述步骤220-222。
117.步骤216:根据数据类型,确定目标直播流数据包对应的预设传输时间,根据预设传输时间和数据包序号标识,确定目标直播流数据包对应的期望时间戳。
118.步骤218:将目标直播流数据包的期望时间戳和接收时间戳之间的时间差值作为
更新步长,根据接收时间戳和更新步长,确定目标直播流数据包的更新时间戳,并返回执行步骤212。
119.步骤220:根据数据类型,确定当前时间之前接收到的同类型数据包的个数,根据同类型数据包的个数和传输时间,确定当前时间之前的直播流数据包的平均传输时间;将当前时间之前的直播流数据包的平均传输时间作为更新步长,根据接收时间戳和更新步长,确定目标直播流数据包的更新时间戳。
120.步骤222:将当前更新状态设置为快速更新状态,等待下一个直播流数据包,返回执行步骤202。
121.本技术提供的流媒体数据的时间戳更新方法,接收到当前的目标直播流数据包时,可以确定接收时间戳与之前的参考直播流数据包的参考时间戳之间的时间间隔,若时间间隔大于间隔阈值,则说明当前接收到的目标直播流数据包与之前的参考直播流数据包间隔过大,该类型的直播流数据包的时间戳不连续,此时可以根据目标直播流数据包的当前更新状态确定更新步长,对接收时间戳进行更新,修正当前接收到的目标直播流数据包的时间戳,使得目标直播流数据包与之前的参考流媒体数据的时间戳连续,保证了流媒体数据中音视频相互对应,避免了画面跳变、卡顿、音画不同步、播放器断流等问题,进而保证了用户体验。
122.与上述方法实施例相对应,本技术还提供了流媒体数据的时间戳更新装置实施例,图3示出了本技术一实施例提供的一种流媒体数据的时间戳更新装置的结构示意图。如图3所示,该装置包括:
123.接收模块302,被配置为接收目标流媒体数据包,其中,目标流媒体数据包携带数据类型和接收时间戳;
124.第一确定模块304,被配置为根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳,其中,参考流媒体数据包与目标流媒体数据包的数据类型相同;
125.第二确定模块306,被配置为在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长;
126.第三确定模块308,被配置为根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳。
127.可选地,该装置还包括第一设置模块,被配置为:
128.确定目标流媒体数据包的当前更新状态;
129.在当前更新状态为初始状态的情况下,将间隔阈值设置为第一数值;
130.在当前更新状态为快速更新状态的情况下,将间隔阈值设置为第二数值;
131.其中,第二数值小于第一数值。
132.可选地,第二确定模块306进一步被配置为:
133.确定当前更新状态是否为快速更新状态;
134.若是快速更新状态,则将目标流媒体数据包的期望时间戳和接收时间戳之间的时间差值作为更新步长,其中,期望时间戳基于目标流媒体数据包的预设传输时间确定;
135.若不是快速更新状态,则将当前时间之前的流媒体数据包的平均传输时间作为更新步长。
136.可选地,更新步长为时间差值;第二确定模块306进一步被配置为:
137.将当前更新状态设置为初始状态。
138.可选地,更新步长为平均传输时间;第二确定模块306进一步被配置为:
139.将当前更新状态设置为快速更新状态。
140.可选地,目标流媒体数据包还携带数据包序号标识;第二确定模块306进一步被配置为:
141.根据数据类型,确定目标流媒体数据包对应的预设传输时间;
142.根据预设传输时间和数据包序号标识,确定目标流媒体数据包对应的期望时间戳。
143.可选地,第二确定模块306进一步被配置为:
144.根据数据类型,确定当前时间之前接收到的同类型数据包的个数;
145.根据同类型数据包的个数和传输时间,确定当前时间之前的流媒体数据包的平均传输时间。
146.可选地,该装置还包括第二设置模块,被配置为:
147.在接收时间戳与参考时间戳之间的时间间隔不大于间隔阈值的情况下,将接收时间戳作为更新时间戳,并将当前更新状态设置为初始状态。
148.可选地,流媒体数据的数据类型包括音频和视频;第三确定模块308进一步被配置为:
149.根据接收时间戳和更新步长,确定初步更新值;
150.确定目标流媒体数据包的上一流媒体数据包的校验时间戳,其中,上一流媒体数据包与目标流媒体数据包的数据类型不同;
151.在初步更新值大于等于校验时间戳的情况下,将初步更新值作为更新时间戳;
152.在初步更新值小于校验时间戳的情况下,对校验时间戳增加预设时间作为更新时间戳。
153.本技术提供的流媒体数据的时间戳更新装置,接收到当前的目标流媒体数据包时,可以确定接收时间戳与之前的参考流媒体数据包的参考时间戳之间的时间间隔,若时间间隔大于间隔阈值,则说明当前接收到的目标流媒体数据包与之前的参考流媒体数据包间隔过大,该类型的流媒体数据包的时间戳不连续,此时可以根据目标流媒体数据包的当前更新状态确定更新步长,对接收时间戳进行更新,修正当前接收到的目标流媒体数据包的时间戳,使得目标流媒体数据包与之前的参考流媒体数据的时间戳连续,保证了流媒体数据中音视频相互对应,避免了画面跳变、卡顿、音画不同步、播放器断流等问题,进而保证了用户体验。
154.上述为本实施例的一种流媒体数据的时间戳更新装置的示意性方案。需要说明的是,该流媒体数据的时间戳更新装置的技术方案与上述的流媒体数据的时间戳更新方法的技术方案属于同一构思,流媒体数据的时间戳更新装置的技术方案未详细描述的细节内容,均可以参见上述流媒体数据的时间戳更新方法的技术方案的描述。
155.图4示出了根据本技术一实施例提供的一种计算设备的结构框图。该计算设备400的部件包括但不限于存储器410和处理器420。处理器420与存储器410通过总线430相连接,数据库450用于保存数据。
156.计算设备400还包括接入设备440,接入设备440使得计算设备400能够经由一个或
多个网络460通信。这些网络的示例包括公用交换电话网(pstn,public switched telephone network)、局域网(lan,local area network)、广域网(wan,wideareanetwork)、个域网(pan,personalarea network)或诸如因特网的通信网络的组合。接入设备440可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic,network interface controller))中的一个或多个,诸如ieee802.11无线局域网(wlan,wireless localarea networks)无线接口、全球微波互联接入(wi-max,worldwide interoperability for microwave access)接口、以太网接口、通用串行总线(usb,universal serial bus)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc,near field communication)接口,等等。
157.在本技术的一个实施例中,计算设备400的上述部件以及图4中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图4所示的计算设备结构框图仅仅是出于示例的目的,而不是对本技术范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
158.计算设备400可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备400还可以是移动式或静止式的服务器。
159.其中,处理器420用于执行如下计算机可执行指令,以实现下述方法:
160.接收目标流媒体数据包,其中,目标流媒体数据包携带数据类型和接收时间戳;
161.根据数据类型,确定目标流媒体数据包之前的参考流媒体数据包的参考时间戳,其中,参考流媒体数据包与目标流媒体数据包的数据类型相同;
162.在接收时间戳与参考时间戳之间的时间间隔大于间隔阈值的情况下,根据目标流媒体数据包的当前更新状态,确定更新步长;
163.根据接收时间戳和更新步长,确定目标流媒体数据包的更新时间戳。
164.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的流媒体数据的时间戳更新方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述流媒体数据的时间戳更新方法的技术方案的描述。
165.本技术一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时以用于实现任意流媒体数据的时间戳更新方法的步骤。
166.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的流媒体数据的时间戳更新方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述流媒体数据的时间戳更新方法的技术方案的描述。
167.上述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或
者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
168.计算机指令包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。
169.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本技术所必须的。
170.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
171.以上公开的本技术优选实施例只是用于帮助阐述本技术。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本技术的内容,可作很多的修改和变化。本技术选取并具体描述这些实施例,是为了更好地解释本技术的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本技术。本技术仅受权利要求书及其全部范围和等效物的限制。