PHAsset获得视频URL,遇到的一些问题

之前写过“PHAsset获得视频URL时,用requestAVAssetForVideo有时会得到AVComposition这个对象”这个博客http://blog.csdn.net/zhangqiaoge/article/details/78467724有介绍怎么去处理来获得url。

现在又发现一个新的方法,通过

[[PHImageManagerdefaultManager] requestAVAssetForVideo:phassetoptions:options resultHandler:^(AVAsset *_Nullable asset,AVAudioMix * _Nullable audioMix,NSDictionary * _Nullable info) {这个方法得到的info字典如下

po info

{

    PHImageFileSandboxExtensionTokenKey = "8f71358aa52f24bddc2fd536abff93d933825f5a;00000000;00000000;000000000000001b;com.apple.avasset.read-only;00000001;01000002;00000001005e20b6;/private/var/mobile/Media/DCIM/100APPLE/IMG_0601.MOV";

    PHImageResultDeliveredImageFormatKey = 20000;

    PHImageResultIsInCloudKey = 0;

    PHImageResultWantedImageFormatKey = 20002;

}

可以获得key为PHImageFileSandboxExtensionTokenKey的值,再对其处理如下

NSString * sandboxExtensionTokenKey = info[@"PHImageFileSandboxExtensionTokenKey"];

                        NSArray * arr = [sandboxExtensionTokenKeycomponentsSeparatedByString:@";"];

                        NSString * filePath = [arr[arr.count - 1]substringFromIndex:9];

这个filPath就是这个视频的地址,


注意⚠️ 现在又遇到这个问题,我想在这个方法的block之外用这个地址,但这时这个地址已经无效,只有在block之内有效,要想在block之外有效,必须在这个区域有个变量来保存这个方法得到的asset,这个地址才有效


在 Swift 中打开相册选择视频,可以使用 `UIImagePickerController` 来实现。 在用户选择视频之后,可以通过 `UIImagePickerControllerDelegate` 中的 `imagePickerController(_:didFinishPickingMediaWithInfo:)` 方法获取视频的信息。其中包含了视频URL,可以通过 `info[.mediaURL]` 来获取。 不过需要注意的是,获取到的 URL 并不一定是准确的地址,可能是一个相册中的占位符地址。如果需要获取准确的地址,可以使用 `PHAsset` 来获取。 具体代码示例如下: ```swift import Photos func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { guard let mediaType = info[.mediaType] as? String, mediaType == kUTTypeMovie as String, let url = info[.mediaURL] as? URL else { return } // 获取 PHAsset let fetchResult = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil) if let asset = fetchResult.firstObject { PHImageManager.default().requestAVAsset(forVideo: asset, options: nil) { (avAsset, _, _) in if let avAsset = avAsset as? AVURLAsset { // 获取准确的地址 let videoUrl = avAsset.url // 处理视频地址 // ... } } } } ``` 在这个示例中,首先获取到了用户选择的视频URL,然后通过 `PHAsset.fetchAssets(withALAssetURLs:options:)` 方法获取了 PHAsset 对象。接着,使用 `PHImageManager.default().requestAVAsset(forVideo:options:completionHandler:)` 方法获取 AVAsset 对象,并将其转换为 AVURLAsset 对象,最终获取到了准确的视频地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值