奇異果投屏的進化之路

筆者按:奇異果投屏伴隨奇異果TV一路發展至2022年,日活用戶已達300多萬,用戶和我們都對投屏的功能和性能提出了更多的訴求和更高要求,因此2022開始系統地對投屏功能和性能做了擴展和優化。本文立足於TV端,爲大家介紹愛奇藝站內投屏優化過程中面臨的困難和解決方案,虛心以待您的指正和建議。

01

   優化歷程回顧

自2022年初接手投屏功能,先後開展了功能擴展、報障處理提效等工作,至2022年底仍深感投屏功能迭代和問題處理效率不高。投屏功能作爲連接手機和電視的橋樑,對其可靠性、穩定性有着很高的要求,夯實基礎才能行穩致遠,因此開啓了投屏優化的歷程,針對投屏服務不穩定、線上數據不可用、線上報障解決效率低這三大問題尋求徹底的解決方案。

問題一:投屏服務不穩定

投屏服務爲了最大化的保證可用性,需要獨立於客戶端進程存活,因此採用子進程啓動;爲了更靈活的迭代以及修復線上問題,需要可以獨立部署升級,因此採用獨立插件的方式。歷史版本的投屏服務架構雖然能夠支撐以上兩點,但是採用的單服務方案(投屏服務通過ModuleManager註冊到客戶端),無法很好地支持投屏的雙向通信穩定性、投屏服務監測與保活。

新方案採用雙服務設計,基於Android系統的Binder機制,可以穩定可靠的感知對端狀態並監測連接狀態。同時使用Bind和Start兩種方式啓動Service,提升投屏進程優先級以達到更好的保活效果,進而提供更穩定的雙向通信能力。


問題二:線上數據不可用

舊的投屏服務架構,數據打點無法覆蓋全流程,導致上報數據不完整,無法監控投屏服務線上質量,更無法分析、解決線上問題。

新的投屏服務架構,設計了3個層級投遞監控:

  • 投屏服務模塊運行及可靠性監控
  • 投屏協議啓動及結果
  • 推片鏈路步驟打點

每個層級建立相應的業務會話Session機制,每次業務過程生成唯一的SessionId作爲會話標識,串聯整個業務邏輯生命週期,在各關鍵節點上報對應業務數據,作爲線上數據分析的基礎。

  1. 投屏服務模塊

此層級的設計目標,確保並提高投屏整體可靠性,服務功能及進程保活,重試重連等數據收集。

該模塊完成了線上設備進程保活狀態信息的收集,暴露並驗證了舊架構不穩定的原因,在新版本上針對性進行規避。如:

數據反饋暴露出的問題

規避和改進方案

startService方式啓動子進程,進程優先級較低,進程易被回收併產生頻繁重啓

加入Bind方式,提升進程優先級

低性能設備進程啓動時間長,高版本Android會觸發ANR異常(未及時調用Service.startForeground)

Bind方式啓動Service,成功後再追加startService

插件機制實現缺陷,丟失bindService的flag參數的進程優先級控制,導致子進程被回收

插件模式下,放棄子進程方式,將投屏服務運行在主進程

部分Rom的LMK機制較嚴厲,內存緊張時,爲保活優先級較高的子進程,可能kill前臺可見的主進程

對有問題的設備,放棄子進程方式,投屏服務轉爲主進程方式

  1. 投屏協議啓動

投屏服務的核心功能點在協議層與網絡層,此層級設計目標,啓動投屏協議模塊並跟蹤結果,監聽系統網絡的變更,適時重啓投屏協議模塊以確保新網絡下投屏業務可用。

該模塊經過驗證和完善後,完成了投屏協議啓動的監控及失敗原因的統計,並收集彙總線上各設備的網卡及連接信息、協議啓動失敗在各入口場景下的分佈,爲分析及提高協議啓動成功率提供了源數據及優化回饋。線上分析及存在的問題解決如下:

數據反饋暴露出的問題

規避和改進方案

網絡變更場景,協議啓動成功率低

正常情況,網絡變更時設備網絡本就處於不穩定狀態,暫無法避免

進程後臺存活,設備休眠與激活,導致網絡關閉與開啓,會頻繁觸發網絡變更重啓協議模塊,剛激活時網絡未準備好

延時處理網絡變更事件,可規避部分異常場景,但這個延時無法精準,不能完全避開網絡未準備好的時間段,且無法處理激活時間較短又休眠的場景

