北京2016年10月12日電 /美通社/ -- 七牛云于6 月底發(fā)布了一個(gè)針對(duì)視頻直播的實(shí)時(shí)流網(wǎng)絡(luò)LiveNet 和完整的直播云解決方案,很多開(kāi)發(fā)者對(duì)這個(gè)網(wǎng)絡(luò)和解決方案的細(xì)節(jié)和使用場(chǎng)景非常感興趣。
七牛結(jié)合實(shí)時(shí)流網(wǎng)絡(luò) LiveNet 和直播云解決方案的實(shí)踐,用八篇文章,更系統(tǒng)化地介紹當(dāng)下大熱的視頻直播各環(huán)節(jié)的關(guān)鍵技術(shù),幫助視頻直播創(chuàng)業(yè)者們更全面、深入地了解視頻直播技術(shù),更好地技術(shù)選型。
本篇是《視頻直播技術(shù)詳解》系列的最后一篇。直播云SDK 性能測(cè)試模型,SDK 的性能對(duì)最終App 的影響非常大。SDK 版本迭代快速,每次發(fā)布前都要進(jìn)行系統(tǒng)的測(cè)試,測(cè)試要有比較一致的行為,要有性能模型作為理論基礎(chǔ),對(duì)SDK 的性能做量化評(píng)估。本文就是來(lái)探討影響SDK 性能的指標(biāo)并建立相應(yīng)的性能模型的。
影響視頻質(zhì)量和大小的重要參數(shù)
在進(jìn)行測(cè)試之前需要明確幾個(gè)對(duì)視頻的質(zhì)量和大小影響最大的參數(shù):幀率、碼率和分辨率。
1)如何制定幀率
一幀就是一副靜止的畫(huà)面,連續(xù)的幀就形成動(dòng)畫(huà),如電視圖象等。所謂幀數(shù),簡(jiǎn)單地說(shuō),就是在1 秒鐘時(shí)間里傳輸?shù)膱D片的數(shù),也可以理解為圖形處理器每秒鐘能夠刷新幾次,通常用fps(Frames Per Second)表示。每一幀都是靜止的圖象,快速連續(xù)地顯示幀便形成了運(yùn)動(dòng)的假象。高的幀率可以得到更流暢、更逼真的動(dòng)畫(huà)。每秒鐘幀數(shù)(fps) 愈多,所顯示的動(dòng)作就會(huì)愈流暢。
2)如何制定碼率
首先看視頻編碼的目的,是為了在有限的帶寬中傳輸盡可能清晰的視頻。以每秒25 幀的圖像舉例,25 幀圖像中定義了GOP 組,目前主要是有I、B、P 幀三種幀格式。I 幀是關(guān)鍵幀,可以想象它就是一幅JPEG 壓縮圖像;B、P 幀是依靠I 幀存在的,如果丟失了I 幀,B、P 幀是看不到圖像的。B、P 幀描述的不是實(shí)際的圖像像素內(nèi)容,而是每個(gè)相關(guān)像素的變化量,他們相對(duì)于I 幀信息量會(huì)很小。GOP 組是指一個(gè)關(guān)鍵幀I幀所在的組的長(zhǎng)度,每個(gè)GOP 組只有1 個(gè)I 幀。
一組畫(huà)面的碼流大小跟什么有關(guān)?當(dāng)視頻編碼的壓縮方式都一樣,清晰度要求都一樣的時(shí)候,GOP 組的長(zhǎng)度格式?jīng)Q定了碼流的大小,例如:每秒25 幀畫(huà)面,GOP 組長(zhǎng)度為5,那么幀格式為IBPBP,那么1 秒鐘有5 個(gè)I 幀、10 個(gè)B 幀、10 個(gè)P 幀;如果GOP 組長(zhǎng)度為15,幀格式就是IBBPBBPBBPBBPBB,那么1 秒鐘內(nèi)會(huì)有2 個(gè)I 幀和16 個(gè)B 幀和7 個(gè)P 幀,那么5 個(gè)I 幀比2 個(gè)I 幀占用的數(shù)據(jù)信息量大,所以GOP 組的長(zhǎng)度格式也決定了碼流的大小。
3)如何指定分辨率
分辨率概念視頻分辨率是指視頻成像產(chǎn)品所成圖像的大小或尺寸。常見(jiàn)的視像分辨率有640×480、1088×720、1920×1088。在成像的兩組數(shù)字中,前者為圖片長(zhǎng)度,后者為圖片的寬度,兩者相乘得出的是圖片的像素。
影響SDK 性能的指標(biāo)
有了上述的前置知識(shí),可以開(kāi)始準(zhǔn)備測(cè)試SDK 的性能了,首先分析一下都有哪些指標(biāo)可以反映SDK 的性能,分成Android 和iOS 兩個(gè)平臺(tái):
AndroidGC :可以通過(guò)GC 日志記錄、Mirror GC 和Full GC 的頻次和時(shí)間,F(xiàn)ull GC 會(huì)造成比較明顯的卡頓,需要評(píng)估UI Loop 就是VSync Loop :反映SDK 對(duì)App 流暢度的影響,理論上60 fps 是最流暢的值Memory :反映SDK 占用內(nèi)存的大小CPU Usage :反映SDK 占用計(jì)算資源的大小
iOSUI Loop :反映SDK 對(duì)App 流暢度的影響,理論上60 fps 是最流暢的值Memory :反映SDK 占用內(nèi)存的大小CPU Usage :反映SDK 占用計(jì)算資源的大小
除了上面的一些系統(tǒng)級(jí)別的指標(biāo)外,下面是直播SDK 中特有的一些指標(biāo),這些指標(biāo)可以反映出SDK 的核心競(jìng)爭(zhēng)力和一些主要的差異,涉及到視頻的清晰度和流暢度,也是可以量化的。
1)影響視頻清晰度的指標(biāo)
幀率碼率分辨率量化參數(shù)(壓縮比)
2)影響視頻流暢度的指標(biāo)
碼率幀率
3)其他重要指標(biāo)
直播是流量和性能的消耗大戶(hù),有一些指標(biāo),直接影響了用戶(hù)的感受,也是我們需要重點(diǎn)關(guān)注的:
耗電量發(fā)熱(不好量化,大部分情況發(fā)熱和耗電量正比,可以使用耗電量暫時(shí)替代)
測(cè)試計(jì)劃
測(cè)試過(guò)程需要先固化一些測(cè)試條件,然后根據(jù)不同的測(cè)試條件得出測(cè)試結(jié)果,這里選擇了兩個(gè)現(xiàn)在最常見(jiàn)的條件,是七牛云通過(guò)回訪大量的客戶(hù)得出的一些統(tǒng)計(jì)數(shù)字,可以反映大部分直播應(yīng)用所處的場(chǎng)景。主要從分辨率、視頻處理、碼率和網(wǎng)絡(luò)環(huán)境幾個(gè)維度進(jìn)行限制。
最后分為幾個(gè)兩種測(cè)試指標(biāo):客觀和主觀指標(biāo),前者反映了SDK 對(duì)系統(tǒng)的消耗程度,但雖說(shuō)是客觀指標(biāo)并不是說(shuō)對(duì)用戶(hù)沒(méi)有影響、只是說(shuō)得出的結(jié)果用戶(hù)感受不明顯。主觀指標(biāo)則會(huì)直接影響最終用戶(hù)體驗(yàn),但在傳統(tǒng)的測(cè)試中反而容易被忽略,因?yàn)椴缓昧炕?,這里拍磚引玉的提出一些量化的方式,希望引起讀者的思考。
測(cè)試條件A
分辨率480p無(wú)水印,無(wú)美顏碼率1 M網(wǎng)絡(luò)保證在0.5 M ~ 2 M
這個(gè)條件,反映了大部分低速網(wǎng)絡(luò)情況下的使用場(chǎng)景,也反映了SDK 基本的性能情況,可以作為SDK 基本推流和拉流情況下的基準(zhǔn)測(cè)試,不引入太多的測(cè)試依賴(lài)。
測(cè)試條件B分辨率720p無(wú)水印,有美顏碼率1 M網(wǎng)絡(luò)保證在0.5 M ~ 2 M
這個(gè)條件,反映了大部分客戶(hù)的使用場(chǎng)景,具有較高的分辨率和美顏視頻處理,可以作為SDK 競(jìng)品分析的重要依據(jù),測(cè)試結(jié)果非常接近真實(shí)場(chǎng)景。
1)客觀指標(biāo)測(cè)試計(jì)劃
客觀影響App 穩(wěn)定性和性能的指標(biāo):
Memory測(cè)試10 分鐘,內(nèi)存曲線測(cè)試1 小時(shí),TP99,TP95,TP90,需要?dú)w檔測(cè)試1 小時(shí),內(nèi)存增量,考察是否有內(nèi)存泄露,需要?dú)w檔參考值:上次結(jié)果
CPU測(cè)試10 分鐘,CPU Usage 曲線測(cè)試10 分鐘,TP99,TP95,TP90,需要?dú)w檔參考值:上次結(jié)果
碼率測(cè)試10 分鐘,TP99,TP95,TP90,重點(diǎn)說(shuō)明,這里的碼率控制需要分開(kāi)來(lái)看,如果網(wǎng)絡(luò)抖動(dòng)造成碼率降低,這樣的點(diǎn)不計(jì)入進(jìn)來(lái),只測(cè)試SDK 碼率控制,需要?dú)w檔參考值:1 M(大小都是偏差)耗電量測(cè)試一小時(shí),記錄進(jìn)程總耗電量、屏幕顯示耗電量、CPU 耗電量,需要?dú)w檔參考值:上次結(jié)果
2)主觀指標(biāo)測(cè)試計(jì)劃
主觀影響App 使用者的指標(biāo):
UI Loop App 本身可以達(dá)到的最大幀率,不同于視頻幀率,統(tǒng)計(jì)他的原因是我們的SDK 可能會(huì)影響整個(gè)App 的流暢度,需要跟蹤測(cè)試10 分鐘,UI Loop 曲線測(cè)試10 分鐘,UI Loop TP99,TP95,TP90,需要?dú)w檔反復(fù)比較參考值:60 fps
Android GC測(cè)試1 小時(shí),記錄Mirror GC 和Full GC 的頻次,記錄GC 時(shí)長(zhǎng)的TP99,TP95,TP90,需要?dú)w檔反復(fù)比較參考值:上次結(jié)果幀率(fps)測(cè)試10 分鐘,TP99,TP95,TP90,需要?dú)w檔反復(fù)比較參考值:30 fps
PSNR 比較視頻清晰度的指標(biāo)測(cè)試10 分鐘,需要?dú)w檔反復(fù)比較,這個(gè)指標(biāo)可以使用固定視頻作為輸入?yún)⒖贾担荷洗谓Y(jié)果
3)結(jié)果顯示
表格顯示具體指標(biāo)曲線顯示原始數(shù)據(jù)和時(shí)間軸的數(shù)據(jù)熱圖顯示和參考值的偏差熱圖顯示距離上次歸檔值是改善了還是惡化了
通過(guò)這種反復(fù)迭代的自動(dòng)化的、系統(tǒng)化的測(cè)試,七牛云以職人之心近乎偏執(zhí)地反復(fù)打磨著SDK 的性能,只為給最終用戶(hù)帶來(lái)最好的直播體驗(yàn),幫助客戶(hù)通過(guò)次時(shí)代的媒體最大化自己的商業(yè)價(jià)值。