「視頻直播技術詳解」系列之七:直播雲 SDK 性能測試模型

来源:http://www.cnblogs.com/qiniu/archive/2016/11/30/6117121.html
-Advertisement-
Play Games

​關於直播的技術文章不少,成體系的不多。我們將用七篇文章,更系統化地介紹當下大熱的視頻直播各環節的關鍵技術,幫助視頻直播創業者們更全面、深入地瞭解視頻直播技術,更好地技術選型。 本系列文章大綱如下: (一)採集 (二)處理 (三)編碼和封裝 (四)推流和傳輸 (五)延遲優化 (六)現代播放器原理 ( ...


​關於直播的技術文章不少,成體系的不多。我們將用七篇文章,更系統化地介紹當下大熱的視頻直播各環節的關鍵技術,幫助視頻直播創業者們更全面、深入地瞭解視頻直播技術,更好地技術選型。

本系列文章大綱如下:

(一)採集

(二)處理

(三)編碼和封裝

(四)推流和傳輸

(五)延遲優化

(六)現代播放器原理

(七)SDK 性能測試模型

本篇是《視頻直播技術詳解》系列的最後一篇直播雲 SDK 性能測試模型,SDK 的性能對最終 App 的影響非常大。SDK 版本迭代快速,每次發佈前都要進行系統的測試,測試要有比較一致的行為,要有性能模型作為理論基礎,對 SDK 的性能做量化評估。本文就是來探討影響 SDK 性能的指標並建立相應的性能模型的。


 

影響視頻質量和大小的重要參數

在進行測試之前我們需要明確幾個對視頻的質量和大小影響最大的參數:幀率、碼率和解析度。

1)如何制定幀率

一幀就是一副靜止的畫面,連續的幀就形成動畫,如電視圖象等。我們通常說幀數,簡單地說,就是在 1 秒鐘時間里傳輸的圖片的數,也可以理解為圖形處理器每秒鐘能夠刷新幾次,通常用 fps(Frames Per Second)表示。每一幀都是靜止的圖象,快速連續地顯示幀便形成了運動的假象。高的幀率可以得到更流暢、更逼真的動畫。每秒鐘幀數 (fps) 愈多,所顯示的動作就會愈流暢。

2)如何制定碼率

我們首先看視頻編碼的目的,它是為了在有限的帶寬中傳輸儘可能清晰的視頻,我們以每秒 25 幀的圖像舉例,25 幀圖像中定義了 GOP 組,目前主要是有 I,B,P 幀三種幀格式,I 幀是關鍵幀,你可以想象它就是一幅 JPEG 壓縮圖像,而 B,P 幀是依靠 I 幀存在的,如果丟失了 I 幀,B,P 幀是看不到圖像的,B,P 幀描述的不是實際的圖像像素內容,而是每個相關像素的變化量,他們相對於 I 幀信息量會很小。GOP 組是指一個關鍵幀I幀所在的組的長度,每個 GOP 組只有 1 個 I 幀。

我們再來看,一組畫面的碼流大小跟什麼有關?當視頻編碼的壓縮方式都一樣,清晰度要求都一樣的時候,GOP 組的長度格式決定了碼流的大小,例如:每秒 25 幀畫面,GOP 組長度為 5,那麼幀格式為 IBPBP,那麼 1 秒鐘有 5 個 I 幀,10 個 B 幀,10 個 P 幀,如果 GOP 組長度為 15,幀格式就是 IBBPBBPBBPBBPBB,那麼 1 秒鐘內會有 2 個 I 幀和 16 個 B 幀和 7 個 P 幀,那麼 5 個 I 幀比 2 個 I 幀占用的數據信息量大,所以 GOP 組的長度格式也決定了碼流的大小。

3)如何指定解析度

解析度概念視頻解析度是指視頻成像產品所成圖像的大小或尺寸。常見的視像解析度有 640×480,1088×720,1920×1088。在成像的兩組數字中,前者為圖片長度,後者為圖片的寬度,兩者相乘得出的是圖片的像素。


影響 SDK 性能的指標

