我想創建一個應用程序的Mac將創建實時視頻流。我知道VLC和其他解決方案,但仍然。QTKit,捕捉視頻直播
爲此,我試圖使用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]; }
謝謝。不幸的是,無法檢查它。將盡快接受我可以檢查它。 – Ibolit
謝謝。它的工作比以前更平滑。但仍然不完全平穩。你提到的那些「更具體的知識」是什麼?你能告訴我在哪裏可以找到它嗎? 此致敬禮, Timofey。 – Ibolit
你是什麼意思,不完全平滑?它應該工作得很好。當我說你需要更多具體的知識時,我只是不知道你需要深入瞭解快速的東西有多深。大多數時候,我描述的方法足以將拍攝的電影分解成片斷。但是,如果您需要更精確地切割到單個幀,則可以使用'[QTCaptureFileOutput captureOutput:didOutputSampleBuffer:fromConnection:]'方法。在這種情況下,您需要從緩衝區獲取數據並對其進行分析。沒有什麼特別的,你可以從文檔中獲得幾乎所有東西。 – Davyd