Я пытаюсь реализовать запись видео в iOS поверх GPUImage.
У меня есть GPUImageVideoCamera, и я пытаюсь настроить запись следующим образом:
-(void)toggleVideoRecording {
if (!self.recording) {
self.recording = true;
GPUImageMovieWriter * mw = [self createMovieWriter: self.filter1];
[self.filter1 addTarget:mw];
mw.shouldPassthroughAudio = YES;
[mw startRecording];
}
else {
self.recording = false;
[self finishWritingMovie];
}
}
-(GPUImageMovieWriter *) createMovieWriter:(GPUImageFilter *) forFilter {
NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/CurrentMovie.m4v"];
unlink([pathToMovie UTF8String]);
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
GPUImageMovieWriter * mw = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:forFilter->currentFilterSize];
self.movieWriter = mw;
self.movieURL = movieURL;
return mw;
}
Это на самом деле в основном работает. Однако MoviewWriter нуждается в CGSize носителя ввода, и я не знаю, как вытащить его из VideoCamera. Во-первых, размер меняется, потому что камера использует sessionPreset: AVCaptureSessionPresetHigh, то есть зависит от возможностей устройства. А во-вторых, ориентация меняет соответствующий CGSize. Если пользователь начинает запись в ландшафтном режиме, я хочу изменить размеры.
Для тех, кто знает, как это сделать с помощью vanilla CoreVideo, я могу вытащить AVCaptureSession из моей GPUImageVideoCamera. (Но я прочитал API для AVCaptureSession, и ничего не выглядело многообещающим).
Было бы очень полезно даже сослаться на пример проекта, который занимается этим.