首页 文章

iOS代码生成视频缩略图返回0字节[]

提问于
浏览
2

我正在使用CodenameOne创建一个应用程序,并且必须使用ios本机界面来生成一些视频缩略图 . 这是我在iOS中使用的代码:

-(NSData*)createThumbnailFromMp4:(NSString*)param{

     NSURL *mediaURL = [NSURL fileURLWithPath:param];
     AVAsset *asset = [AVAsset assetWithURL:mediaURL];
     CMTime duration = [asset duration];
     CMTime snapshot = CMTimeMake(duration.value / 2, duration.timescale);

     AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
     CGImageRef imageRef = [imageGenerator copyCGImageAtTime:snapshot actualTime:nil error:nil];
     UIImage *thumbnail = [UIImage imageWithCGImage:imageRef];
     CGImageRelease(imageRef);

     return UIImagePNGRepresentation(thumbnail);
}

传入的参数是视频的完整路径,但是当我调用它时我得到的全部是0长度字节[] . 这是来自CodenameOne的代码:

byte[] thumbnailImage = tg.createThumbnailFromMp4(FileSystemStorage.getInstance().getAppHomePath() + movePath);

其中movePath只是本地存储视频的文件名 .

3 回答

  • 0
    AVAsset *asset = [AVAsset assetWithURL:urlvideo];
     AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
     CMTime time = [asset duration];
     time.value = 1000 ;
     CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
     image1 = [UIImage imageWithCGImage:imageRef];
    
  • 0

    请尝试此代码

    -(UIImage*)createThumbnailFromMp4:(NSString*)param{
    
                 NSURL *mediaURL = [NSURL fileURLWithPath:param];
                AVAsset *asset = AVAsset *asset = [AVAsset assetWithURL:mediaURL];       
     AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc]initWithAsset:asset];
                    imageGenerator.appliesPreferredTrackTransform=TRUE;
                    CMTime time = CMTimeMake(1, 1);
                    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
                    UIImage *thumbnail = [UIImage imageWithCGImage:imageRef];
                    CGImageRelease(imageRef);
                    return thumbnail;
            }
    
  • 0

    替换线:

    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:snapshot actualTime:nil error:nil];
    

    NSError *error = nil;
    CGImageRef imageRef = [imageGenerator copyCGImageAtTime:snapshot actualTime:nil error:&error];
    if (error) {
       NSLog("ERROR: %@", error);
    }
    

    这可能有助于跟踪未创建图像的原因 .

相关问题