Запись с фронтальной камеры iPhone 4? - PullRequest
4 голосов
/ 27 октября 2010

Я пытаюсь записать видео с фронтальной камеры iPhone 4, используя AVFoundation Framework, с помощью примеров WWDC, полученных из программы для разработчиков iPhone. Но я все еще не могу заставить его работать ... видео не записывается или может сохраняться в моей библиотеке iPhone ... вот код, который я пытаюсь использовать ... было бы очень полезно, если бы кто-нибудь помог мне с проблемой у меня есть ??

-(void)recordVideo
{

AVCaptureDeviceInput *videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self backFacingCamera] error:nil];

AVCaptureMovieFileOutput *movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];

AVCaptureSession *session = [[AVCaptureSession alloc] init];

[session addInput:videoInput];

[session addOutput:movieFileOutput];

[movieFileOutput release];  


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

 }

}

- (void) startRecording
{
    NSLog(@"start recording");


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
{
    NSLog(@"temp file url");
    NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"];
    NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:outputPath]) {
    NSLog(@"exists");
    }
    [outputPath release];
    return [outputURL autorelease];
}
- (void) setConnectionWithMediaType:(NSString *)mediaType enabled:(BOOL)enabled;
{

    [[playVideo connectionWithMediaType:AVMediaTypeVideo fromConnections:[[self movieFileOutput] connections]] setEnabled:enabled];
}

+ (AVCaptureConnection *)connectionWithMediaType:(NSString *)mediaType fromConnections:(NSArray *)connections;
{
    NSLog(@"connection with media type");
    for ( AVCaptureConnection *connection in connections ) {
        for ( AVCaptureInputPort *port in [connection inputPorts] ) {
            if ( [[port mediaType] isEqual:mediaType] ) {
                return [[connection retain] autorelease];
            }
        }
    }
    return nil;
}
@implementation recordVideo (Internal)

- (AVCaptureDevice *) cameraWithPosition:(AVCaptureDevicePosition) position
{
    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for (AVCaptureDevice *device in devices) {
        if ([device position] == position) {
            return device;
        }
    }
    return nil;
}
- (AVCaptureDevice *) backFacingCamera
{
    NSLog(@"back");
    return [self cameraWithPosition:AVCaptureDevicePositionBack];
}
- (AVCaptureDevice *) frontFacingCamera
{
    NSLog(@"front ");
    return [self cameraWithPosition:AVCaptureDevicePositionFront];
}

@end
@implementation recordVideo (AVCaptureFileOutputRecordingDelegate)

- (void)             captureOutput:(AVCaptureFileOutput *)captureOutput
didStartRecordingToOutputFileAtURL:(NSURL *)fileURL
                   fromConnections:(NSArray *)connections
{
    NSLog(@"did start recording");

}

- (void)              captureOutput:(AVCaptureFileOutput *)captureOutput
didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
                    fromConnections:(NSArray *)connections
                              error:(NSError *)error
{
    NSLog(@"did finish recording output file");


    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:outputFileURL])
    {
        [library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
                                    completionBlock:^(NSURL *assetURL, NSError *error){
                                        if (error && [delegate respondsToSelector:@selector(assetLibraryError:forURL:)]) {
                                            [delegate assetLibraryError:error forURL:assetURL];
                                        }
                                    }];
    } 
    else {

        }

    [library release];    


}
@end

Ответы [ 2 ]

1 голос
/ 21 февраля 2011
  1. Вы выбрасываете ошибки - как вы можете отлаживать, если вы делаете это?

  2. Вы должны быть более точными в том, что происходит / не происходит. Какие методы вызываются? О каких ошибках сообщает SDK (если есть)? и т.д ...

0 голосов
/ 11 октября 2011

вы выпустили ссылку на movieFileOutput в - (void) recordVideo;и вы все еще используете освобожденный movieFileOutput в - (void) startRecording, а также другие функции. Лучше не освобождать объект, который вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...