Objective-c Переключение UIImagePickerController в режим видео - PullRequest
1 голос
/ 22 сентября 2011

У меня есть приложение, которое я хочу показать на заднем плане источник видео с камеры. У меня есть следующий код в моем viewcontroller:

#if !TARGET_IPHONE_SIMULATOR
    imagePickerController = [[UIImagePickerController alloc] initWithRootViewController:self];
    imagePickerController.delegate = self;
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

    imagePickerController.navigationBarHidden = YES;
    imagePickerController.toolbarHidden = NO;
    imagePickerController.showsCameraControls = NO;
    //...
    [self.view addSubview:self.imagePickerController.view];
    [imagePickerController viewWillAppear:YES];
    [imagePickerController viewDidAppear:YES];
 #endif 
   //...
  [self.view addSubview:otherthings];

Затем я добавляю другие виды сверху и у меня тоже есть звуки. Однако я изменил режим выбора изображения на видео, но он зависает при воспроизведении звука. вот что я изменил:

#if !TARGET_IPHONE_SIMULATOR
    imagePickerController = [[UIImagePickerController alloc] init];//initWithRootViewController:self];
    imagePickerController.delegate = self;
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

    NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    NSArray *videoMediaTypesOnly = [mediaTypes filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF contains %@)", @"movie"]];
    BOOL movieOutputPossible = (videoMediaTypesOnly != nil);

    if (movieOutputPossible) {
        imagePickerController.mediaTypes = videoMediaTypesOnly;
        imagePickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;
        imagePickerController.navigationBarHidden = YES;
        imagePickerController.toolbarHidden = YES;
        imagePickerController.showsCameraControls = NO;                      
    }


#endif 

Кто-нибудь знает, почему сборщики камеры зависают при воспроизведении звука? Кстати, звук - это AVAudioPlayer.

1 Ответ

2 голосов
/ 23 сентября 2011

Решение: используйте AVFOundation вместо UIImagePickerController.

    videoBackground = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)];

    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    session.sessionPreset = AVCaptureSessionPresetMedium;


    CALayer *viewLayer = videoBackground.layer;
    NSLog(@"viewLayer = %@", viewLayer);

    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    captureVideoPreviewLayer.frame = videoBackground.bounds;
    [videoBackground.layer addSublayer:captureVideoPreviewLayer];

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error = nil;
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
    if (!input) {
        // Handle the error appropriately.
        NSLog(@"ERROR: trying to open camera: %@", error);
    }
    [session addInput:input];
    [session startRunning];
    [self.view addSubview:videoBackground];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...