依據啓動時網卡及IP的存在狀況,嘗試排除無IPv4的啓動失敗

某些設備雙網卡同時連接,WIFI頻繁觸發斷開重連,投屏協議模塊頻繁重啓失敗率走高

優化網卡選擇策略,優先選擇系統活躍網絡類型的網卡,避免因交替選擇不同網卡頻繁重啓協議模塊

某些設備獲取系統活躍網絡失敗或無,實際上網絡可用,收到一些無網絡錯誤碼的投遞

優化網卡選擇策略,系統活躍網絡僅作爲參照,網卡及IP狀況可用時,繼續啓動協議模塊

  1. 推片鏈路環節

此鏈路包括TV端收到推片請求,數據與本地能力覈驗,預緩存起播數據,拉起界面進行播放,記錄各階段及首幀渲染耗時等。

通過該層級統計數據,可分析Qimo投屏和DLNA投屏在各環節點失敗折損,階段耗時佔用,起播成功率及起播耗時等。推片環節優化點如下:

數據反饋暴露出的問題

規避和改進方案

跨進程拉起中的鏈路折損

跨進程拉起進行設備適配,切換到主進程方式,避免拉起新進程

Activity啓動階段的鏈路折損

後臺Activity啓動折損,系統限制無法避免,通過引導用戶提前打開奇異果應用規避後臺拉起的場景

首幀渲染處的鏈路折損

首幀渲染率與播放成功率有關,與推片的資源相關,無法在推片鏈路層面解決

Qimo投屏起播耗時優化

針對Qimo投屏場景,優化刪減鏈路環節中的接口調用,與愛奇藝App協調,增加必要的信息字段,避免推片時再請求接口

  1. 投屏指標體系

建立投屏質量體系看板,關注新版本上線後各重要指標的趨勢變化,及與舊版本之間的同期對比。其中包括投屏服務的啓動成功率、投屏協議啓動成功率、Qimo推片起播平均耗時等

  1. 問題發現與分析示例

5.1 投屏協議SDK啓動失敗及優化過程

1) 問題發現

每次發版初期,投屏SDK成功率會習慣性的跌入90%以下,如下圖

2) 分析原因

事出反常必有因,分析問題時間段內投屏SDK啓動的投遞數據,以設備維度歸集後排行,發現SDK啓動失敗問題有如下特徵:

  • 設備型號相對集中,MagicBox_M20C/A兩款貢獻80%錯誤量
  • 設備ID相對集中,頻繁觸發,2款型號觸發問題的設備ID僅佔其DAU的3-4%

復現遇到難點:

  • 測試設備庫無兩款設備
  • 都是較老型號,已無法採購設備

只能深入分析個例設備的投屏服務啓動及協議啓動投遞數據序列,以期尋找到共性,抽查幾個比較嚴重的設備id,發現:

  • 失敗發生時,系統活躍網絡是有線,同時連着wifi,wifi頻繁發送變更通知
  • 協議啓動時交替選擇eth0和wlan0,網卡有變更導致頻繁重啓SDK,產生巨量啓動失敗數,間隔最短能到6s每次
  • 異常的設備數量不多,但產生的異常數據量很大

由此推斷問題發生場景:

  • 有線網卡和無線網卡都連接的情況下,天貓魔盒M20A/C該2款設備ROM會頻繁(間隔<5s)通知WIFI網絡斷開或重連
  • 奇異果舊選網卡策略是優先選取wifi網卡,此場景會交替使用有線網卡和無線網卡,重新啓動投屏SDK
  • 此時處於網絡變更期間,網卡狀態不穩定,頻繁的啓動加大了投屏SDK啓動失敗的概率
3) 優化方案及數據驗證

升級調整選網卡策略,增加新的選網卡策略,並支持雲配切換新舊策略功能,方便不同策略的數據對比:

  • 優先選取系統活躍網卡
  • 有線網絡優先於WIFI

支持新選網卡策略的版本上線後,雲配控制M20A/C設備的新版本選網卡策略,如下圖橙線(v13.6)走勢,投屏SDK成功率明顯拐點上行,雲配生效後(紅色圈)止住下跌趨勢,證明新策略有效,之後版本曲線不再出現嚴重(<90%)的下探

5.2 投屏SDK啓動無網絡錯誤碼佔比偏高

