0

ドキュメントディレクトリに保存されている録画ビデオからサムネイルを生成しています。ビデオは1分以内にする必要があります。録画時間まで、すべてが正常に機能します。録画したビデオからサムネイルを生成しようとすると、何も得られませんでした。同じために2つの方法を使用しました

  • MPMoviePlayerController を使用する

    -(void)generateThumbnail:(NSURL*)assetURL{
    
     if(assetURL){
    
       MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:assetURL];
      UIImage  *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];
    
      //AT THIS POINT AS I CHECK IT THIS thumbnail contains 0X000000
       player = nil;
       if (thumbnail) {
           //will use that image to further
       }
      else {
         //here wil doing some intimation
     }
     }
    }
    

    上記のメソッドは実行で終了し、これらのログを取得しました

    自動再生: 自動再生を有効にしています 自動再生: 追いつく可能性が高いか、バッファがいっぱいです: 0 [MPAVController] 自動再生: 自動再生をスキップしています。追いつくのに十分なバッファがありません。[MPAVController] Autoplay: 自動再生を有効にする [MPAVController] Autoplay: 自動再生を有効にする [MPAVController] Autoplay: 自動再生をスキップする、無効にする (現在のアイテムの場合: 0、プレーヤー: 1) [MPAVController] Autoplay: 自動再生を有効にする[MPAVController] Autoplay: 自動再生をスキップする、無効 (現在のアイテムの場合: 0、プレーヤーの場合: 1)

  • AVAssetImageGenerator を使用する

      -(void)genrateThumbnailImageFromAsset:(AVAsset*)_assetObject size:(CGSize)size forTime:(CMTime)thumbTime
      {
     __weak typeof(self) wself = self;
     __block UIImage * thumbNailImage = nil;
      AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:_assetObject];
      generator.appliesPreferredTrackTransform=TRUE;
    
     AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error)
     {
       switch (result) {
    
        case AVAssetImageGeneratorSucceeded:{
            /*get the generated image*/
            thumbNailImage=[UIImage imageWithCGImage:im];
           // We finished updating the image. Set the visual UI button to the uploaded image
            if (thumbNailImage) {
                //using accordingly
            }
            else
            {
                 //using accordingly
            }
        }
         break;
    
        case AVAssetImageGeneratorFailed:{
             //using  accordingly
            NSLog(@"%@",[error localizedDescription]);
        }
            break;
    
        case AVAssetImageGeneratorCancelled:{
           //using  accordingly
            NSLog(@"%@",[error localizedDescription]);
        }
            break;
    
        default:
            break;
       }
     };
    
     generator.maximumSize = size;
     [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];    
    }
    

上記では何も得られませんでした....まだ同じものを探しています。

4

2 に答える 2

1

このコードを試してください:

UIGraphicsBeginImageContext(CGSizeMake(1,1));
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:assetURL];
UIGraphicsEndImageContext();         
UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];

[player stop];
于 2013-06-27T11:39:22.567 に答える
1

ついに道が開けました、実際には、その記録されたビデオのURLを作成するための間違った方法を誤って配置しました

すべてが正常に機能していたので、urlWithString代わりに使用していました。fileURLWithPathfileURLWithPath

于 2013-06-27T12:18:06.683 に答える