我正在使用一个自定义的图像选择器来选择一个时间间隔,我想要得到的时间间隔的网址,这样我就可以播放的时间间隔。
- (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编写的。所以我是个有点客观的人
更新代码
- (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];
}发布于 2015-11-22 18:30:18
您应该使用PHImageManager。
使用类的sharedInstance并使用您的PHAsset、选项和完成块处理程序调用此方法:
- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))resultHandler处理程序将给您一个应该用于AVAsset的AVPlayerItem,而不是URL。
示例:
[[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];
}];小心它可能是异步的,这将进一步干扰您的应用程序流。
发布于 2016-04-16 08:19:55
顺便说一句,如果您想要实际的URL --也就是说,UIImagePickerController创建时传递给AVPlayerItem的同一个URL,以及与AVAssetReader/Writer一起使用的URL相同的URL--那么就执行以下操作:
[[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对象,但是从上面的代码到控制台的输出将产生,例如:
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发布于 2016-12-16 06:32:43
对于SWIFT3.0,您可以从PHAsset对象获得用于图像和视频的字符串url
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)
}
}
})https://stackoverflow.com/questions/33858270
复制相似问题