手遊錄屏直播技術詳解 | 直播 SDK 效能優化實踐
直播無疑是 2016 年的大熱話題,七牛雲在 6 月底釋出了實時流網路 LiveNet 和直播雲解決方案後,我們用《直播技術詳解》系列文章系統地介紹了直播各個環節的關鍵技術,幫助視訊直播創業者們更全面、深入地瞭解直播技術,更好地技術選型。
《直播 SDK 效能優化實踐》系列文章是介紹七牛雲在直播 SDK 上的技術創新實踐。
在上期《直播推流端弱網優化策略 》中,我們介紹了直播推流端是如何優化的。本期,將介紹手遊直播中錄屏的實現方式。
直播經過一年左右的快速發展,衍生出越來越豐富的業務形式,也覆蓋越來越廣的應用領域。手遊直播就是現在常見的一種新興應用場景。手遊直播與一般直播最大的不同點,同時也是它的技術難點,在於錄屏技術。遊戲玩家錄屏功能,實時地把自己玩遊戲的場景分享展示給其他觀眾。錄屏給很多遊戲製作平臺和直播內容平臺提供了一種新的產品思路。
錄屏實現的四個步驟:
採集:獲取螢幕採集的視訊資料、麥克風採集的音訊資料、遊戲內建的音訊資料。
處理:轉化成可以推流的標準格式,防止推出的流有問題。
編碼:處理好硬編支援,節省終端的效能開銷。
封包、推流:和普通的直播方式一樣處理。
從以上的錄屏步驟來看,錄屏直播和普通直播的採集源發生了變化。而真正實現錄屏直播功能,則需要我們獲取到資料,處理成能更穩定編碼、推流的格式,最後才能穩定高質量地推出視訊流。
iOS 的錄屏思路簡述
- ReplayKit
ReplayKit 是蘋果 iOS 10 以上版本提供的用於錄屏並對外直播的功能。簡單而言就是蘋果通過這個功能把採集到的螢幕視訊資訊和音訊資訊回撥給開發者,開發者可以任意處理這些資訊。但是問題是,ReplayKit 使用上限制較多,首先要求系統必須為 iOS 10 以上;其次,被錄屏的 App 必須支援 ReplayKit 功能。這也很容易理解,畢竟錄屏是比較敏感的行為。所以必須遊戲本身支援,以表示被錄製方已經同意錄屏。熊貓 TV 作為國內首家支援 ReplayKit Live 的直播平臺,開創了直播行業的先河。熊貓 TV iOS 上的錄屏方案採用七牛提供的 ReplayKit 方案實現。
- Airplay Mirroring
Airplay Mirroring 是蘋果用於螢幕投影的功能,投屏的原理就是把裝置的螢幕資料和音訊資料通過 Airplay Mirroring 協議傳輸給第三方的支援該協議的顯示播放裝置。但 Airplay Mirroring 是蘋果的私有協議,傳輸過程中音視訊資料都是被蘋果加密的,不對第三方開放。因此要想獲得這些資料,只能通過破解協議的方式來達成。
優缺點分析
Android 的錄屏思路簡述
- View.getDrawingCache() 方法
通過 View 的 cache 內容獲取到 Bitmap 物件來達到錄屏的效果。但是很多手機上面該方式會存在效能問題,另外該方式並不是一個真正意義上的錄屏方式,另外部分 View 元件的內容並不能獲取到,比如 webview 。
- 讀取 /dev/graphics/fb0 方法
Android 基於 Linux,所以可以通過讀取 fb0 裝置節點,即 framebuffer 中的幀資料來實現螢幕的錄製。但是讀取這個裝置節點需要 root 許可權。
- screencap -p xxx.png/screenshot xxx.png 方法
screencap 是 Android shell 的命令,可以通過該 shell 命令讀取到螢幕的幀資料來達到錄屏的功能。但該命令仍然需要 root 許可權。
- MediaProjection + VirtualDisplay (>= 5.0) 方法
在 Android 5.0 以後,Google 開放了截圖的介面,可以通過「虛擬螢幕」來實現錄屏。該方式是目前 PLDroidMediaStreaming 採用的方式。
七牛 iOS ReplayKit 的錄屏方案
- 遊戲端自己要實現 ReplayKit 被錄製端的協議;
- 錄製平臺整合最新版本的七牛直播 SDK ;
- 錄製平臺建立 Broadcast Upload Extension,讓支援 ReplayKit 的遊戲可以被錄製;
- 新增推流管理類,拿到 ReplayKit 資料後推流出去。
七牛 Android 的錄屏方案
- 更新最新版本的七牛直播 SDK ;
AndroidManifest.xml 註冊 ;
<activityandroid:name="com.qiniu.pili.droid.streaming.screen.ScreenCaptureRequestActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar" ></activity>
使用七牛提供的核心類
ScreenStreamingManager
、ScreenStreamingManager
封裝螢幕的錄製、音訊的採集,編碼,封包和推流操作。使用者只需要簡單的呼叫相關 API 即可實現錄屏推流。
在當你想在自己的產品中加入錄屏直播功能,那麼需要考慮清楚到底是自研還是使用三方的 SDK。如果採取自研方案,那麼可以參考以上的錄屏思路,你還需要仔細瞭解系統平臺的 API 介紹。如果採用第三方 SDK 則可以較快整合,但需要了解 SDK 穩定性和易用性,且仔細閱讀 SDK 的使用細則。
相關文章
- 直播推流端弱網優化策略 | 直播 SDK 效能優化實踐優化
- 「視訊直播技術詳解」系列之七:直播雲 SDK 效能測試模型模型
- 詳談[七牛直播雲]效能優化實踐優化
- 騰訊直播SDK接入及封裝(一)之錄屏直播封裝
- 「視訊直播技術詳解」系列之五:延遲優化優化
- SOFARPC 效能優化實踐(上)| SOFAChannel#2 直播整理RPC優化
- SOFARPC 效能優化實踐(下)| SOFAChannel#3 直播整理RPC優化
- 直播分享| 騰訊雲 MongoDB 智慧診斷及效能優化實踐MongoDB優化
- 美拍直播首屏耗時減少50%以上的優化實踐優化
- 往期技術直播錄屏資訊記錄到線上文件裡
- vivo直播應用技術實踐與探索
- 直播帶貨系統是如何實現直播錄屏的
- 視訊直播技術詳解之採集
- 直播系統聊天技術(六):百萬人線上的直播間實時聊天訊息分發技術實踐
- 直播美顏SDK動態貼紙詳解
- 視訊技術詳解:RTMP H5 直播流技術解析H5
- 宜信OCR技術探索與實踐|直播速記
- 直播APP的效能優化-禮物篇APP優化
- 讓Chrome看不了WWDC直播的HLS技術詳解Chrome
- VR直播技術VR
- 宜信OCR技術探索之版面分析業務實踐|技術沙龍直播速記
- 效能優化詳解優化
- Windows11實現錄屏直播,H5頁面直播 HLS ,不依賴FlashWindowsH5
- 如何實現婚戀app原始碼中直播首屏載入優化?APP原始碼優化
- PC端直播工具技術解決方案
- 視訊直播秒開背後的技術與優化經驗優化
- 直播美顏SDK的人臉識別技術進階知識
- 直播系統聊天技術(七):直播間海量聊天訊息的架構設計難點實踐架構
- 實現VR直播的關鍵技術VR
- 線上教育直播原始碼+技術支援,打造多樣化的直播平臺原始碼
- 帶貨直播原始碼,淺談直播實現過程和技術原始碼
- 探探的IM長連線技術實踐:技術選型、架構設計、效能優化架構優化
- 兔子直播卷軸系統技術開發詳情(成熟技術)
- Windows 11實現錄屏直播,搭建Nginx的rtmp服務WindowsNginx
- Android實現錄屏直播(一)ScreenRecorder的簡單分析Android
- [直播預告]如何寫好技術文章?開源技術寫作入門與實踐
- 「視訊直播技術詳解」系列之三:編碼和封裝封裝
- 「視訊直播技術詳解」系列之四:推流和傳輸