Replaykit2(IOS11+)視訊錄製詳解
寫這個部落格是為了記錄一下Replaykit的學習過程
公司有個專案要用到Replaykit, 無奈從Android轉到學習IOS,正好擴充套件下自己,技多不壓身嘛。。。
本篇是為了整理一下關於Replaykit的知識,網上關於Replaykit2的相關資料還是太少了。
寫的不好,大佬們見諒。
Replaykit官方文件:
Apple官方文件全是英文版的,新手看起來很痛苦,註釋很簡介,缺點是沒有相關的例子demo
官方文件地址:https://developer.apple.com/documentation/replaykit
簡書上有個簡單的翻譯:https://www.jianshu.com/p/80547d68a36a
Replaykit從 IOS 9 -- IOS 12 的發展歷史:
Replaykit最低支援IOS9,比較完善的是IOS11(可以稱為Replaykit 2 ),截止寫這篇文章是IOS12,Xcode10+。
有個比較完整的介紹:https://www.jianshu.com/nb/31084767
這個大佬寫了三篇,看完你就對Replaykit的發展有了一定了解。
Replaykit有什麼用?
- 第一代的IOS9版本只能通過API請求開始錄製螢幕,得到使用者許可才開始,結束錄製後得到一個mp4檔案,不能進行實時操作。
- IOS 10版本支援實時獲取視訊資料。這樣就可以做視訊直播了,給直播App留了一條活路。
- IOS 11版本才算完善了,支援全域性錄製,後臺錄製,機制和以前不同,要通過extension(Broadcast)啟動,直播App喜大普奔qvq
- 但是在IOS11中還是要使用者下拉狀態列,長按錄製按鈕,選擇App啟動,emmmmm雖然我不覺得麻煩,但是產品經理肯定覺得使用者麻煩,可能Apple的開發者和IOS的程式設計師想法都是一樣的吧。所以在IOS12中支援直接啟動錄製了(網上沒找到相關資料,不知道怎麼做啊QvQ)
Replaykit2使用解析:
首先我們得知道extension,IOS全域性錄製必須通過extension,你可以這樣理解:APP在後臺是被限制的,很多活動不能進行,蘋
果不可能給你這個許可權,但是upload extension是蘋果的特權APP,可以在後臺執行。但是它也有限制:記憶體不超過50M。
還有一個缺點就像是extension和宿主APP不是統一程式,資原始檔不放在同一沙盒。
宿主App檔案路徑:
//file:///private/var/mobile/Containers/Data/Application/85CA32DD-3842-4A18-A21F-14F4B7F0F9CD/Documents
extension檔案路徑:
//file:///private/var/mobile/Containers/Data/PluginKitPlugin/D407DE9F-05E6-4A1B-BFCA-69A65076C9A4/Documents
在Xcode上下載真機的沙盒資料:
download container->顯示包內容
- 一般檔案儲存在document中,如圖片視訊
- Library是快取資料
- tmp臨時資料,關閉App後清空
extension和宿主APP之間還有許多需要了解:
- APP和extension的資料共享
- APP和extension的程式碼共享
- APP和extension間程式通訊
接下來看一下extension是如何錄屏的:
我們在target中選擇Broadcast upload extension,
UI extension你可以不用管它。
資料共享需要用到App group, 需要在蘋果開發者網站進行註冊。參考:https://www.jianshu.com/p/4b5a7b661aa5
我們再來看一下extension:
在samplehandle.swift中,有如下4個方法:
通俗易懂,就是廣播的一些狀態。
獲取資料:
- 視訊螢幕資料
- App音訊資料
- mic音訊資料
很顯然我們可以在upload extension程式中或者主App程式中將資料進行編碼。
視訊->h264 音訊->aac 然後封裝成flv或者mp4
將視訊儲存在本地,就完成錄屏操作了。
將buffer封裝成視訊的方法可以用Asswriter,可以參考https://github.com/giridharvc7/ScreenRecord
Replaykit相關demo:
- swift版本(iOS9):
- swift版本(iOS10):
- swift版本(iOS11): https://github.com/giridharvc7/ScreenRecord
- oc版本(IOS9):
- oc版本(IOS10):
- oc版本(IOS11):https://github.com/anirban261491/Screen-sharing-iOS
已經應用Replaykit-2的app:
- 視訊錄製類:錄屏+ , ApowerREC , 錄丸(有廣告,=-=)
- 直播類:映客 (鬥魚虎牙還不更新。。。)
- 還有一個:team viewer(區域網內推流,可以瞭解下)
Replaykit的坑和吐槽點:
- 媽蛋,一直視訊錄製要搞這麼複雜嘛,Android上早就開放了。
- APi呼叫有點混亂。
以上就是關於Replaykit的一些相關結束了,歡迎交流。
相關文章
- iOS 三種錄製視訊方式詳細對比iOS
- iOS開發:音訊播放、錄音、視訊播放、拍照、視訊錄製iOS音訊
- Linux下錄製視訊Linux
- Android音視訊之MediaRecorder音視訊錄製Android
- iOS開發系列--音訊播放、錄音、視訊播放、拍照、視訊錄製(轉)iOS音訊
- Chrome 新功能 - 錄製小視訊Chrome
- ffmpeg命令錄製windows音視訊Windows
- Android視訊錄製命令screenrecordAndroid
- Camera2錄製視訊(一):音訊的錄製及編碼音訊
- 收藏一個《視訊錄製的教程》
- win10怎麼錄螢幕視訊帶聲音 錄製視訊沒有聲音的解決方法Win10
- 安卓手機怎麼錄製直播視訊安卓
- iOS ARKit錄製視訊(AVAssetWriter & 有聲音)iOS
- iOS開發 AVFoundation 自定義視訊錄製iOS
- [Android]Android視訊錄製命令screenrecordAndroid
- WPF下的視訊錄製介面設計
- 音訊錄製及視覺化處理音訊視覺化
- 【秒懂音視訊開發】08_音訊錄製音訊
- 【秒懂音視訊開發】19_視訊錄製01_命令列命令列
- 自定義相機採集及視訊編輯(1)-短視訊錄製
- Android錄製視訊的全面屏適配Android
- 在伺服器端錄製語音視訊伺服器
- 十、詳解FFplay音視訊同步
- 聲網多人視訊錄製與合成支援掉線再錄製 | 掘金技術徵文
- 基於QT錄製PCM音訊例項詳細QT音訊
- Linux下使用"avconv"捕捉錄製桌面視訊及音訊Linux音訊
- Android 音視訊錄製硬編碼實現Android
- 音訊錄製:三星電腦如何錄製音訊?音訊
- 電腦錄音工具有什麼,怎麼錄製電視音訊?音訊
- Android WebView 實現檔案選擇、拍照、錄製視訊、錄音AndroidWebView
- 怎麼錄製電腦螢幕視訊?好用的錄屏方法分享
- 視訊播放器程式碼詳解播放器
- iOS採集錄製音視訊API選擇推薦iOSAPI
- WebRTC網頁開啟攝像頭並錄製視訊Web網頁
- android短視訊錄製與頭像跟隨(一)Android
- 如何實現在服務端錄製視訊會議?服務端
- NumPy 陣列複製與檢視詳解陣列
- Win10系統無法錄製遊戲視訊提示無法錄製內容如何解決Win10遊戲