AVFoundationを使用してOSX10.8でスクリーンレコーディングを行っています。sessionPreset「AVCaptureSessionPresetPhoto」を使用して画面全体を記録しています。変更したいのは、作成されるムービーファイルの品質です。
AVCaptureSessionPresetPhotoは、クリッピングなしで実際に全画面をキャプチャするために必要なようです。
ここのドキュメントによると:http://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureSession_Class/Reference/Reference.html
"You use this property to customize the quality level or bitrate of the output. For possible values of sessionPreset, see “Video Input Presets.” The default value is AVCaptureSessionPresetHigh."
ただし、ビデオ入力プリセットの場合、オプションは次の定数のみです。http: //developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVCaptureSession_Class/Reference/Reference.html#//apple_ref/occ/cl / AVCaptureSession
NSString *const AVCaptureSessionPresetPhoto;
NSString *const AVCaptureSessionPresetHigh;
NSString *const AVCaptureSessionPresetMedium;
NSString *const AVCaptureSessionPresetLow;
NSString *const AVCaptureSessionPreset320x240;
NSString *const AVCaptureSessionPreset352x288;
NSString *const AVCaptureSessionPreset640x480;
NSString *const AVCaptureSessionPreset960x540;
NSString *const AVCaptureSessionPreset1280x720;
AVCaptureSessionPresetPhotoは、クリッピングなしで全画面をキャプチャする作業を行いますが、最終的な品質はやや圧倒的です。デフォルトで使用されるビットレートが低いため、目に見えるアーティファクトがあります。
最終録音のビットレートを上げるにはどうすればよいですか?
以下は私の現在のコードのサンプルです。
mSession = [[AVCaptureSession alloc] init];
mSession.sessionPreset = AVCaptureSessionPresetPhoto;
CGDirectDisplayID displayId = kCGDirectMainDisplay;
AVCaptureScreenInput *input = [[AVCaptureScreenInput alloc] initWithDisplayID:displayId];
if (!input) {
mSession = nil;
return;
}
if ([mSession canAddInput:input]){
[mSession addInput:input];
}
mMovieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
if ([mSession canAddOutput:mMovieFileOutput])
[mSession addOutput:mMovieFileOutput];
[mSession startRunning];
if ([[NSFileManager defaultManager] fileExistsAtPath:[destPath path]])
{
NSError *err;
if (![[NSFileManager defaultManager] removeItemAtPath:[destPath path] error:&err])
{
NSLog(@"Error deleting existing movie %@",[err localizedDescription]);
}
}
[mMovieFileOutput startRecordingToOutputFileURL:destPath recordingDelegate:self];
mTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(finishRecord:) userInfo:nil repeats:NO];