다음 코드를 사용하여 AVCaptureSession을 설정하고 비디오 파일을 녹화 한 다음 다시 재생합니다. 때로는 제대로 작동하고 재생 중에 검은 색 화면이 나타나는 경우가 있습니다. 내가 알 수있는 한 그것은 완전히 무작위이다.AVCaptureSession의 이상한 버그
버그가 발생하면 quicktime에서 파일을 열려고하면 "파일을 열 수 없습니다. 형식을 인식 할 수 없습니다"라는 메시지가 나타납니다. 이것은 내가 재생 문제가 아닌 녹음 문제를 믿게합니다.
또한 마이크 입력을 추가하는 코드 부분을 주석 처리하면 버그가 발생하지 않지만 내 비디오 파일에는 물론 오디오 트랙이 없습니다 ... 그래서 아마 오디오 피드가 임의로 손상됩니다. 어떤 이유로 파일?
- (void)viewDidLoad {
[super viewDidLoad];
....
captureSession = [[AVCaptureSession alloc] init];
[captureSession setSessionPreset:AVCaptureSessionPresetHigh];
NSArray *devices = [AVCaptureDevice devices];
AVCaptureDevice *frontCamera;
AVCaptureDevice *mic = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
for (AVCaptureDevice *device in devices) {
NSLog(@"Device name: %@", [device localizedName]);
if ([device hasMediaType:AVMediaTypeVideo])
{
if ([device position] == AVCaptureDevicePositionFront) {
NSLog(@"Device position : front");
frontCamera = device;
}
}
}
NSError *error = nil;
AVCaptureDeviceInput * microphone_input = [AVCaptureDeviceInput deviceInputWithDevice:mic error:&error];
AVCaptureDeviceInput *frontFacingCameraDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:frontCamera error:&error];
if (!error)
{
if ([captureSession canAddInput:frontFacingCameraDeviceInput])
{
[captureSession addInput:frontFacingCameraDeviceInput];
}
if([captureSession canAddInput:microphone_input])
{
[captureSession addInput:microphone_input];
}
}
[captureSession startRunning];
}
기록을 누르면, 내가 가진 "movie.mov"파일에 기록합니다
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *pathString = [documentsDirectory stringByAppendingPathComponent:@"movie.mov"];
NSURL *pathUrl = [NSURL fileURLWithPath:pathString];
mPlayer = [AVPlayer playerWithURL:pathUrl];
[self.video setPlayer:self.mPlayer];
[video setVideoFillMode:@"AVLayerVideoGravityResizeAspectFill"];
[self.mPlayer play];
: 재생을 누를 때
movieOutput = [[AVCaptureMovieFileOutput alloc]init];
[captureSession addOutput:movieOutput];
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *pathString = [documentsDirectory stringByAppendingPathComponent:@"movie.mov"];
NSURL *pathUrl = [NSURL fileURLWithPath:pathString];
[movieOutput startRecordingToOutputFileURL:pathUrl recordingDelegate:self];
그리고, 내가 가진 동영상 파일을 재생
필자는 잠시 동안 여기에 있었고 알아낼 수 없었습니다. 실제로는 매우 무작위입니다. 어떤 도움을 주셔서 감사합니다!
EDIT : movie.mov 파일이 이미있는 경우 새 녹음을 시작하기 전에 삭제합니다.
EDIT2 : 문제 해결 : [movieOutput startRecordingToOutputFileURL:pathUrl recordingDelegate:self];
엑스 코드 나이 줄에 경고 "ID '호환되지 않는 유형의 매개 변수'의 ViewController * const_strong 보내기"
이 EDIT3에게 제공합니다 : 그것은 라인과 함께 할 수있는 뭔가가 수 곧 답변을 게시 할 예정입니다. 감사! 녹화 전에
이 동작에 어떤 패턴이 있는가 - 맹목적으로 나 같은 입력 새내기 그래서
? 즉, 발사 당 처음 기록 할 때만 성공적으로 기록됩니까? 앱을 삭제 한 후 처음으로 앱을 처음 설치할 때만 성공적으로 기록됩니까? 게임을 다시 시작할 때까지 출시 당 매회 성공적으로 기록됩니까? –
내가 볼 수있는 패턴이없는 것 같습니다. 그것은 시도의 약 50 %에서 발생하는 것 같습니다. 하지만 3 회 연속 시도하고 2 회 시도하지 않고 기적적으로 다시 작업합니다 (모두 앱을 다시 시작하지 않아도됩니다). – Dimitar08