一种直播延时测量方法及系统转让专利

申请号 : CN201910021686.5

文献号 : CN109510980B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹问唐文滔李兴平刘维

申请人 : 湖南快乐阳光互动娱乐传媒有限公司

摘要 :

本发明公开了一种直播延时测量方法及系统,分别从源站和边缘拉取同一个直播流;分别接收两路直播流,模拟视频播放,创建播放缓存队列;解析视频帧,并将解析完成的视频帧依次加入各自播放缓存队列。本发明能够自动测量各个区域,各家CDN直播延时大小,记录并展示历史延时数据,提升了运维效率,为直播平台提供可视化数据支撑,提升了直播平台的便捷性和直播质量稳定性。

权利要求 :

1.一种直播延时测量方法,其特征在于,包括以下步骤:

1)分别从源站和边缘拉取同一个直播流;

2)分别接收两路直播流,模拟视频播放,创建播放缓存队列;

3)解析直播流的视频帧,并将解析完成的视频帧依次加入各自播放缓存队列;具体实现过程包括:A.解析视频帧,保存视频帧接收时间recv_time,单位为毫秒,对视频帧的解码时间戳做归一化处理;

B.如果视频帧为立即刷新图像IDR,则计算IDR视频帧的md5值idr_hashcode;

C.将解析完成的每个视频帧按照接收顺序,依次加入各自播放缓存队列中;

4)结合播放缓存队列,对比各自播放位置内容的时长偏差,得到直播延时大小;具体实现过程包括:D.在边缘直播流中,每检测到IDR,则去源站播放缓存队列中查找对应IDR是否存在,即对比idr_hashcode是否相等;如果存在,则进入步骤E),否则跳到步骤A);

E.计算对应的IDR的时长,IDR的时长等于归一化后的视频帧的解码时间戳;

F.将IDR归一化后的视频帧的解码时间戳转换成毫秒数,用idr_timestamp表示转换后的毫秒数;

G.计算源站播放时长origin_play_elapsed=now-first_idr.recv_time,单位毫秒,其中now取当前系统时间,first_idr.recv_time取源站播放缓存队列中第一个IDR的接收时间recv_time;计算边缘播放时长,edge_play_elapsed=now-edge_first_idr.recv_time,单位毫秒,其中edge_first_idr.recv_time取边缘播放缓存队列中第一个IDR的接收时间;

H.计算边缘播放位置与IDR的时长偏移edge_diff=idr_timestamp-edge_play_elapsed;计算源站播放位置与IDR的时长偏移origin_diff=origin_play_elapsed-idr_timestamp;计算边缘播放位置与源站播放位置的时长偏移delay,delay等于边缘播放位置到IDR的时长偏移,再加上IDR到源站播放位置的时长偏移,delay=edge_diff+origin_diff;所述时长偏移delay即为直播延时大小。

2.根据权利要求1所述的直播延时测量方法,其特征在于,步骤2)的具体实现过程包括:接收直播流,模拟播放过程,分别给源站和边缘创建播放缓存队列,即origin_queue和edge_queue。

3.根据权利要求1所述的直播延时测量方法,其特征在于,对视频帧的解码时间戳做归一化处理的具体实现过程包括:

1)用变量last_dts_before表示归一化前的视频帧的解码时间戳,用变量last_dts_after表示归一化后的视频帧的解码时间戳;

2)如果是第一个视频帧,归一化后的视频帧的解码时间戳为零;更新变量last_dts_before=当前视频帧的解码时间戳,last_dts_after=零;退出流程,返回零;

3)计算当前视频帧的解码时间戳与上一个视频帧时间戳last_dts_before的差值delta=当前视频帧的解码时间戳-last_dts_before;

4)归一化前的视频帧时间戳last_dts_before=当前视频帧的解码时间戳;

5)根据视频帧率计算视频帧间隔normal_interval=1000毫秒除以帧率;设置视频帧间隔最大值max_dts_interval=10*普通视频帧间隔,其中普通视频帧间隔取最大值42ms,得到max_dts_interval=420ms;

6)如果delta大于max_dts_interval或者delta小于零,则判断为视频帧跳变,修正delta,设置delta为normal_interval;

7)归一化后的视频帧的解码时间戳=last_dts_after+delta;

8)归一化后的视频帧时间戳last_dts_after=步骤7)得到的归一化后的视频帧的解码时间戳;

9)返回步骤8)归一化后的视频帧的解码时间戳,结束。

4.一种直播延时测量系统,其特征在于,包括:

拉取单元,用于从源站和边缘拉取同一个直播流;

接收单元,用于分别接收两路直播流,模拟视频播放,创建播放缓存队列;