有了上述的前置知識,我們可以開始準備測試 SDK 的性能了,我們首先分析一下都有哪些指標可以反映 SDK 的性能,分成 Android 和 iOS 兩個平臺:

Android

  • GC :可以通過 GC 日誌記錄,Mirror GC 和 Full GC 的頻次和時間,Full GC 會造成比較明顯的卡頓,需要評估
  • UI Loop 就是 VSync Loop :反映 SDK 對 App 流暢度的影響,理論上 60 fps 是最流暢的值。
  • Memory :反映 SDK 占用記憶體的大小
  • CPU Usage :反映 SDK 占用計算資源的大小

iOS

  • UI Loop :反映 SDK 對 App 流暢度的影響,理論上 60 fps 是最流暢的值。
  • Memory :反映 SDK 占用記憶體的大小
  • CPU Usage :反映 SDK 占用計算資源的大小

除了上面的一些系統級別的指標外,下麵是直播 SDK 中特有的一些指標,這些指標可以反映出 SDK 的核心競爭力和一些主要的差異,涉及到視頻的清晰度和流暢度,也是可以量化的。

1)影響視頻清晰度的指標

  • 幀率
  • 碼率
  • 解析度
  • 量化參數(壓縮比)

2)影響視頻流暢度的指標

  • 碼率
  • 幀率

3)其他重要指標

直播是流量和性能的消耗大戶,有一些指標,直接影響了用戶的感受,也是我們需要重點關註的:

  • 耗電量
  • 發熱(不好量化,大部分情況發熱和耗電量正比,可以使用耗電量暫時替代)

測試計劃

測試過程需要先固化一些測試條件,然後根據不同的測試條件得出測試結果,這裡選擇了兩個現在最常見的條件,是我們通過回訪大量的客戶得出的一些統計數字,可以反映大部分直播應用所處的場景。主要從解析度、視頻處理、碼率和網路環境幾個維度進行限制。
最後分為幾個兩種測試指標:客觀和主觀指標,前者反映了 SDK 對系統的消耗程度,但雖說是客觀指標並不是說對用戶沒有影響、只是說得出的結果用戶感受不明顯。主觀指標則會直接影響最終用戶體驗,但在傳統的測試中反而容易被忽略,因為不好量化,這裡拍磚引玉的提出一些量化的方式,希望引起讀者的思考。

測試條件 A

  • 解析度 480p
  • 無水印,無美顏
  • 碼率 1 M
  • 網路保證在 0.5 M ~ 2 M

這個條件,反映了大部分低速網路情況下的使用場景,也反映了 SDK 基本的性能情況,可以作為 SDK 基本推流和拉流情況下的基準測試,不引入太多的測試依賴。

測試條件 B

  • 解析度 720p
  • 無水印,有美顏
  • 碼率 1 M
  • 網路保證在 0.5 M ~ 2 M

這個條件,反映了大部分客戶的使用場景,具有較高的解析度和美顏視頻處理,可以作為 SDK 競品分析的重要依據,測試結果非常接近真實場景。

1)客觀指標測試計劃
客觀影響 App 穩定性和性能的指標:

  • Memory
  • 測試 10 分鐘,記憶體曲線
  • 測試 1 小時,TP99,TP95,TP90,需要歸檔
  • 測試 1 小時,記憶體增量,考察是否有記憶體泄露,需要歸檔
  • 參考值:上次結果
  • CPU
  • 測試 10 分鐘,CPU Usage 曲線
  • 測試 10 分鐘,TP99,TP95,TP90,需要歸檔
  • 參考值:上次結果
  • 碼率
  • 測試 10 分鐘,TP99,TP95,TP90,重點說明,這裡的碼率控制需要分開來看,如果網路抖動造成碼率降低,這樣的點不計入進來,只測試 SDK 碼率控制,需要歸檔
  • 參考值:1 M(大小都是偏差)
  • 耗電量
  • 測試一小時,記錄進程總耗電量、屏幕顯示耗電量、CPU 耗電量,需要歸檔
  • 參考值:上次結果

