Создание миниатюры из видео - выбор изображения, которое будет использоваться во время предварительного просмотра

создание миниатюры из видео с помощью средства выбора очень просто. Однако, когда я нажимаю PLAY в окне выбора, а затем выбираю видео, моя миниатюра всегда остается черной. Я надеялся, что он сделает снимок экрана - однако этот метод снимает только первое изображение видео - и ТОЛЬКО ЕСЛИ ЭТО НЕ ПРОИГРЫВАЛИ!

Как сделать миниатюру в любом месте видео?

Вот «нормальный» код, который я использую для эскизов, когда видео не воспроизводилось:

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection {

    CGSize size = viewImage.size;
    CGFloat ratio = 0;
    if (size.width > size.height) {
        ratio = 80.0 / size.width;
    } else {
        ratio = 80.0 / size.height;
    }
    CGRect rectForthumbnail = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height);

    UIGraphicsBeginImageContext(rectForthumbnail.size);

    CGRect clipRect = CGRectMake(0.0, 0.0,74,74);
    [viewImage drawInRect:clipRect];
    dance.thumbnailImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

К сожалению, после нажатия «PLAY» созданный эскиз становится черным (показывает только верхнюю часть экрана iphone, где отображается видеопрокат и текущая позиция воспроизведения), оставшаяся часть эскиза всегда остается черным. Как уже было сказано, в других случаях это работает хорошо.

Большое спасибо!


person user387184    schedule 16.07.2010    source источник
comment
Привет, geforce, не могли бы вы также указать это в качестве ответа (а не просто комментария), чтобы я мог проверить это как решенное - я уверен, что это то, что я искал ...   -  person user387184    schedule 08.04.2011


Ответы (3)


Проверьте документ MPMoviePlayerController: ссылка . Существует функция «thumbnailImageAtTime: timeOption:», которая возвращает UIImage. Надеюсь, это поможет

person geforce    schedule 11.04.2011

Если вы используете MPMoviePlayerController, вы можете попробовать это

- (void)getThumbnailImage
{
UIImage *thumbnailImage = [player thumbnailImageAtTime:player.currentPlaybackTime timeOption:MPMovieTimeOptionExact];
}
person visakh7    schedule 11.04.2011

Вы можете использовать метод MPMoviePlayerController thumbnailImageAtTime:timeOption, если используете MPMoviePlayer.

-(UIImage *)thumbnailImageFromVideo:(NSString *)videoPath
{
   NSURL *videoURL = [NSURL fileURLWithPath:videoPath];
   MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
   UIImage *thumbnailImage = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];

   //Player autoplays audio on init
   [player stop];
   return thumbnailImage;
}

или вы можете вручную получить миниатюру из видео, используя следующий метод -

-(UIImage *)thumbnailCreationForVideo:(NSString *)videoPath
 {
   NSURL *videoURL = [[NSURL alloc] initFileURLWithPath:videoPath];
   AVURLAsset *myAsset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
   AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:myAsset];
   NSError *err = NULL;
   Float64 durationSeconds = CMTimeGetSeconds([myAsset duration]);
   CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600);
   CGImageRef imgRef = [generate copyCGImageAtTime:midpoint actualTime:NULL error:&err];
   UIImage *thumbnailImage = [[UIImage alloc] initWithCGImage:imgRef];
   return thumbnailImage;
}
person nilam_mande    schedule 08.06.2015