解析单元,用于解析视频帧,解析完成的视频帧依次加入各自播放缓存队列;所述解析单元包括:解析模块,用于解析视频帧,保存视频帧接收时间recv_time,单位为毫秒,对视频帧的解码时间戳做归一化处理;

判断模块,用于执行如下判断:如果视频帧为立即刷新图像IDR,则计算IDR视频帧的md5值idr_hashcode;

存储模块,用于将解析完成的每个视频帧按照接收顺序,依次加入各自播放缓存队列中;

计算单元,用于结合播放缓存队列,对比各自播放位置内容的时长偏差得到直播延时大小;所述直播延时大小的具体获取过程包括:A.在边缘直播流中,每检测到IDR,则去源站播放缓存队列中查找对应IDR是否存在,即对比idr_hashcode是否相等;如果存在,则进入步骤B),否则执行所述解析模块的操作;

B.计算对应的IDR的时长,IDR的时长等于归一化后的视频帧的解码时间戳;

C.将IDR归一化后的视频帧的解码时间戳转换成毫秒数,用idr_timestamp表示转换后的毫秒数;

D.计算源站播放时长origin_play_elapsed=now-first_idr.recv_time,单位毫秒,其中now取当前系统时间,first_idr.recv_time取源站播放缓存队列中第一个IDR的接收时间recv_time;计算边缘播放时长,edge_play_elapsed=now-edge_first_idr.recv_time,单位毫秒,其中edge_first_idr.recv_time取边缘播放缓存队列中第一个IDR的接收时间;

E.计算边缘播放位置与IDR的时长偏移edge_diff=idr_timestamp-edge_play_elapsed;计算源站播放位置与IDR的时长偏移origin_diff=origin_play_elapsed-idr_timestamp;计算边缘播放位置与源站播放位置的时长偏移delay,delay等于边缘播放位置到IDR的时长偏移,再加上IDR到源站播放位置的时长偏移,delay=edge_diff+origin_diff;所述时长偏移delay即为直播延时大小。

5.根据权利要求4所述的直播延时测量系统,其特征在于,所述接收单元包括:接收模块,用于接收直播流,模拟播放过程;

创建模块,用于分别给源站和边缘创建播放缓存队列,即origin_queue和edge_queue。

6.根据权利要求4所述的直播延时测量系统,其特征在于,所述解析单元包括:解析模块,用于解析视频帧,保存视频帧接收时间recv_time,单位为毫秒,对视频帧的解码时间戳做归一化处理;

判断模块,用于执行如下判断:如果视频帧为立即刷新图像IDR,则计算IDR视频帧的md5值idr_hashcode;

存储模块,用于将解析完成的每个视频帧按照接收顺序,依次加入各自播放缓存队列中。

说明书 :

一种直播延时测量方法及系统

技术领域

[0001] 本发明涉及视频直播领域,特别是一种直播延时测量方法及系统。

背景技术

[0002] 直播延时是衡量直播性能的一个重要指标,在直播运营中,经常需要测试不同地区,不同CDN厂商的直播延时大小。常规的测试手段主要有:播放同一个直播流,一路来自源站,一路来自边缘,观察对比两路流,计算同一个画面出现的时间间隔;或者在测试直播流中加上时间标记,播放同一个直播流,一路来自源站,一路来自边缘,肉眼观察两路流显示的时间,计算时间的差值;以上几种常规手段都需要人工肉眼辨别,费时费力,效率低下。

发明内容

