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

правенето на миниатюра от видео с помощта на инструмента за избор е направо напред. Когато обаче натисна 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