gpt4 book ai didi

iphone - 使用 AVFoundation 框架 iPhone 进行视频录制?

转载 作者:行者123 更新时间:2023-12-03 19:14:55 25 4
gpt4 key购买 nike

我正在借助 WWDC 2010 中的示例代码开发一个应用程序AVCamDemo 示例。在应用程序中,我需要从 iPhone 的前置摄像头录制视频,但由于我的地方没有新的 iPhone 4,我无法正确测试代码。

如果有人能给我提示,无论我的方向是否正确,我都会非常感激。当我设置 AVCaptureSession 时,我可以在 iPhone 3G(升级到 iOS 4.1)上测试的有限代码崩溃,如下代码所示:

- (void)recordVideo
{
NSLog(@"video recording on");

AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:videoCaptureDevice error:nil];
AVCaptureMovieFileOutput *movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];

[movieFileOutput release];

AVCaptureSession *session = [[AVCaptureSession alloc] init];
[session addInput:videoInput];
[session addOutput:movieFileOutput];
[self setSession:session]; // crashes

if (![session isRunning])
{
[self performSelector:@selector(startRecording) withObject:nil afterDelay:1.0];
[session startRunning];
}
}


- (void)startRecording
{

AVCaptureConnection *videoConnection = [playVideo connectionWithMediaType:AVMediaTypeVideo fromConnections:[[self movieFileOutput] connections]];

if ([videoConnection isVideoOrientationSupported]) {
[videoConnection setVideoOrientation:[self orientation]];
}

[[self movieFileOutput] startRecordingToOutputFileURL:[self tempFileURL]
recordingDelegate:self];
}


- (void) stopRecording
{
NSLog(@"stop recording");
[[self movieFileOutput] stopRecording];
}

- (NSURL *) tempFileURL
{

NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"];
NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:outputPath]) {
NSLog(@"file saved");
}
[outputPath release];
return [outputURL autorelease];
}

+ (AVCaptureConnection *)connectionWithMediaType:(NSString *)mediaType fromConnections:(NSArray *)connections;
{
for ( AVCaptureConnection *connection in connections ) {
for ( AVCaptureInputPort *port in [connection inputPorts] ) {
if ( [[port mediaType] isEqual:mediaType] ) {
return [[connection retain] autorelease];
}
}
}
return nil;
}

- (void)captureOutput:(AVCaptureFileOutput *)captureOutput
didStartRecordingToOutputFileAtURL:(NSURL *)fileURL
fromConnections:(NSArray *)connections
{

}

- (void)captureOutput:(AVCaptureFileOutput *)captureOutput
didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
fromConnections:(NSArray *)connections
error:(NSError *)error
{
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:outputFileURL])
{
[library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
completionBlock:^(NSURL *assetURL, NSError *error)];
}

[library release];
}

最佳答案

movieFileOutput 在分配后立即释放。 (第 9 行)

关于iphone - 使用 AVFoundation 框架 iPhone 进行视频录制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3932614/

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