2)主觀指標測試計劃
主觀影響 App 使用者的指標:

  • UI Loop App 本身可以達到的最大幀率,不同於視頻幀率,統計他的原因是我們的 SDK 可能會影響整個 App 的流暢度,需要跟蹤
  • 測試 10 分鐘,UI Loop 曲線
  • 測試 10 分鐘,UI Loop TP99,TP95,TP90,需要歸檔反覆比較
  • 參考值:60 fps
  • Android GC
  • 測試 1 小時,記錄 Mirror GC 和 Full GC 的頻次,記錄 GC 時長的 TP99,TP95,TP90,需要歸檔反覆比較
  • 參考值:上次結果
  • 幀率(fps)
  • 測試 10 分鐘,TP99,TP95,TP90,需要歸檔反覆比較
  • 參考值:30 fps
  • PSNR 比較視頻清晰度的指標
  • 測試 10 分鐘,需要歸檔反覆比較,這個指標可以使用固定視頻作為輸入。
  • 參考值:上次結果

3)結果顯示

  • 表格顯示具體指標
  • 曲線顯示原始數據和時間軸的數據
  • 熱圖顯示和參考值的偏差
  • 熱圖顯示距離上次歸檔值是改善了還是惡化了

通過這種反覆迭代的自動化的、系統化的測試,我們以職人之心近乎偏執地反覆打磨著 SDK 的性能,只為給最終用戶帶來最好的直播體驗,幫助我們的客戶通過次時代的媒體最大化自己的商業價值,我們希望在您披荊斬棘的路上我們始終相伴。

本文作者:七牛雲佈道師@卜赫,原文可去七牛雲官方博客查看。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、登錄developer.apple.com,查看到期時間 2、到期提醒通知,點擊Renew Membership續費(一般提前一個月提醒續費) 3、個人開發者賬號續費需要支付 688人民幣/年(99刀),企業賬號則需要299刀 4、Review your purchase details核查訂單 ...
  • init.rc腳本是由Android中linux的第一個用戶級進程init進行解析的。 init.rc 文件並不是普通的配置文件,而是由一種被稱為“Android初始化語言”(Android Init Language,這裡簡稱為AIL)的腳本寫成的文件。 該文件在ROM中是只讀的,即使有了root ...
  • 在IOS5之後,蘋果為避免根據UDID獲得用戶的信息,而禁止使用uniqueIdentifier獲得UDID,但是仍有些應用需要根據UDID區分設備 有一個系統的庫IOKit.framework可以獲得設備的唯一標識 但是這個方法只能獲得模擬器上的UDID很坑爹啊 那還有另外的方法獲得設備的信息,那 ...
  • 原文標題:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 時間:Nov 28, 2016 原文鏈接:http://antonioleiva.com/variables-kotlin/ K ...
  • 一、寫在前面: 本次我們來講解一下Android應用中三個適配器:BaseAdapter、SimpleAdapter和ArrayAdapter。其中常見的是BaseAdapter,也是個人推薦使用的適配器。 二、深入瞭解: 1.什麼是適配器? 適配器:在安卓中,顧名思義就是把數據變成符合界面風格的形 ...
  • 一、SQLite簡介 Google為Andriod的較大的數據處理提供了SQLite,他在數據存儲、管理、維護等各方面都相當出色,功能也非常的強大。 二、SQLite的特點 1.輕量級使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,而且那個動態庫的尺寸想當小。2.獨立性SQLite ...
  • 概述 現如今開發越來越追求效率和節奏,節省出時間做更多的事情,除了開發技術上的封裝等,開發工具的使用技巧也是很重要的,今天就根據自己的經驗來給大家介紹一下Android Studio快速開發之道。 Postfix completion 介紹 Postfix completion 是IntelliJ ...
  • 內容開始 首先去genymotion的官網去下載其安裝文件 "資源下載" "Genymotion官網必須註冊一個賬號這個賬號安裝之後還有用的,用戶名最好用網易126郵箱註冊" 我下載的是2.8.0的版本 (註:註冊前先開個代理伺服器不然頁面打不開下載時最好用迅雷下載這樣快很 多!!!記得選擇有捆綁v ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...