標籤:

最全的手游錄屏直播方案(自研思路VS第三方SDK)

直播無疑是 2016 年的大熱話題,七牛雲在 6 月底發布了實時流網路 LiveNet 和直播雲解決方案後,我們用《直播技術詳解》系列文章系統地介紹了直播各個環節的關鍵技術,幫助視頻直播創業者們更全面、深入地了解直播技術,更好地技術選型。

《直播 SDK 性能優化實踐》系列文章是介紹七牛雲在直播 SDK 上的技術創新實踐。

在上期《直播推流端弱網優化策略 》中,我們介紹了直播推流端是如何優化的。本期,將介紹手游直播中錄屏的實現方式。

直播經過一年左右的快速發展,衍生出越來越豐富的業務形式,也覆蓋越來越廣的應用領域。手游直播就是現在常見的一種新興應用場景。手游直播與一般直播最大的不同點,同時也是它的技術難點,在於錄屏技術。遊戲玩家錄屏功能,實時地把自己玩遊戲的場景分享展示給其他觀眾。錄屏給很多遊戲製作平台和直播內容平台提供了一種新的產品思路。

錄屏實現的四個步驟:

  1. 採集:獲取屏幕採集的視頻數據、麥克風采集的音頻數據、遊戲內置的音頻數據。

  2. 處理:轉化成可以推流的標準格式,防止推出的流有問題。

  3. 編碼:處理好硬編支持,節省終端的性能開銷。

  4. 封包、推流:和普通的直播方式一樣處理。

從以上的錄屏步驟來看,錄屏直播和普通直播的採集源發生了變化。而真正實現錄屏直播功能,則需要我們獲取到數據,處理成能更穩定編碼、推流的格式,最後才能穩定高質量地推出視頻流。

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 的錄屏方案

1. 遊戲端自己要實現 ReplayKit 被錄製端的協議;

2. 錄製平台集成最新版本的七牛直播 SDK ;

3. 錄製平台創建 Broadcast Upload Extension,讓支持 ReplayKit 的遊戲可以被錄製;

4. 添加推流管理類,拿到 ReplayKit 數據後推流出去。

iOS ReplayKit 錄屏方案 demo

七牛 Android 的錄屏方案

1. 更新最新版本的七牛直播 SDK ;

2. AndroidManifest.xml 註冊 ;

<activitynnandroid:name="com.qiniu.pili.droid.streaming.screen.ScreenCaptureRequestActivity"nnandroid:theme="@android:style/Theme.Translucent.NoTitleBar" >nn</activity>n

3. 使用七牛提供的核心類 ScreenStreamingManager、ScreenStreamingManager 封裝屏幕的錄製、音頻的採集,編碼,封包和推流操作。用戶只需要簡單的調用相關 API 即可實現錄屏推流。

在當你想在自己的產品中加入錄屏直播功能,那麼需要考慮清楚到底是自研還是使用三方的 SDK。如果採取自研方案,那麼可以參考以上的錄屏思路,你還需要仔細了解系統平台的 API 介紹。如果採用第三方 SDK 則可以較快集成,但需要了解 SDK 穩定性和易用性,且仔細閱讀 SDK 的使用細則。

點擊「閱讀原文」,查看直播雲SDK 性能測試模型。

本文作者:pili團隊@七牛雲

想要了解雲計算領域的技術洞見?

歡迎關注七牛雲機構帳號!

以上。

推薦閱讀:

成功地讓手機表面不露螺釘,技術含量很高嗎?
為什麼蘋果索尼等公司放棄使用圓弧形不平整後蓋,而魅族卻改回圓弧形後蓋?
如何看待iphonese四天預定量已經達到340萬台?
MIUI9的拍照相比MIUI8有了長遠的進步,給MIUI團隊點個贊

TAG:SDK | 录屏 | 手机 |