[0003] 本发明所要解决的技术问题是,针对现有技术不足,提供一种直播延时测量方法及系统,自动测量各CDN和边缘节点的延时数据,展现当前和历史延时数据,提升运维效率。
[0004] 为解决上述技术问题,本发明所采用的技术方案是:一种直播延时测量方法,其特征在于,包括以下步骤:
[0005] 1)分别从源站和边缘拉取同一个直播流;
[0006] 2)分别接收两路直播流,模拟视频播放,创建播放缓存队列;
[0007] 3)解析直播流的视频帧,并将解析完成的视频帧依次加入各自播放缓存队列;
[0008] 4)结合播放缓存队列,对比各自播放位置内容的时长偏差,得到直播延时大小。
[0009] 步骤2)的具体实现过程包括:接收直播流,模拟播放过程,分别给源站和边缘创建播放缓存队列,即origin_queue和edge_queue。
[0010] 步骤3)的具体实现过程包括:
[0011] 1)解析视频帧,保存视频帧接收时间recv_time,单位为毫秒,对视频帧的dts(解码时间戳)做归一化处理;
[0012] 2)如果视频帧为立即刷新图像IDR,则计算IDR视频帧的md5值idr_hashcode;
[0013] 3)将解析完成的每个视频帧按照接收顺序,依次加入各自播放缓存队列中。
[0014] 对视频帧dts做归一化处理的具体实现过程包括:
[0015] 1)用变量last_dts_before表示最后归一化前的dts,用变量last_dts_after表示最后归一化后的视频帧时间戳;
[0016] 2)如果第一个视频帧,归一化后的视频帧的dts为零,更新变量last_dts_before=当前视频帧的dts,last_dts_after=零,直接退出,返回零;
[0017] 3)计算当前视频帧的dts与上一个视频帧时间戳last_dts_before的差值delta=dts-last_dts_before;
[0018] 4)更新last_dts_before,归一化前的视频帧last_dts_before=当前视频帧的dts;
[0019] 5)根据视频帧率计算出每个视频帧间隔normal_interval=1000毫秒除以帧率。设置视频帧间隔最大值max_dts_interval=10*普通视频帧间隔,其中普通视频帧间隔取最大值42ms,得到max_dts_interval=420ms;
[0020] 6)如果delta大于max_dts_interval或者delta小于零,则判断为视频帧跳变,需要修正delta,设置delta为normal_interval;
[0021] 7)归一化后的视频帧的dts=last_dts_after+delta;
[0022] 8)更新变量:归一化后的视频帧时间戳last_dts_after=步骤7中得到的归一化后的视频帧的dts;
[0023] 9)返回归一化后的dts,结束。
[0024] 步骤4)的具体实现过程包括:
[0025] 4)在边缘直播流中,每检测到IDR,则去源站播放缓存队列中查找对应IDR是否存在,即对比idr_hashcode是否相等;如果存在,则进入步骤5),否则跳到步骤1);
[0026] 5)计算对应的IDR的时长,IDR的时长等于归一化后的视频帧的dts;
[0027] 6)将IDR归一化后的视频帧的dts转换成毫秒数,用idr_timestamp表示转换后的毫秒数;
[0028] 7)计算源站播放时长origin_play_elapsed=now-first_idr.recv_time,单位毫秒,其中now取当前系统时间,first_idr.recv_time取源站播放缓存队列中第一个IDR的接收时间recv_time;计算边缘播放时长,edge_play_elapsed=now-edge_first_idr.recv_time,单位毫秒,其中edge_first_idr.recv_time取边缘播放缓存队列中第一个IDR的接收时间;
[0029] 8)计算边缘播放位置与IDR的时长偏移edge_diff=idr_timestamp-edge_play_elapsed;计算源站播放位置与IDR的时长偏移origin_diff=origin_play_elapsed-idr_timestamp;计算边缘播放位置与源站播放位置的时长偏移delay,delay等于边缘播放位置到IDR的时长偏移,再加上IDR到源站播放位置的时长偏移,delay=edge_diff+origin_diff;所述时长偏移delay即为直播延时大小。
[0030] 还包括:
[0031] 9)判断接收直播延时大小是否大于20秒,如果小于,则跳转到步骤1),否则结束。
[0032] 相应地,本发明还提供了一种直播延时测量系统,其包括:
[0033] 拉取单元,用于从源站和边缘拉取同一个直播流;
[0034] 接收单元,用于分别接收两路直播流,模拟视频播放,创建播放缓存队列;
[0035] 解析单元,用于解析视频帧,解析完成的视频帧依次加入各自播放缓存队列;
[0036] 计算单元,用于结合播放缓存队列,对比各自播放位置内容的时长偏差得到直播延时大小。
[0037] 所述接收单元包括:
[0038] 接收模块,用于接收直播流,模拟播放过程;
[0039] 创建模块,用于分别给源站和边缘创建播放缓存队列,即origin_queue和edge_queue。
[0040] 所述解析单元包括:
[0041] 解析模块,用于解析视频帧,保存视频帧接收时间recv_time,单位为毫秒,对视频帧dts做归一化处理;
[0042] 判断模块,用于执行如下判断:如果视频帧为立即刷新图像IDR,则计算IDR视频帧的md5值idr_hashcode;
[0043] 存储模块,用于将解析完成的每个视频帧按照接收顺序,依次加入各自播放缓存队列中。
[0044] 与现有技术相比,本发明所具有的有益效果为:本发明能够自动测量各个区域,各家CDN直播延时大小,记录并展示历史延时数据,提升了运维效率,为直播平台提供可视化数据支撑,提升了直播平台的便捷性和直播质量稳定性。

附图说明

[0045] 图1为本发明延时计算原理图;
[0046] 图2为本发明直播延时测量流程图;
[0047] 图3为本发明DTS归一化流程图。

