首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取PHAsset的url

获取PHAsset的url
EN

Stack Overflow用户
提问于 2015-11-22 18:10:40
回答 6查看 23.6K关注 0票数 6

我正在使用一个自定义的图像选择器来选择一个时间间隔,我想要得到的时间间隔的网址,这样我就可以播放的时间间隔。

代码语言:javascript
复制
- (void)qb_imagePickerController:(QBImagePickerController *)imagePickerController didFinishPickingAssets:(NSArray *)assets {
for (PHAsset *asset in assets) {



    NSURL *url = [NSURL URLWithString: assetURLgoesHere];
    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:avAsset];
    AVPlayer *videoPlayer = [AVPlayer playerWithPlayerItem:playerItem];


    [videoPlayer play];

}

[self dismissViewControllerAnimated:YES completion:NULL];
}

这是我目前拥有的,但我需要得到资产的网址。

我通常使用快速,但这个定制的图像选择器是用objective编写的。所以我是个有点客观的人

更新代码

代码语言:javascript
复制
- (void)qb_imagePickerController:(QBImagePickerController *)imagePickerController didFinishPickingAssets:(NSArray *)assets {
for (PHAsset *asset in assets) {

    - (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))resultHandler

    NSURL *url = [NSURL URLWithString: asset];
    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:avAsset];
    AVPlayer *videoPlayer = [AVPlayer playerWithPlayerItem:playerItem];


    [videoPlayer play];

}

[self dismissViewControllerAnimated:YES completion:NULL];
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-11-22 18:30:18

您应该使用PHImageManager

使用类的sharedInstance并使用您的PHAsset、选项和完成块处理程序调用此方法:

代码语言:javascript
复制
- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))resultHandler

处理程序将给您一个应该用于AVAssetAVPlayerItem,而不是URL。

示例:

代码语言:javascript
复制
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) {
  // Use the AVAsset avAsset
  AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:avAsset];
  AVPlayer *videoPlayer = [AVPlayer playerWithPlayerItem:playerItem];
}];

小心它可能是异步的,这将进一步干扰您的应用程序流。

票数 8
EN

Stack Overflow用户

发布于 2016-04-16 08:19:55

顺便说一句,如果您想要实际的URL --也就是说,UIImagePickerController创建时传递给AVPlayerItem的同一个URL,以及与AVAssetReader/Writer一起使用的URL相同的URL--那么就执行以下操作:

代码语言:javascript
复制
[[PHImageManager defaultManager] requestAVAssetForVideo:phAsset options:nil resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) {
    NSURL *url = (NSURL *)[[(AVURLAsset *)avAsset URL] fileReferenceURL];
    NSLog(@"url = %@", [url absoluteString]);
    NSLog(@"url = %@", [url relativePath]);
 }];

虽然phAsset是PHAsset对象,avAsset是由PHImageManager生成的结果AVAsset对象,但是从上面的代码到控制台的输出将产生,例如:

代码语言:javascript
复制
2016-04-16 01:15:40.155 ChromaEpsilon[3423:933358] url = file:///.file/id=16777218.8262005
2016-04-16 01:15:40.155 ChromaEpsilon[3423:933358] url = /private/var/mobile/Media/DCIM/108APPLE/IMG_8421.MOV
票数 9
EN

Stack Overflow用户

发布于 2016-12-16 06:32:43

对于SWIFT3.0,您可以从PHAsset对象获得用于图像和视频的字符串url

代码语言:javascript
复制
asset.requestContentEditingInput(with: PHContentEditingInputRequestOptions(), completionHandler: { (contentEditingInput, dictInfo) in

    if asset.mediaType == .image
    {
      if let strURL = contentEditingInput?.fullSizeImageURL?.absoluteString
      {
         print("IMAGE URL: ", strURL)
      }
    }
    else
    {
      if let strURL = (contentEditingInput!.avAsset as? AVURLAsset)?.url.absoluteString
      {
         print("VIDEO URL: ", strURL)
      }
    }
  })
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33858270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档