1. 程式人生 > >IOS 一個很好的錄製螢幕實現IOS功能

IOS 一個很好的錄製螢幕實現IOS功能

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

轉自 https://github.com/wf1992/WFRecScreenDemo 和 http://www.jianshu.com/p/9a23b5365f0f

很不錯 去看看


前文提要:

最近空閒的時候在玩手遊《王者榮耀》,在沉迷如此的同時,身為一隻程式猿一直在想一個問題,《王者榮耀》是怎麼做到在不影響遊戲流暢性的條件下錄製遊戲中視訊,該文由此而來。


圖片發自簡書App

ReplayKit簡介

在使用應用或者遊戲的過程中錄製回放,一直是iOS開發者絞盡腦汁想要實現的功能。但由於移動裝置效能的限制,這一功能往往較難實現或者效果難以滿足使用者的需要。終於,隨著iOS9的釋出,蘋果提供了ReplayKit框架來幫助開發者實現錄製回放的功能。

在iOS 9中,ReplayKit 是一款全新的框架,它可以讓玩家更便捷地記錄遊戲或者應用的畫面,錄製自己的聲音。ReplayKit為使用者或者玩家提供了一個全功能的互動介面,使用者可用它來編輯或製作自己的視訊剪輯。

ReplayKit不需要太大電量損耗和效能損耗就可以產出高清的視訊記錄。ReplayKit支援使用A7晶片以上,作業系統為iOS 9或更高版本的裝置。

ReplayKit的使用

1、匯入標頭檔案#import <ReplayKit/ReplayKit.h>。ReplayKit框架中包含兩個主要類:RPScreenRecorder負責錄製回放視訊,RPPreviewViewController

為使用者提供預覽、分享、儲存等功能。

2、檢測裝置是否支援ReplayKit框架。ReplayKit只有在iOS9上才可以使用,所以使用前需要判斷裝置是否支援該項功能,然後通過
"[RPScreenRecorder sharedRecorder].available"屬性我們可以判斷RPScreenRecorder是否可以工作。

3、開始錄製。
呼叫RPScreenRecorder的
- (void)startRecordingWithMicrophoneEnabled:(BOOL)microphoneEnabled handler:(nullable void(^)(NSError * __nullable error))handler
方法開始錄製回放視訊。當該方法呼叫時使用者會收到許可權請求警告,這個警告每次會在開始錄製時出現。然而,一旦使用者選擇了其中一種偏好設定,系統會在接下來的8分鐘記住這個選擇。

4、停止錄製。
通過呼叫RPScreenRecorder 的
- (void)stopRecordingWithHandler:(nullable void(^)(RPPreviewViewController * __nullable previewViewController, NSError * __nullable error))handler;
方法可以停止錄製回放視訊。在該方法中我們可以獲取到一個RPPreviewViewController物件。
預覽和儲存。將得到的RPPreviewViewController物件呈現給使用者,就可以讓使用者預覽已經錄製的視訊,並且自行選擇是否保存錄像。

實現示例

ReplayKit不支援模擬器,所以要看到效果必須在真機上測試。下面的程式碼我們實現使用ReplayKit進行錄製並預覽回放的功能。這裡使用UIImageView設定的動畫展示,使用ReplayKit框架進行錄製。

#import "ViewController.h"#import <ReplayKit/ReplayKit.h>@interface ViewController () <RPPreviewViewControllerDelegate>@property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    [self createImageView];}- (void) createImageView {    self.imageView.animationImages = @[[UIImage imageNamed:@"img_01"],   [UIImage imageNamed:@"img_02"], [UIImage imageNamed:@"img_03"], [UIImage imageNamed:@"img_04"]];    self.imageView.animationDuration = 1;    [self.imageView startAnimating];}//啟動或者停止錄製回放- (IBAction)replayKitAction:(UIButton *)sender {    //判斷是否已經開始錄製回放    if (sender.isSelected) {        //停止錄製回放,並顯示回放的預覽,在預覽中使用者可以選擇儲存視訊到相簿中、放棄、或者分享出去        [[RPScreenRecorder sharedRecorder] stopRecordingWithHandler:^(RPPreviewViewController * _Nullable previewViewController, NSError * _Nullable error) {            if (error) {                NSLog(@"%@", error);                //處理髮生的錯誤,如磁碟空間不足而停止等            }            if (previewViewController) {                //設定預覽頁面到代理                previewViewController.previewControllerDelegate = self;                [self presentViewController:previewViewController animated:YES completion:nil];            }        }];        sender.selected = NO;        return;    }    //如果還沒有開始錄製,判斷系統是否支援    if ([RPScreenRecorder sharedRecorder].available) {        NSLog(@"OK");        sender.selected = YES;        //如果支援,就使用下面的方法可以啟動錄製回放        [[RPScreenRecorder sharedRecorder] startRecordingWithMicrophoneEnabled:YES handler:^(NSError * _Nullable error) {            NSLog(@"%@", error);            //處理髮生的錯誤,如設使用者許可權原因無法開始錄製等        }];    } else {        NSLog(@"錄製回放功能不可用");    }}//回放預覽介面的代理方法- (void)previewControllerDidFinish:(RPPreviewViewController *)previewController {    //使用者操作完成後,返回之前的介面    [previewController dismissViewControllerAnimated:YES completion:nil];  }@end

效果圖如下
在點選錄製按鈕後會彈出使用者允許提示,分別為錄製螢幕與音訊、只錄制螢幕與不允許。


IMG_2162.PNG


在錄製結束後,這裡直接彈出了編輯介面,可預覽或儲存至相簿等操作。


IMG_2163.PNG

️注意事項

1、排除介面元素

你可能已經注意到了頂部的按鈕在應用錄製的記錄中都是可見的,它們包含在了最終的視訊記錄中。當RepalyKit錄製你的應用時,它毫不遺漏地記錄了應用程式在UIWindow中渲染的一切檢視,任何細節都不放過。還好,RepalyKit可以在來電話是或使用者輸入時的介面停止錄製。
要排除使用者介面元素,你需要把它們放置在單獨的UIWindow例項中,或者在錄製時隱藏那些不需要顯示的檢視。

2、相容性

RepalyKit與AVPlayer不相互相容,所以RepalyKit可能無法錄製AVPlayer呈現的畫面。

參考連結:iOS 9: An Introduction to ReplayKit

demo下載連結

為App新增行為錄製功能ReplayKit框架入門指南demo

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述