具体实施方式

[0048] 本发明整体实现思路如下:
[0049] 1.向直播调度服务请求同一个流在源站和边缘节点的访问URL;
[0050] 2.分别从源站(origin)和边缘(edge)拉取同一个直播流;
[0051] 3.分别接收两路直播流,模拟视频播放,创建播放缓存队列;
[0052] 4.解析视频帧,解析完成的视频帧依次加入各自播放缓存队列;
[0053] 5.结合播放缓存队列,对比各自播放位置内容的时长偏差得到直播延时大小;
[0054] 6.将直播延时数据实时写入elasticsearch存储中;
[0055] 7.部署grafana可视化监控工具或直播质量分析系统,展现直播延时实时和历史数据。
[0056] 具体流程如下:
[0057] 1.分别从源站(origin)和边缘(edge)拉取同一个直播流。
[0058] 2.接收直播码流,模拟播放过程,创建播放缓存队列,分别给源站和边缘创建播放缓存队列,origin_queue和edge_queue;
[0059] 3.解析视频帧,保存视频帧接收时间recv_time,单位毫秒,对视频帧dts做归一化处理,详细步骤见:视频帧dts归一化处理流程;
[0060] 4.如果视频帧为IDR(立即刷新图像),计算IDR视频帧的md5值idr_hashcode[0061] 5.解析完成的每个视频帧按照接收顺序依次加入各自播放缓存队列中;
[0062] 6.在边缘直播流中,每检测到IDR,则去源站播放缓存队列中查找对应IDR是否存在,即对比idr_hashcode是否相等。如果存在,则进入步骤7,否则跳到步骤3;
[0063] 7.计算对应的IDR的时长,步骤3对dts归一化处理,此时,IDR的时长等于归一化后的dts;
[0064] 8.将IDR归一化后的dts转换成毫秒数,这里用idr_timestamp表示转换后的毫秒数;
[0065] 9.计算源站播放时长,origin_play_elapsed=now-first_idr.recv_time,单位毫秒,其中now取当前系统时间,first_idr.recv_time取源站播放缓存队列中第一个IDR的接收时间recv_time;
[0066] 10.计算边缘播放时长,edge_play_elapsed=now-edge_first_idr.recv_time,单位毫秒,其中now取当前系统时间,edge_first_idr.recv_time取边缘播放缓存队列中第一个IDR的接收时间。
[0067] 11.计算边缘播放位置与IDR的时长偏移edge_diff=idr_timestamp-edge_play_elapsed;
[0068] 12.计算源站播放位置与IDR的时长偏移origin_diff=origin_play_elapsed-idr_timestamp;
[0069] 13.计算边缘播放位置与源站播放位置的时长偏移delay,也等于边缘播放位置到IDR的时长偏移,再加上IDR到源站播放位置的时长偏移,delay=edge_diff+origin_diff;
[0070] 14.步骤13的时长偏移delay就是我们所求的直播延时大小,将延时数据delay写入到elasticsearch中;
[0071] 15.判断接收直播流时长是否大于20秒,如果小于,则跳转到步骤3,否则结束;
[0072] 16.结束;
[0073] 视频帧dts归一化处理流程:
[0074] 1.用变量last_dts_before表示归一化前的dts,变量last_dts_after表示归一化后的dts;
[0075] 2.如果是第一个视频帧,归一化的dts为零;设置last_dts_before等于当前视频dts,last_dts_after等于零,退出流程,返回零;
[0076] 3.计算当前视频帧dts与上一个视频帧dts的差值delta=dts-last_dts_before;
[0077] 4.更新变量:last_dts_before=当前视频帧的dts;
[0078] 5.根据视频帧率,计算出视频帧间隔normal_interval=1000ms除以帧率,设置视频帧间隔最大值max_dts_interval=10*常规视频间隔,其中常规视频间隔取42ms,得到max_dts_interval=420ms;
[0079] 6.如果delta大于max_dts_interval或者delta小于零,则可以判断为dts跳变,需要修正delta,设置delta为normal_interval;
[0080] 7.归一化后的dts=last_dts_after+delta;
[0081] 8.更新变量:last_dts_after=归一化后的dts;
[0082] 9.返回归一化后的dts,结束。
[0083] 本发明可以提前配置多路直播流,多家CDN厂商和边缘节点,实时计算直播延时,并写入elasticsearch存储中。通过elasticsearch API访问直播延时数据,可以根据实际需求,横向对比多家CDN,多个区域边缘节点直播延时大小,也可以纵向对比观察历史延时数据。为直播运营提供了有效的数据支撑,提升了直播平台质量可靠性。