微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从照片库中选择多个视频时,iOS 应用程序崩溃 - 内存警告

如何解决从照片库中选择多个视频时,iOS 应用程序崩溃 - 内存警告

由于内存警告,当我从照片库中选择多个视频(每个 1 分钟以上)时,我的应用程序崩溃。我正在尝试压缩视频,但尽管压缩代码工作正常,但仍然存在同样的问题。我希望我的应用程序一次选择 5 个视频并在聊天中发送它们。 Whatsapp 允许用户选择 30 个视频并在聊天中发送它们,但我的应用程序因仅在 3 个视频后出现内存问题而崩溃。 我正在使用“AssetsPickerViewController”库进行多个图片/视频选择。

func assetsPicker(controller: AssetsPickerViewController,selected assets: [PHAsset]) {
    self.dismiss(animated: true,completion: nil)
    
    var isImages = false
    var mediaData: [Data] = []
    let imageManager = PHCachingImageManager.default()
    dispatchQueue.main.async {
        self.appDelegate.helper.showHUD(withMessage: "Preparing media",withObject: self)
    }
    autoreleasepool {
        for selectedAsset in assets {
            if selectedAsset.mediaType == .image {
                isImages = true
                let option = PHImageRequestOptions()
                option.isSynchronous = true
                option.isNetworkAccessAllowed = true
                
                imageManager.requestimageData(for: selectedAsset,options: option) { (assetData,assetDataUTI,assetorientation,assetInfo) in
                    if let data = assetData {
                        if let image = UIImage(data: data)?.upOrientation(),let finalData = image.jpegData(compressionQuality: 0.5) {
                            if let newData = ImageHelper.removeExifData(data: finalData as NSData) {
                                mediaData.append(newData as Data)
                                self.checkFileStatus(mediaCount: mediaData.count,assetsCount: assets.count,data: mediaData,isImages: isImages)
                            } else {
                                mediaData.append(finalData)
                                self.checkFileStatus(mediaCount: mediaData.count,isImages: isImages)
                            }
                        } else {
                            mediaData.append(data)
                            self.checkFileStatus(mediaCount: mediaData.count,isImages: isImages)
                        }
                    }
                }
            } else if selectedAsset.mediaType == .video {
                let options: PHVideoRequestOptions = PHVideoRequestOptions()
                options.isNetworkAccessAllowed = true
                options.deliveryMode = .fastFormat
                self.convertVideo(phAsset: selectedAsset) { (data) in
                    if let finalData = data {
                        mediaData.append(finalData)
                        self.checkFileStatus(mediaCount: mediaData.count,isImages: isImages)
                    } else {
                        
                    }
                    
                }
            }
        }
    }
}

func compressVideo(inputURL: URL,outputURL: URL,handler:@escaping (_ exportSession: AVAssetExportSession?)-> Void) {
   let urlAsset = AVURLAsset(url: inputURL,options: nil)
   guard let exportSession = AVAssetExportSession(asset: urlAsset,presetName: AVAssetExportPresetMediumQuality) else {
       handler(nil)

       return
   }
   exportSession.outputURL = outputURL
   exportSession.outputFileType = AVFileType.mp4
   exportSession.shouldOptimizeforNetworkUse = true
   exportSession.exportAsynchronously { () -> Void in
       handler(exportSession)
   }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。