1、視頻直播APP開發與性能痛點2017.11 金昊開直播看直播玩直播2016.012016.052016.102017.042015.10千帆直播直播基本交互直播間進入速度:300ms整體技術指標聊天接入速度:500ms白屏和DNS被劫持率:1%DNS解析時間:100ms一次連麥成功率:99%APP 整體崩潰率:5APP 卡頓率:1%點播視頻打開速度:300ms頭像、封面:20k內存泄露率:10%/小時整體CPU峰值:60%APP 溫度控制平均溫度:60直播流首幀延遲均值:500ms直播技術指標推流穩定性:95%直播流丟包率/丟幀率:2%硬編硬解覆蓋率:99%直播和連麥延遲:1.5s回音消除、去
2、噪直播流卡頓率:1%黑屏、綠屏、畫面卡死:1美顏、道具、貼紙 CPU占用:20%來電、通知、網絡切換自動恢復推流CPU占用均值:50%觀眾端CPU占用均值:30%開播基本流程采集處理編碼封包推流采集AndroidAndroid.CameraAudioRecord采集麥克風YUV/RGB、PCMiOSCamera 封裝AVCapture(AVFoundation)YUV/RGB、PCM視頻處理GPUImageFilterGPUImageFilterGPUImageFilter美顏濾鏡貼紙3D道具瘦臉大眼GPUImageFilterAR/VRYUV/RGBGPUImageView(主播預覽)編碼美
3、顏:無美顏,不直播!美白磨皮補光可愛貼紙瘦臉占用 CPU 資源影響編碼效率主播回顯延遲增大編碼封裝FLVH.264AACH.264 編碼IPIBPIGOPiOS H.264 編碼FFMpeg/X264/Xvid軟編YUVH.264(CMSampleBuffers)封裝VideoToolBox(VTCompression)硬編iOS PCM 編碼AAC降噪麥克風收音麥克風PCMAudio采集AudioToolBox硬編FFMpeg(libfdk-aac)軟編Android H.264 音視頻編碼MediaCodecY兼容硬編?FFMpegNHEVC(H.265)RTMP 轉 HTTP-FLV,H
4、.265 反而會快一些,而且壓縮比提高!如果不涉及編碼轉換的話,H.265 也挺快!“高”轉“低”比較快,“低”轉“高”就很慢,H.264 轉 H.265 會慢上5-6倍!得同時輸出 RTMP、HTTP-FLV、HLS 及其擴展版,支持 H.265!推流推流技術流程轉碼中心封包(元信息、時序)LibRTMPFFMpegH.264AACCDN 源站RTMPRTMPHTTP-FLVHLS推流穩定性時刻考慮如何省電、省帶寬!縮減動畫,縮減特效,保CPU,保GPU!內存優化都得定期掃一遍!實時網絡探測,線路擇優,好路子優先復用!千帆流媒體中心CDN-B 邊緣CDN-B 邊緣CDN-A 邊緣CDN-A
5、邊緣CDN-A 中心節點主播A推流CDN-B 中心節點主播B推流我要看主播A我要看主播A我要看主播B我要看主播BCDN 多路互通推流動態配置名稱范圍默認值特殊情況幀率8-24fps15fps關鍵幀2-5s4s1視頻碼率400-1000 kbps800 kbps200 kbps音頻碼率5 kbps分辨率360P、480P、504P、720P504P全局配置用戶級配置個別系統配置監聽來電暫停推流壓后臺來電結束恢復推流監聽壓后臺靜音推流保流不斷恢復前臺恢復音畫采集監聽斷網網絡恢復重新推流友好提示中斷推流監聽網絡切換4G WiFi中斷推流重新獲取推流地址重新推流推流外部監聽防護中心轉碼20ms20ms
6、20ms3s20ms20ms-2s20ms-2s600ms主播推流邊緣接收節點高可用GW邊緣分發節點中心節點轉碼邊緣分發節點邊緣轉碼近點分發20ms20ms20ms3s20ms20ms-2s20ms-2s600ms主播推流邊緣轉碼節點高可用GW邊緣分發節點中心節點邊緣分發節點弱網窄帶推流網絡檢測動態碼率動態丟幀動態碼率網絡不穩定重連窄帶大碼高幀發不出去推流緩慢發送卡頓Buffer累積Yes:趕緊降碼兒!包太多?No:重新調高碼率動態丟幀Buffer舍棄參考幀關鍵幀和音頻幀降低編碼功耗!減少傳輸數據量!視聽保持流暢,畫質有保障!還同時解決音視頻同步問題!拉流拉流解碼渲染播放多種清晰度CDN-AC
7、DN-B360p+400kb/s504p+800kb/s720p+1000kb/s協議對比應用范圍協議首幀延遲RTMP推流、拉流TCP長連接(慢)較慢1-3sHTTP-FLV拉流HTTP長連接快1-3sHLSH5、錄流回放HTTP短連接很慢8-10sMP4錄屏、小視頻HTTP短連接快1-3s拉取關鍵幀秒開(最佳)邊緣節點主動 GOP 預熱找近點GSLBDNS預解析轉碼中心預拼接流地址解復用Video BufferAudio Buffer基于時序同步控制Picture Buffer目標解碼Sample Buffer音頻解碼解碼QFPlayer(without buffer)音視頻流播放器緩沖隊列
8、Buffer延遲累積主播端弱網臨時緩沖播放端弱網追幀追幀視頻 Buffer音頻 Buffer丟棄 P幀、B幀包延遲超過閾值?Yes丟棄音頻幀基于時序同步控制監聽來電直播靜音來電結束恢復聲音監聽壓后臺取消前臺播放開始后臺播放狀態顯示播放取消后臺播放移除狀態欄顯恢復前臺播放APP?;畋O聽斷網友好提示網絡恢復重連直播重連公屏監聽網絡切換4G WiFi友好提示重連直播重連公屏外部監聽防護播放質量統計用戶點擊到首幀時長統計時間范圍發生次數(總次數6397)平均時長比例0-0.5 秒2660.434317s4.15%0.5-1.0 秒24290.763168s37.97%1.0-2.0 秒25031.37
9、0519s39.12%2.0-3.0 秒7132.387648s11.14%3.0-4.0 秒2513.427744s3.91%4.0-5.0 秒1024.452670s1.59%5.0秒以上1335.234122s2.07%1)點擊播放2)首包到達3)首個關鍵幀畫面4)卡頓開始5)卡頓結束6)播放結束主線程APP啟動優化Application初始化復雜UI、動態libs、SDK下載緩存開屏廣告播放器(內存)預熱異步線程檢查網絡Loading主UI直播間公屏瘋狂滾動刷新!禮物瘋狂連擊!提示和通知瘋狂廣播!各種 WebView!動畫瘋狂播放!線程控制多線程中心CPUTimerMEM異步線程 di
10、spatch_semaphore_t(with CFRunLoopObserverRef)時間差1時間差2CFRunLoopkCFRunLoopBeforeSourceskCFRunLoopBeforeWaitingkCFRunLoopAfterWaitingiOS卡頓監控連麥連麥A連麥BRTMP-ARTMP-BFLV-AFLV-BCDN回音消除、轉推直播流業務服務器MCU 連麥中心MCU 列表同步APP連麥查詢最佳MCU節點廣播狀態1)連麥穩定性2)播放器內存消耗,CPU消耗3)兩路流,帶寬壓力,碼率不高導致畫質問題4)多路連麥擴展,音頻連麥?5)網絡抖動導致延遲-本地編碼痛點接口數據后端S
11、OA后端SOA接口合并層版本控制EncryptCompress數據接口請求流程Htttps&Http/2.0?hosthttpsrequest_sizeresponse_sizetotal_sizetime(ms)TRUE5631354514108148/activity/star/v1/rankAFALSE5611359914160169/activity/star/v1/rankATRUE5538641417441/activity/work/v2/FALSE5519181469735/activity/work/v2/TRUE5681138911957353/anchor/FALSE56
12、61144312009410/anchor/TRUE589427101681/audience/admin/forbid/isDeviceFFALSE5874781065102/audience/admin/forbid/isDeviceFTRUE55236892098/audience/chat/isSFALSE550422972136/audience/chat/isSecret.android動態埋點上報所有 EventID 日志原始日志EventID+版本號 StatID添加當前版本的業務ID與事件ID的映射關系清洗池根據控件路徑生成唯一標識解析與映射Hive統計DB提前手動圈選和記錄
13、圖片&動畫圖片優化主線程封面下載子線程隊列控制并發去重監控圖片大小監控尺寸自動裁剪修正Cache監控緩存動畫優化1)序列幀-WebP-BPG?2)大禮物分段加載,分段播放3)熱門禮物提前打包4)降低分辨率,限寬不限高5)減少實時計算量,緩存中間計算結果6)盡量用整型替代浮點型計算7)減少GC次數8)盡量用硬件加速,發揮GPU性能直播+開啟噴氣模式組播通知送禮物!看進度開噴噴氣設備上線開播通知后端服務噴氣功能敏捷開發1)測試包周期:每天2)小版周期:1-2周3)大版周期:4周4)自動打包:Jenkins+OCLint+Fireline5)Crash和卡頓檢測:Bugly、聽云、自研Hook敏捷1
14、)直播間加載時長統計2)首頁與直播間網路請求抓包統計3)CPU、內存、帶寬使用報告4)卡頓與崩潰情況報告發包質檢5)推流穩定性和壓測報告6)APP啟動時間報告7)各統計項/動態埋點統計8)接口模擬丟包、劫持、數據破壞容災報告1)開發確認2)QA每日報告3)全員測試4)技術指標統計5)產品確認發版流程6)全民 showcase7)UI 細節對照完善8)上線報告9)站內灰度、渠道灰度10)全量發布如何快速創新?8)做好質量統計9)直播間優化10)搭建連麥等上層應用11)接口和數據優化12)圖片和動畫優化13)直播+(物聯網)14)敏捷開發1)直播技術指標2)優化開播流程3)采集和音視頻處理優化4)編碼封包優化5)推流轉碼高可用7)解碼緩沖6)拉流秒開