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

时间:2016-07-04 04:47:39

标签: ios objective-c codenameone

我正在使用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 :(得分: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];

答案 1 :(得分: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;
        }

答案 2 :(得分: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);
}

这可能有助于追踪未创建图像的原因。