ライブビデオストリーミングを作成するMac用のアプリケーションを作成しようとしています。VLCやその他のソリューションについては知っていますが、それでもです。
そのために、QTKitを使用してiSightからビデオを録画し、一連の小さなビデオファイルとして継続的に保存しようとしています。ただし、ファイル間にギャップがあるため、録音は完全に連続していないことがわかります。
基本的には、タイマーを設定するだけで、特定の時間間隔で新しいファイルへの記録を開始し、古い記録を停止します。また、最大記録長を設定し、デリゲートメソッド...didFinishRecording...および...willFinishRecording...を使用してみましたが、同じ結果になりました(これらの場合のギャップの違いを実際に見積もることはできません) )。
これらのことをどのように行うべきかを知っているなら、助けてください。
これが私の現在のコードです:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
QTCaptureSession *session = [[QTCaptureSession alloc] init];
QTCaptureDevice *iSight = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo];
[iSight open:nil];
QTCaptureDeviceInput *myInput = [QTCaptureDeviceInput deviceInputWithDevice:iSight];
output = [[QTCaptureMovieFileOutput alloc] init] ; //ivar, QTCaptureFileOutput
[output setDelegate:self];
a = 0; //ivar, int
fileName = @"/Users/dtv/filerecording_"; //ivar, NSString
[session addOutput:output error:nil];
[session addInput:myInput error:nil];
[capview setCaptureSession:session]; //IBOutlet
[session startRunning];
[output setCompressionOptions:[QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsSD480SizeH264Video"] forConnection:[[output connections] objectAtIndex:0]];
[output recordToOutputFileURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%i.mov", fileName, a]] bufferDestination:QTCaptureFileOutputBufferDestinationOldFile];
NSTimer *tmr = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(getMovieLength:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:tmr forMode:NSDefaultRunLoopMode];
}
‐ (void) getMovieLength:(NSTimer *) t {
a++;
[output recordToOutputFileURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%i.mov", fileName, a]] bufferDestination:QTCaptureFileOutputBufferDestinationOldFile];
}