iPhone: странная проблема со свойством videoMaximumDuration в API видеомагнитофона - PullRequest
1 голос
/ 11 апреля 2011

У меня странная проблема со свойством videoMaximumDuration в API видеомагнитофона.Я пытаюсь решить эту проблему больше недели, но не смог.Я написал на нескольких форумах, но пока не помог.

Я использую следующий код для запуска камеры из моего приложения и начала записи видео.Согласно моему требованию, я должен установить продолжительность записи видео до остановки.Итак, я использую свойство «videoMaximumDuration», чтобы установить продолжительность записи видео.

if ([types containsObject:(id)kUTTypeMovie])
{
    appDelegate.pickerController = [[UIImagePickerController alloc] init];
    appDelegate.pickerController.delegate = self;
    appDelegate.pickerController.videoQuality = setVideoQuality;

       appDelegate.pickerController.allowsEditing = NO;
    appDelegate.pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    appDelegate.pickerController.showsCameraControls = YES;
    appDelegate.pickerController.navigationBarHidden = YES;
    appDelegate.pickerController.toolbarHidden = YES;
    appDelegate.pickerController.wantsFullScreenLayout = YES;
    appDelegate.pickerController.cameraViewTransform =
    CGAffineTransformScale(appDelegate.pickerController.cameraViewTransform,
                           CAMERA_TRANSFORM_X,
                           CAMERA_TRANSFORM_Y);
    appDelegate.pickerController.mediaTypes = [NSArray arrayWithObject:(id)kUTTypeMovie];
    appDelegate.pickerController.videoMaximumDuration = maxDuration;
    [self presentModalViewController:appDelegate.pickerController animated:YES];
}

Вот проблема:

Если, если я установил videoQuality в качестве UIImagePickerControllerQualityTypeHigh, то продолжительность времени(videoMaximumDuration) работает, как и ожидалось, то есть ровно через какое-то время автоматически прекращает запись видео.Если я пойду и посмотрю это записанное видео в Фотоальбоме, чтобы убедиться, что оно записано хорошо, как за время.Если я изменю videoQuality на UIImagePickerControllerQualityTypeMedium (или) UIImagePickerControllerQualityTypeLow, как это, то длительность (videoMaximumDuration) для видеозаписи не работает должным образом, то есть она может автоматически останавливать запись видео в установленное время, без проблемесли я пойду и посмотрю записанное видео в Фотоальбоме, чтобы убедиться, что оно не соответствует затраченному времени, скорее, я могу увидеть видео меньшего размера, чем то, что я записал.Например, если я установил videoMaximumDuration на 30 секунд, после записи видео, если я пойду и увижу это записанное видео в Фотоальбоме, он сможет записать = только до 22 секунд.Кажется, проблема с самим API.Этого не происходит, когда я использую качество видео в качестве UIImagePickerControllerQualityTypeHigh.

Я пытался даже использовать пользовательский вид наложения и запускаю и останавливаю запись видео с помощью кода, как показано ниже, установив таймер (NStimer).Но все же я вижу, что наблюдалась та же проблема.

    overlay = [[OverlayView alloc]initWithFrame:CGRectMake(0, 0, 768, 1024)];

if ([types containsObject:(id)kUTTypeMovie])
{
    appDelegate.pickerController = [[UIImagePickerController alloc] init];
    appDelegate.pickerController.delegate = self;
    appDelegate.pickerController.videoQuality = setVideoQuality;

   appDelegate.pickerController.allowsEditing = NO;
    appDelegate.pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    appDelegate.pickerController.showsCameraControls = NO;
    appDelegate.pickerController.navigationBarHidden = YES;
    appDelegate.pickerController.toolbarHidden = YES;
    appDelegate.pickerController.wantsFullScreenLayout = YES;
    appDelegate.mTimerSelectionForVideo = maxDuration; // TIME SET HERE IN VARIABLE
    appDelegate.pickerController.cameraViewTransform =
    CGAffineTransformScale(appDelegate.pickerController.cameraViewTransform,
                           CAMERA_TRANSFORM_X,
                           CAMERA_TRANSFORM_Y);
    appDelegate.pickerController.mediaTypes = [NSArray arrayWithObject:(id)kUTTypeMovie];
    appDelegate.pickerController.videoMaximumDuration = maxDuration;
    [self presentModalViewController:appDelegate.pickerController animated:YES];  
    appDelegate.pickerController.cameraOverlayView =overlay;
}

OverlayView.m

    -(void)startAction:(id)sender
{
    BOOL bStop = TRUE;

    void (^hideControls)(void);
    hideControls = ^(void) {
        cameraSelectionButton.alpha = 0;
        startButton.enabled = NO;
        lbl.hidden = NO;
    };

    void (^recordMovie)(BOOL finished);
    recordMovie = ^(BOOL finished) {
        stopButton.enabled = YES;
        [appDelegate.pickerController startVideoCapture];
    };

    // Hide controls
    [UIView  animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:hideControls completion:recordMovie];

    if ( appDelegate.mTimerSelectionForVideo==0 )
    {
        bStop = FALSE;
    }
    if ( bStop )
        timer = [NSTimer scheduledTimerWithTimeInterval:(appDelegate.mTimerSelectionForVideo)+1 
                                             target:self selector:@selector(stopCamera:) userInfo:nil repeats:NO];
}
- (void)stopCamera:(NSTimer *)theTimer
{
    startButton.enabled = YES;

    if ( timer )
    {
        [timer invalidate];
        timer = nil;    
    }    
    [appDelegate.pickerController stopVideoCapture];
    [appDelegate.pickerController dismissModalViewControllerAnimated:YES];
}

Но все же я вижу ту же самую проблему, которая наблюдалась.Почему другие параметры качества видео не работают в соответствии с установленным параметром videoMaximumDuration?Я тестировал на iPhone 4.1 и iPad 4.3, такой же проблемы не наблюдалось.Похоже, проблема с самим API или аппаратным обеспечением видеомагнитофона для его поддержки.

Может кто-нибудь, пожалуйста, напишите мне, чтобы решить эту проблему, если есть какая-либо возможность (или) через ваш опыт?

Заранее спасибо!

1 Ответ

1 голос
/ 14 апреля 2011

Исправлено путем создания наложения в верхней части обзора камеры и обработки запуска / остановки через код.

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