2015-11-09 3 views
2

Я пытаюсь включить функцию записи в свою игру на C++ с помощью ReplayKit. Я проверяю, что версия iOS имеет 9.0 или выше в моем коде игры, и если это так, я позвоню RecordReplayIOS::startRecording(), а затем ReplayKit должен начать запись.ReplayKit возвращает ошибку «RPRecordingErrorFailedToStart»

По какой-то причине функция startRecordingWithMicrophoneEnabled всегда возвращает ошибку -5803, которая согласно документации по API составляет RPRecordingErrorFailedToStart. Любые идеи, что я делаю неправильно?

RecordReplayIOS.hpp:

#ifndef __RECORD_REPLAY_IOS_HPP__ 
#define __RECORD_REPLAY_IOS_HPP__ 

class RecordReplayIOS { 
public: 
    static bool canRecord(); 
    static void startRecording(); 
    static void stopRecording(); 
}; 

#endif 

RecordReplayIOS.mm:

#include "RecordReplay_ios.hpp" 
#include "ReplayKit/ReplayKit.h" 

@interface Recorder : NSObject 
+(void)startRecording; 
+(void)stopRecording; 
@end 

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 

bool RecordReplayIOS::canRecord() { 
    // ReplayKit needs at least iOS 9 
    if (SYSTEM_VERSION_LESS_THAN(@"9.0")) { 
     return false; 
    } 
    return true; 
} 

void RecordReplayIOS::startRecording() { 
    [Recorder startRecording]; 
} 

void RecordReplayIOS::stopRecording() { 
    [Recorder stopRecording]; 
} 

@implementation Recorder 

+(void)startRecording { 
    RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder; 
    recorder.delegate = self; 
    [recorder startRecordingWithMicrophoneEnabled:false handler:^(NSError * error) { 
     if(error != nil) { 
      NSString* desc = error.description; 
      return; 
     } 
    }]; 
} 

+(void)stopRecording { 
    RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder; 
    [recorder stopRecordingWithHandler:^(RPPreviewViewController *previewViewController, NSError *error) { 
     if(error != nil) { 
      NSString* desc = error.description; 
      return; 
     } 
     if(previewViewController) { 
      //do stuff...  
     } 
    }]; 
} 

@end 

ответ

2

Там нет ничего плохого с кодом. Кажется, я просто пытался использовать ReplayKit с iPad, который был слишком старым. Очевидно, ReplayKit нужен либо A7, либо A8-процессор. Мой iPad 4, у которого есть процессор A6, просто не работает с ReplayKit.

Правильный способ проверить, может ли устройство использовать ReplayKit, - это запросить RPScreenRecorder.sharedRecorder.available. Он возвращает true, если устройство поддерживает ReplayKit.

+0

Да, не поддерживается также на iPhone 5c. – nevyn