基于IPTV播放系统的性能统计方法研究∗
2019-06-01李明春祝振东
曾 信 李明春 祝振东
(1.武汉邮电科学研究院 武汉 430074)(2.烽火通信科技股份有限公司 武汉 430074)
1 引言
当前IP网络是一个不可靠的网络,并且IPTV业务是一个需要高带宽、低传输时延和低时延抖动的业务。在IPTV业务运行的时候,整个IPTV网络任何一个环节出现问题都可能导致播放错误。所以,对IPTV播放的监控是必不可少的[1~3]。
在IPTV播放性能统计方面,传统的IPTV监控由于没有良好的手段,常使用电视墙的方式对业务进行监控,在出现问题时进行手工记录,无法保存当前的原始数据,因而无法对出现的问题进行分析,无法找到故障并进行解决,存在很大隐患。在传输部门,虽然有一些网络监控的工具,但只能分析到网络层的数据,不能分析到IPTV机顶盒本身存在的问题,两者没有有效地结合在一起,对整个IPTV业务的性能就没有一个确切的了解[4~5]。
2 整体框架设计
基于上述背景,本次研究对一些性能参数的算法做出了改进,并添加了shell脚本和sqlite数据库的应用,使得整个系统更加轻便,运行起来更为流畅。同时大量的原始数据可以存储在数据库中,在需要时还可以提取数据库中的数据进行故障排查。基于IPTV的性能统计方法架构图如图1所示。
服务器端通过数据打包模块将媒体流打包成TCP/UDP包发往客户端,客户端对收到的包进行解析,提取出其中的媒体信息,同时通过包中的其他信息计算出性能相关的参数。计算所得的性能参数存入sqlite数据库之后由shell脚本取出生成日志文件并发送到服务器端。
图1 IPTV性能统计方法架构图
3 方法研究与实现
在目前的网络及系统的现状下,要实时监控IPTV业务的性能,主要需要完成性能参数的计算,这几个参数计算上报的代码实现也是本文要在实际工作中解决的问题,在实际代码中我们对参数的算法也做了改进,使其适用于多种网络环境。而Sqlite数据库以及shell脚本的应用也使得系统运行更为流畅,各个模块之间分工明确,减少了代码冗余度[6~9]。
3.1 方法设计
首先在机顶盒代码中加入性能参数计算部分,根据网络包中的信息计算出性能参数并周期性写入sqlite数据库。这一周期为计算周期,具体的参数计算在播放器代码中实现,播放器代码中本身就要对收到的网络包进行解析,可对其功能进行扩展从而计算出丢包率和理论码率等具体参数值,这些参数值都是在一个计算周期内计算一次并通过数据库接口在sqlite数据库中创建相应的数据表对这些参数值进行储存。数据库的写入操作由C++代码实现,其中数据库分为两部分,一部分保存计算所得的性能参数,另外一部分保存计算周期内记录到的用户行为。
然后由shell脚本周期性地读取数据库中的各个表然后计算出一个统计周期内各参数的最大值、最小值和平均值,这一周期为统计周期。然后在每个统计周期由shell脚本对这些信息进行汇总合并。将多个计算周期内的性能参数值以及用户行为进行统计,然后进行汇总上报给服务器端并生成动态更新的日志文件。具体流程图如图2所示。
图2 IPTV性能统计流程图
这样每到一个统计周期,客户端就会汇总一次数据上报给服务器,从而能够实时地监控IPTV播放业务的性能状况,对用户的行为作出分析。
3.2 参数计算
流媒体数据最初打包成为TS包进行发送,而各地服务器对TS包进行处理的方式也不一样,一些将TS包进一步打包成为RTP包,然后根据网络层协议封装成为TCP或UDP包进行传输,而另一些则直接将TS包进行封装后传输。
3.2.1 Jitter:监控周期内抖动
Jitter为接收者相对发送者的时间间隔差值的平均偏差[10]。Si是包i中的RTP时间戳(RTP时间戳是RTP包头特有的标志位,具体意义为服务器将TS包打包成RTP包时服务器端的本地时间采样)。Ri是包i到达时刻(单位为RTP时间戳单位)。对于两个包i和j,其收包偏差D可以表示为;利用该包和前一包i-1的偏差D(按到达顺序,而非序号顺序),根据公式计算可以出第i个包到来时的Jitter值J(i)。
3.2.2 PacketLost:监控周期内丢包个数
期望收到的RTP包头序列号减去实际收到的RTP包头序列码为丢包数(RTP包头序列码由服务器在将TS包打包成RTP包时添加到RTP包头中,为16位循环,且随每个RTP数据包而增加1,由接收者用来探测包损失)[14~15]。
在实际当中存在数据流不包含RTP包头的情况,这时可以根据TS包中的PCR码值计算出这段时间的丢包个数,计算过程如图3所示。
图3 不含RTP包头时的LR计算过程
3.2.3 DF:监控周期内时延
单位时间间隔内(通常是1s),计算出的所有虚拟缓存的最大值与最小值的差值与媒体速率的比值[11]。假设在测量点有虚拟缓存大小为VB,在计算周期内,当收到第i个IP包到达时,按以下公式计算出两个VB值:
其中VB(i,pre)是第i个包到来前计算出的VB值,VB(i,post)是第i个包到来后计算出的VB值,Sj是第j个包中包含的媒体信息字节数,Ti是第i个IP包到达时刻相对于计算周期起始时刻的时间,MR为IPTV播放的实时码率。
然后可以计算出 DF=[Max(VB)-Min(VB)]/MR,其中Max(VB)为计算出的VB值的最大值,Min(VB)为所计算出的VB值的最小值。
3.2.4 节目播放参数
在节目播放过程中,还需要实时记录用户操作的数据,在统计周期内记录下播放过的节目名称和频道号、网络地址、播放时长、分辨率等节目重要参数可以用于用户体验分析,平台可以利用这些数据做出符合大多数观众喜好的更新[12~13]。
4 结果分析
4.1 实验方法说明
在本地搭建好实验环境,使用一台电脑作为服务器发送本地的媒体流到盒端进行播放,使用发流软件Live555或PixStream发送本地准备好的媒体文件。同时由于shell脚本使用ftp协议传输日志文件,因此在服务器端要用FileZilla Server配置好ftp服务功能。通过查看上传的日志文件可以得到性能统计参数的计算值,而实际值则需要通过Wireshark软件分析网络包得到。
4.2 实验结果展示
实验结果对比如图4所示,在传输的TS流包含RTP包头的情况下,传统方法可以计算出上述参数,在此状况下与本方法的结果进行对比,并使用Wireshark抓包工具测出实际值,发现本方法的计算结果更具准确性。
图4 带RTP包头情况下丢包率对比图
在传输的视频流中不含RTP包头的情况下,传统方法无法计算丢包率,而采用本方法仍可得到。利用网络损伤仪将发流丢包率设置为固定的20%之后得到的丢包率计算结果对比效果如图5所示。
图5 不带RTP包头情况下丢包率对比图
该方法的设计与实现能够应用在IPTV播放业务中,使得服务器能够实时检测流媒体播放效果,监控播放性能,从而能够定位播放过程中可能出现的问题。
5 结语
本文主要介绍了IPTV播放的性能统计方法设计,其中由于利用了sqlite轻量级数据库和shell脚本进行数据的存取工作,使得性能统计的效率得到大大提升。同时shell脚本的利用使得在面临不同的分省版本时可以自由切换上传文件的组织形式,从而满足各地规范。此外,本文还对性能统计参数的算法进行了介绍,并对其做了优化提升,使计算周期和统计周期灵活可配,组织形式多样,适用于多种网络环境,对后续的性能统计发展具有指导意义。
同时,服务器还可以分析用户行为,统计得出比较受欢迎的节目等,这些都可以应用在大数据分析方面。