1) 問題發現與分析

版本全量後,投屏SDK成功率仍在98%左右徘徊,離目標99%仍有距離;爲此,需要聚焦錯誤原因,解決錯誤數據大頭,快速提升投屏SDK成功率。

蒐集投屏SDK啓動數據,以設備維度聚合,按各類錯誤總數逆序排行表,發現:

  • Top10中,索尼佔據了9席,比較典型
  • 從錯誤類型看,無網絡錯誤佔比較大,相應原因是獲取系統當前活躍網絡出錯或無網絡
2) 優化方案及數據驗證
  • 更改有無網絡的判斷依賴,系統活躍網絡僅作爲參照項,檢測失敗不阻礙後續啓動
  • 判斷網卡IP作爲兜底,如果網卡存在合適IP,可忽略系統活躍網絡

新版本上線後,針對該批設備雲配網絡判斷策略,40款設備收集線上修改前後數據進行對比驗證如下:

  • 10款型號(涉及sony和小米),錯誤數/率下降 90%+,效果顯著
  • 9款型號,錯誤數/率下降 50%+,效果明顯
  • 10款型號,錯誤數/率下降僅20%+,效果一般
  • 4款型號,效果低於/接近10%,效果不明顯
  • 6款三星設備,未升級覆蓋,幾乎無效

應用新策略後,全量後整體無網絡錯誤率下降一半左右。如下圖,紅框所示的版本全量區域,13.7/13.8對比13.6同期優化幅度近50%,紅圈區域爲應用新策略時間段13.6的錯誤率下降趨勢.

此次適配優化後,版本全量後,投屏協議啓動成功率可達98.5%+

問題三:投屏線上報障解決效率低

  1. 困難與對策

困難描述

影響範圍

解決方案

TV端日誌不全

缺少關鍵日誌,無法定位問題

新投屏服務架構完善了投屏進程的日誌上報功能,基於新的日誌體系,能夠補充更多關鍵日誌

只有單端日誌

無法支持雙端聯合分析

增加移動端投屏報障聯動功能,即移動端投屏報障會給TV發指令追加一份TV日誌到同一工單;找不到TV設備的問題,協同客服同學引導用戶雙端報障

只能收集到應用內的日誌,無系統日誌

無法分析系統行爲

暫時無法解決,只能儘量增加應用調用系統接口的日誌

只能個案分析

個案問題基本上沒有共同特徵,無法歸納分析並解決;而且無法判定影響程度

結合線上數據協同分析,嘗試解決一類問題,而不是一個問題

擴展發現設備的途徑,增加局域網掃碼投屏功能,優化網絡抖動等網絡不穩定原因導致的無法找到TV設備

擴展通信通道,增加遠程投屏,建立廣域網通信通道

  1. 批量分析方法

關聯質量投遞數據,建立用戶報障批量分析流程,提升用戶反饋分析效率,流程如下圖

02

   未來可期

總結過去是爲了更好的創造未來。經過多團隊共同努力,至2023年底,投屏功能在穩定性(99%+)、成功率(98.5%+)、可監控等方面取得了階段性的成果,爲投屏功能的進一步發展、創新打下了堅實的基礎。

投屏的未來何去何從?電視作爲家庭娛樂中心的地位短時間還不會被輕易撼動,手機作爲個人不可或缺的貼身設備,短時間也很難找到替代品,投屏作爲連接手機和電視的橋樑,未來目標是實現1+1>2的效果:

  1. 各取所長:
    1. 電視的觀影體驗更好(大屏、高畫質、好音效),但是操控不夠便捷;
    2. 手機的操控便捷,但是觀影體驗不如電視;
  2. 開疆拓土:打破邊界、拉近距離,會產生更能多可能性。
    1. 遠程投屏:將手機與電視的互動從局域網擴展到廣域網,延伸了投屏的邊界,同時拉近了人與人的距離,讓你的手機可以連接父母的電視;
    2. 萬物互聯:物聯網作爲當下科技創新大潮中的一員,已經嶄露頭角。電視作爲家庭的中心,手機作爲個人的的延伸,已經通過投屏建立了連接,隨着更多家用設備接入物聯網,一定能借由投屏這座橋產生更多可能性。

未來已來,願與大家共同努力創造愛奇藝投屏新生態。



本文分享自微信公衆號 - 愛奇藝技術產品團隊(iQIYI-TP)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章