2016-06-23 24 views
2

Ich versuche, eine einfache Aufgabe wie die Konvertierung einer UIImage in NSData, für AVPlayerItem, die mir zurückgegeben wird, wenn ich ein Video aus der PHImageManager auswählen. Was könnte ein Äquivalent des UIImagePNGRepresentation sein Video in Daten zu konvertieren:Convert AVPlayerItem in NSData

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

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

Während der UIImage so geht:

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

Haben Sie eine Lösung gefunden? – Aziz

+0

@Aziz naah habe ich nicht. Ich musste etwas anderes verwenden. –

+0

Ich habe eine Lösung gefunden, ich werde es posten, vielleicht braucht es jemand. – Aziz

Antwort

1

Die Lösung ist die URL aus dem AVPlayerItem Vermögenswert zu erhalten, dann erstellen NSData von dieser URL:

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); 
}]; 

und eine andere Art und Weise zu benutzen ist '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); 
    } 

}]; 
+0

Sie wieder raus ...? –