gpt4 book ai didi

cocoa - QTKit,捕获视频以进行直播

转载 作者:行者123 更新时间:2023-12-03 17:06:08 29 4
gpt4 key购买 nike

我正在尝试创建一个用于 Mac 的应用程序来创建实时视频流。我了解 VLC 和其他解决方案,但仍然如此。

为此,我尝试使用 QTKit 从 iSight 录制视频,并将其连续保存为一系列小视频文件。然而,录音结果并不完全连续,文件之间存在间隙。

基本上,我只是设置一个计时器,以一定的时间间隔开始录制到新文件,从而停止旧的录制。我还尝试设置最大记录长度,并使用委托(delegate)方法 ...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];
}<p></p>

<p>‐ (void) getMovieLength:(NSTimer *) t {
a++;
[output recordToOutputFileURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%i.mov", fileName, a]] bufferDestination:QTCaptureFileOutputBufferDestinationOldFile];
}</p>

<p></p>

最佳答案

有一种 native 机制可以将捕获的电影分成碎片。使用

[QTCaptureFileOutput setMaximumRecordedDuration:]

指定片段的持续时间或

[QTCaptureFileOutput setMaximumRecordedFileSize:]

指定文件大小限制。

当达到限制时,将调用委托(delegate)方法:

[QTCaptureFileOutput_Delegate captureOutput: shouldChangeOutputFileAtURL: forConnections: dueToError:]

在此方法中您可以设置新文件名:

[QTCaptureFileOutput recordToOutputFileURL:]

这将允许您非常精确地剪切录制的电影片段。

请注意,[QTCaptureFileOutput_Delegate captureOutput: didFinishRecordingToOutputFileAtURL: forConnections: dueToError:] 将在重新编码到文件中实际完成后稍后调用。如果您使用此方法设置新文件,最终视频中将会出现间隙。但这并不意味着您不需要使用此方法。此方法将指示电影片段何时可​​供使用。

如果您需要更精确的切割,可以使用

[QTCaptureFileOutput captureOutput: didOutputSampleBuffer: fromConnection:]

指定开始录制新片段的确切影片帧。但是,您需要更具体的知识才能使用该方法。

关于cocoa - QTKit,捕获视频以进行直播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745329/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com