【Unity3D游戏开发】iOS9 ReplayKit录制视频 (三十)
来源:互联网 发布:freehand软件用法 编辑:程序博客网 时间:2024/04/27 20:52
Unity游戏需要视频分享,之前用过第三方的,现在听说苹果有了自带的ReplayKit,毕竟是游戏中录制视频,视频的大小,压缩带来的性能影响,抱着试试看的态度加入了下,性能感觉还可以,但是架不住苹果的Objective-C和swift啊
#游戏目标: 为游戏增加视频分享
#开发环境: Unity5.3.0f4
#技术点: ReplayKit,需要ios9.0以上
直接上代码吧
ReplayKitProxy.h
#import <UIKit/UIKit.h>#import <ReplayKit/ReplayKit.h>@interface ReplayKitProxy : NSObject<RPPreviewViewControllerDelegate, RPScreenRecorderDelegate>+ (ReplayKitProxy*) sharedInstance;// 是否支持录像功能(仅ios9以上支持)+ (BOOL)isSupportReplay;// 开始录制视频- (void)startRecording;// 停止录制视频- (void)stopRecording;// 删除已录制视频,必须在stopRecording之后调用(eg.离开视频分享界面)- (void)discardRecording;// 显示视频- (void)displayRecordingContent;@end
ReplayKitProxy.m
#import "ReplayKitProxy.h"@interface ReplayKitProxy () <RPPreviewViewControllerDelegate, RPScreenRecorderDelegate>@property RPPreviewViewController* previewViewController;@end@implementation ReplayKitProxy+ (ReplayKitProxy *)sharedInstance{ static ReplayKitProxy* _instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[ReplayKitProxy alloc] init]; }); return _instance;}+ (BOOL)isSupportReplay{ NSString* version = [[UIDevice currentDevice] systemVersion]; BOOL _ios90orNewer = [version compare: @"9.0" options: NSNumericSearch] != NSOrderedAscending; return _ios90orNewer;}// 开始录制视频- (void)startRecording{ RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder; if (recorder.available == FALSE) { NSLog(@"Replaykit is not available"); return; } if (recorder.recording == TRUE) { NSLog(@"Replaykit is recording"); return; } // 添加代理:防止有些设备录制出来黑屏 recorder.delegate = self; [recorder startRecordingWithMicrophoneEnabled:YES handler:^(NSError * _Nullable error) { if (error) { NSLog(@"%@", error.localizedDescription); } }];}// 停止录制视频- (void)stopRecording{ RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder; if (recorder.recording == FALSE) { return; } [recorder stopRecordingWithHandler:^(RPPreviewViewController * _Nullable previewViewController, NSError * _Nullable error) { if (error) { NSLog(@"%@", error.localizedDescription); // [self ShowRecordAlert:error.localizedDescription]; return; } else { if (previewViewController != NULL) { previewViewController.previewControllerDelegate = self; self.previewViewController = previewViewController; } } }];}// 删除已录制视频,必须在stopRecording之后调用// eg.离开视频分享界面- (void)discardRecording{ RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder; if (recorder.recording == TRUE) { return; } [recorder discardRecordingWithHandler:^{ NSLog(@"discardRecording complete"); self.previewViewController = NULL; }];}// 显示视频- (void)displayRecordingContent{ UIViewController* rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController; [rootViewController presentViewController:self.previewViewController animated:YES completion:^{ NSLog(@"DIsplay complete!"); }];}// MARK: delegate RPPreviewViewControllerDelegate- (void)previewControllerDidFinish:(RPPreviewViewController*)previewController{ if (previewController != NULL) { [previewController dismissViewControllerAnimated:YES completion:^{ }]; }}// MARK: RPScreenRecorderDelegate- (void)screenRecorder:(RPScreenRecorder *)screenRecorder didStopRecordingWithError:(NSError *)error previewViewController:(nullable RPPreviewViewController *)previewViewController{ // Display the error the user to alert them that the recording failed.// showScreenRecordingAlert(error.localizedDescription) /// Hold onto a reference of the `previewViewController` if not nil. if (previewViewController != NULL) { self.previewViewController = previewViewController; }}@end
Unity Demo下载链接:http://pan.baidu.com/s/1ntVRBYh
官方Demo BotsBuildingaCrossPlatformGamewithSpriteKitandGameplayKit下载: http://pan.baidu.com/s/1jGQ8dr4
官方资料:
Apple文档:https://developer.apple.com/library/ios/documentation/ReplayKit/Reference/ReplayKit_Collection/index.html#//apple_ref/doc/uid/TP40016260
WWDC 15 Session video: Going Social with ReplayKit and Game Center
Sample code: DemoBots: Building a Cross Platform Game with SpriteKit and GameplayKit
参考blog:
iOS9 ReplayKit录制视频 http://blog.csdn.net/cocos2der/article/details/50260873
- 【Unity3D游戏开发】iOS9 ReplayKit录制视频 (三十)
- iOS9 ReplayKit录制视频
- iOS9 ReplayKit录制视频
- iOS9 ReplayKit 支持设备
- 利用replayKit 简单录制
- ReplayKit 的屏幕录制功能
- Unity3d windows平台视频录制
- Unity3D游戏开发之在Unity3D中实现视频播放
- 【Unity3D自学记录】Unity3D另类录制”视频“
- IOS开发---视频录制
- ios学习--ios9 之 ReplayKit框架入门
- Unity3D 游戏引擎之IOS截屏 话筒录音 录制截屏视频保存沙盒(另类实现方法 )
- Android开发之视频录制
- 音视频录制功能开发
- Android开发之录制视频
- Android开发短视频录制
- IOS开发笔记--视频录制
- unity3D游戏开发实战原创视频讲座系列3之全民飞机大战游戏开发
- JavaWeb自定义标签打包成jar
- 在UBUNTU 11.10上的DJANGO, PIL和 LIBJPEG
- Objective-C基础1-类目(Category)和延展(Extension)的区别
- 支持VPN的路由器,小米路由器PPTP的设置,
- Leetcode:Product of Array Except Self
- 【Unity3D游戏开发】iOS9 ReplayKit录制视频 (三十)
- C#动态链接库创建和使用实例
- 排序算法—直接插入排序算法分析与实现(Python)
- ng-cordova
- 疑难杂症:MSSQL Server操作界面挂掉了
- OpenCV【2】---读取png图片显示到QT label上的问题
- leetcode -- Dungeon Game -- dp重点,典型题
- android 动态addview注意
- JavaScript 如何给对象添加方法