曾 信 李明春 祝振東
(1.武漢郵電科學研究院 武漢 430074)(2.烽火通信科技股份有限公司 武漢 430074)
當前IP網絡是一個不可靠的網絡,并且IPTV業(yè)務是一個需要高帶寬、低傳輸時延和低時延抖動的業(yè)務。在IPTV業(yè)務運行的時候,整個IPTV網絡任何一個環(huán)節(jié)出現問題都可能導致播放錯誤。所以,對IPTV播放的監(jiān)控是必不可少的[1~3]。
在IPTV播放性能統計方面,傳統的IPTV監(jiān)控由于沒有良好的手段,常使用電視墻的方式對業(yè)務進行監(jiān)控,在出現問題時進行手工記錄,無法保存當前的原始數據,因而無法對出現的問題進行分析,無法找到故障并進行解決,存在很大隱患。在傳輸部門,雖然有一些網絡監(jiān)控的工具,但只能分析到網絡層的數據,不能分析到IPTV機頂盒本身存在的問題,兩者沒有有效地結合在一起,對整個IPTV業(yè)務的性能就沒有一個確切的了解[4~5]。
基于上述背景,本次研究對一些性能參數的算法做出了改進,并添加了shell腳本和sqlite數據庫的應用,使得整個系統更加輕便,運行起來更為流暢。同時大量的原始數據可以存儲在數據庫中,在需要時還可以提取數據庫中的數據進行故障排查?;贗PTV的性能統計方法架構圖如圖1所示。
服務器端通過數據打包模塊將媒體流打包成TCP/UDP包發(fā)往客戶端,客戶端對收到的包進行解析,提取出其中的媒體信息,同時通過包中的其他信息計算出性能相關的參數。計算所得的性能參數存入sqlite數據庫之后由shell腳本取出生成日志文件并發(fā)送到服務器端。
圖1 IPTV性能統計方法架構圖
在目前的網絡及系統的現狀下,要實時監(jiān)控IPTV業(yè)務的性能,主要需要完成性能參數的計算,這幾個參數計算上報的代碼實現也是本文要在實際工作中解決的問題,在實際代碼中我們對參數的算法也做了改進,使其適用于多種網絡環(huán)境。而Sqlite數據庫以及shell腳本的應用也使得系統運行更為流暢,各個模塊之間分工明確,減少了代碼冗余度[6~9]。
首先在機頂盒代碼中加入性能參數計算部分,根據網絡包中的信息計算出性能參數并周期性寫入sqlite數據庫。這一周期為計算周期,具體的參數計算在播放器代碼中實現,播放器代碼中本身就要對收到的網絡包進行解析,可對其功能進行擴展從而計算出丟包率和理論碼率等具體參數值,這些參數值都是在一個計算周期內計算一次并通過數據庫接口在sqlite數據庫中創(chuàng)建相應的數據表對這些參數值進行儲存。數據庫的寫入操作由C++代碼實現,其中數據庫分為兩部分,一部分保存計算所得的性能參數,另外一部分保存計算周期內記錄到的用戶行為。
然后由shell腳本周期性地讀取數據庫中的各個表然后計算出一個統計周期內各參數的最大值、最小值和平均值,這一周期為統計周期。然后在每個統計周期由shell腳本對這些信息進行匯總合并。將多個計算周期內的性能參數值以及用戶行為進行統計,然后進行匯總上報給服務器端并生成動態(tài)更新的日志文件。具體流程圖如圖2所示。
圖2 IPTV性能統計流程圖
這樣每到一個統計周期,客戶端就會匯總一次數據上報給服務器,從而能夠實時地監(jiān)控IPTV播放業(yè)務的性能狀況,對用戶的行為作出分析。
流媒體數據最初打包成為TS包進行發(fā)送,而各地服務器對TS包進行處理的方式也不一樣,一些將TS包進一步打包成為RTP包,然后根據網絡層協議封裝成為TCP或UDP包進行傳輸,而另一些則直接將TS包進行封裝后傳輸。
3.2.1 Jitter:監(jiān)控周期內抖動
Jitter為接收者相對發(fā)送者的時間間隔差值的平均偏差[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:監(jiān)控周期內丟包個數
期望收到的RTP包頭序列號減去實際收到的RTP包頭序列碼為丟包數(RTP包頭序列碼由服務器在將TS包打包成RTP包時添加到RTP包頭中,為16位循環(huán),且隨每個RTP數據包而增加1,由接收者用來探測包損失)[14~15]。
在實際當中存在數據流不包含RTP包頭的情況,這時可以根據TS包中的PCR碼值計算出這段時間的丟包個數,計算過程如圖3所示。
圖3 不含RTP包頭時的LR計算過程
3.2.3 DF:監(jiān)控周期內時延
單位時間間隔內(通常是1s),計算出的所有虛擬緩存的最大值與最小值的差值與媒體速率的比值[11]。假設在測量點有虛擬緩存大小為VB,在計算周期內,當收到第i個IP包到達時,按以下公式計算出兩個VB值:
其中VB(i,pre)是第i個包到來前計算出的VB值,VB(i,post)是第i個包到來后計算出的VB值,Sj是第j個包中包含的媒體信息字節(jié)數,Ti是第i個IP包到達時刻相對于計算周期起始時刻的時間,MR為IPTV播放的實時碼率。
然后可以計算出 DF=[Max(VB)-Min(VB)]/MR,其中Max(VB)為計算出的VB值的最大值,Min(VB)為所計算出的VB值的最小值。
3.2.4 節(jié)目播放參數
在節(jié)目播放過程中,還需要實時記錄用戶操作的數據,在統計周期內記錄下播放過的節(jié)目名稱和頻道號、網絡地址、播放時長、分辨率等節(jié)目重要參數可以用于用戶體驗分析,平臺可以利用這些數據做出符合大多數觀眾喜好的更新[12~13]。
在本地搭建好實驗環(huán)境,使用一臺電腦作為服務器發(fā)送本地的媒體流到盒端進行播放,使用發(fā)流軟件Live555或PixStream發(fā)送本地準備好的媒體文件。同時由于shell腳本使用ftp協議傳輸日志文件,因此在服務器端要用FileZilla Server配置好ftp服務功能。通過查看上傳的日志文件可以得到性能統計參數的計算值,而實際值則需要通過Wireshark軟件分析網絡包得到。
實驗結果對比如圖4所示,在傳輸的TS流包含RTP包頭的情況下,傳統方法可以計算出上述參數,在此狀況下與本方法的結果進行對比,并使用Wireshark抓包工具測出實際值,發(fā)現本方法的計算結果更具準確性。
圖4 帶RTP包頭情況下丟包率對比圖
在傳輸的視頻流中不含RTP包頭的情況下,傳統方法無法計算丟包率,而采用本方法仍可得到。利用網絡損傷儀將發(fā)流丟包率設置為固定的20%之后得到的丟包率計算結果對比效果如圖5所示。
圖5 不帶RTP包頭情況下丟包率對比圖
該方法的設計與實現能夠應用在IPTV播放業(yè)務中,使得服務器能夠實時檢測流媒體播放效果,監(jiān)控播放性能,從而能夠定位播放過程中可能出現的問題。
本文主要介紹了IPTV播放的性能統計方法設計,其中由于利用了sqlite輕量級數據庫和shell腳本進行數據的存取工作,使得性能統計的效率得到大大提升。同時shell腳本的利用使得在面臨不同的分省版本時可以自由切換上傳文件的組織形式,從而滿足各地規(guī)范。此外,本文還對性能統計參數的算法進行了介紹,并對其做了優(yōu)化提升,使計算周期和統計周期靈活可配,組織形式多樣,適用于多種網絡環(huán)境,對后續(xù)的性能統計發(fā)展具有指導意義。
同時,服務器還可以分析用戶行為,統計得出比較受歡迎的節(jié)目等,這些都可以應用在大數據分析方面。