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的一些相關結束了,歡迎交流。
相關文章
- Camera2錄製視訊(一):音訊的錄製及編碼音訊
- iOS開發系列--音訊播放、錄音、視訊播放、拍照、視訊錄製(轉)iOS音訊
- ffmpeg命令錄製windows音視訊Windows
- Chrome 新功能 - 錄製小視訊Chrome
- 收藏一個《視訊錄製的教程》
- win10怎麼錄螢幕視訊帶聲音 錄製視訊沒有聲音的解決方法Win10
- iOS ARKit錄製視訊(AVAssetWriter & 有聲音)iOS
- 音訊錄製及視覺化處理音訊視覺化
- Android錄製視訊的全面屏適配Android
- 【秒懂音視訊開發】08_音訊錄製音訊
- Android 音視訊錄製硬編碼實現Android
- 安卓手機怎麼錄製直播視訊安卓
- 【秒懂音視訊開發】19_視訊錄製01_命令列命令列
- 十、詳解FFplay音視訊同步
- 聲網多人視訊錄製與合成支援掉線再錄製 | 掘金技術徵文
- NumPy 陣列複製與檢視詳解陣列
- 基於QT錄製PCM音訊例項詳細QT音訊
- Android WebView 實現檔案選擇、拍照、錄製視訊、錄音AndroidWebView
- 音訊錄製:三星電腦如何錄製音訊?音訊
- 電腦錄音工具有什麼,怎麼錄製電視音訊?音訊
- 怎麼錄製電腦螢幕視訊?好用的錄屏方法分享
- iOS採集錄製音視訊API選擇推薦iOSAPI
- 如何實現在服務端錄製視訊會議?服務端
- WebRTC網頁開啟攝像頭並錄製視訊Web網頁
- 混音器:視訊會議錄製不可或缺的元件元件
- Filmage Screen for Mac(螢幕錄製和視訊編輯軟體)Mac
- 短視訊技術詳解:Android端的短視訊開發技術Android
- .NET 視窗/螢幕錄製
- AQ錄製軟體批量匯入視訊檔案並且合併視訊檔案的方法
- 實時通訊系列目錄篇之SignalR詳解SignalR
- 詳解音視訊直播中的低延時
- 教你如何用MongoDB檢視版本資訊詳解MongoDB
- 線上視訊網站加密技術詳解網站加密
- 【秒懂音視訊開發】09_音訊錄製02_程式設計音訊程式設計
- Rust 程式設計視訊錄製結束的一點體會Rust程式設計
- px30-android8.1-USB攝像頭錄製視訊異常Android
- Linux 目錄詳解Linux
- linux目錄詳解Linux