【问题标题】:Using PHImageManager in swift (requestAVAssetForVideo)快速使用 PHImageManager (requestAVAssetForVideo)
【发布时间】:2016-03-25 16:03:12
【问题描述】:

我正在使用objective-c 图像选择器图像选择器来选择时间间隔,但我正在快速完成它。我只能访问objective-c 代码,所以我使用了objective-c 到swift 转换器,但出现了错误。

func qb_imagePickerController(imagePickerController: QBImagePickerController, didFinishPickingAssets assets: [AnyObject]) {
    for asset in assets as! [PHAsset] {
        PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(avAsset: AVAsset, audioMix: AVAudioMix, info: [NSObject : AnyObject]) -> Void in
            var url: NSURL = NSURL(string: "\(asset)")!
            var avAsset: AVURLAsset = AVURLAsset(URL: url, options: nil)
            var playerItem: AVPlayerItem = AVPlayerItem(asset: avAsset)
            var videoPlayer: AVPlayer = AVPlayer(playerItem: playerItem)
            videoPlayer.play()
        })
    }
    self.dismissViewControllerAnimated(true, completion: { _ in })
}

这是我目前拥有的代码。我收到的错误如下。

无法将类型 '(AVAsset, AVAudioMix, [NSObject : AnyObject]) -> Void' 的值转换为预期的参数类型 '(AVAsset?, AVAudioMix?, [NSObject : AnyObject]?) -> Void'

【问题讨论】:

    标签: ios swift phasset timelapse


    【解决方案1】:

    查看requestAVAssetForVideo:options:resultHandler: 的文档,您拥有的resultHandler 与所需的签名不匹配。

    改变这一行:

    PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(avAsset: AVAsset, audioMix: AVAudioMix, info: [NSObject : AnyObject]) -> Void in
    

    到:

    PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(avAsset: AVAsset?, audioMix: AVAudioMix?, info: [NSObject : AnyObject]?) -> Void in
    

    注意在预期位置添加?

    【讨论】:

    • 很高兴我能帮上忙。如果它解决了您的问题,请不要忘记接受答案。
    • 我正在使用您的代码从照片库中获取视频资产并使用 AVPlayerViewController 播放它。视频很好,但没有音频。你有什么想法吗?
    【解决方案2】:

    从 QBImagePickerController 中的 didFinishPickingAssets 从 Swift 4.2 中的 PHAsset 获取视频 URL

    let imagePicker = QBImagePickerController()
    imagePicker.delegate = self
    imagePicker.numberOfColumnsInPortrait = 2
    imagePicker.maximumNumberOfSelection = 2
    imagePicker.allowsMultipleSelection = true
    imagePicker.mediaType = .video
    
    self.present(imagePicker, animated: true, completion: nil)
    
    func qb_imagePickerController(_ imagePickerController: QBImagePickerController!, didFinishPickingAssets assets: [Any]!) {
         for asset in assets
         {
            PHCachingImageManager().requestAVAsset(forVideo: asset as! PHAsset, options: nil, resultHandler: {(asset, audioMix, info) -> Void in
            if asset != nil {
                let avasset = asset as! AVURLAsset
                let urlVideo = avasset.url
                yourarray.add(urlVideo as URL)
            }
    
           })
    
        }
    
    
       imagePickerController.dismiss(animated: true) {
           //You can access video urls here
           print("Total Videos:\(yourarray.count)")
       }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多