你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 為App添加行為錄制功能ReplayKit框架入門指南

為App添加行為錄制功能ReplayKit框架入門指南

編輯:IOS開發基礎

前文提要:

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

1.jpg

圖片發自簡書App

ReplayKit簡介

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

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

ReplayKit不需要太大電量損耗和性能損耗就可以產出高清的視頻記錄。ReplayKit支持使用A7芯片以上,操作系統為iOS 9或更高版本的設備。

ReplayKit的使用

1、導入頭文件#import。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 @interface ViewController () @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

效果圖如下

在點擊錄制按鈕後會彈出用戶允許提示,分別為錄制屏幕與音頻、只錄制屏幕與不允許。

2.png

在錄制結束後,這裡直接彈出了編輯界面,可預覽或保存至相冊等操作。

3.png

注意事項

1、排除界面元素

你可能已經注意到了頂部的按鈕在應用錄制的記錄中都是可見的,它們包含在了最終的視頻記錄中。當RepalyKit錄制你的應用時,它毫不遺漏地記錄了應用程序在UIWindow中渲染的一切視圖,任何細節都不放過。還好,RepalyKit可以在來電話是或用戶輸入時的界面停止錄制。

要排除用戶界面元素,你需要把它們放置在單獨的UIWindow實例中,或者在錄制時隱藏那些不需要顯示的視圖。

2、兼容性

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

參考鏈接:iOS 9: An Introduction to ReplayKit


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved