将AVPlayerItem转换为NSData

3

我正在尝试完成像将UIImage转换为NSData这样的简单任务,对于从PHImageManager选择的视频返回给我的AVPlayerItem而言。有没有一种等效于UIImagePNGRepresentation的方法可以将视频转换为数据:

PHVideoRequestOptions *videoRequestOptions = [[PHVideoRequestOptions alloc] init];
videoRequestOptions.deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic;
videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal;

[[PHImageManager defaultManager] requestPlayerItemForVideo:asset options:videoRequestOptions resultHandler:^(AVPlayerItem *item, NSDictionary *info)
            {
                //?
            }];

UIImage 是这样的:

[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFit options:imageRequestOptions resultHandler:^(UIImage *result, NSDictionary *info)
{
     NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(result)]; //<==THIS
}

你找到解决方案了吗? - Aziz
@Aziz 不,我没有。我不得不使用其他东西。 - Mohsin Khubaib Ahmed
我找到了一个解决方案,我会把它发布出来,也许有人会需要它。 - Aziz
1个回答

2
解决方案是从AVPlayerItem资产获取URL,然后从该URL创建NSData:
PHAsset *asset = ...
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
[[PHImageManager defaultManager] requestPlayerItemForVideo:asset options:options resultHandler:^(AVPlayerItem * _Nullable playerItem, NSDictionary * _Nullable info) {
                NSURL *fileURL = [(AVURLAsset *)playerItem.asset URL];
                NSData *videoData = [NSData dataWithContentsOfURL:fileURL];
                NSLog(@"tmpData Size: %lu",tmpData.length);
}];

另一种方法是使用'requestAVAssetForVideo:asset'...
PHFetchOptions *fetchOption = [[PHFetchOptions alloc]init];
if ([fetchOption respondsToSelector:@selector(setFetchLimit:)]) {
    [fetchOption setFetchLimit:1];
}
PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[@"<Video-localIdentifier>"] options:fetchOption].firstObject;
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc]init];
options.version = PHVideoRequestOptionsVersionOriginal;
options.deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic;

[[PHImageManager defaultManager] requestAVAssetForVideo:asset
                                                options:options
                                          resultHandler:
 ^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
     AVURLAsset *urlAsset = (AVURLAsset *)asset;
     NSData *videoData = [NSData dataWithContentsOfURL:urlAsset.URL];

     if (videoData) {
         NSLog(@"videoData Size: %lu", videoData.length);
     }

 }];

把它们拿出来...? - James Bush

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接