程序员必知:导出相册视频

简介: 程序员必知:导出相册视频

慢动作视频, 特殊处理

1, exportSession

let option = PHVideoRequestOptions()

option.isNetworkAccessAllowed = true

option.deliveryMode = .highQualityFormat

PHCachingImageManager.default().requestExportSession(forVideo: asset, options: option, exportPreset: AVAssetExportPresetHighestQuality) { (exportSession, info) in

guard let exportSession = exportSession else {

single(.error(KimPhotoHelperError.sourceNotFound))

return

}

exportSession.outputURL = videoPath

exportSession.outputFileType = .mp4

exportSession.exportAsynchronously {

switch exportSession.status {

case .completed:

single(.success((videoPath.relativePath, size)))

case .failed:

print(exportSession.error)

single(.error(KimPhotoHelperError.sourceNotFound))

default:

break

}

}

}//代码效果参考:http://www.ezhiqi.com/zx/art_6832.html

2, PHAssetResourceManager

let resourceManager = PHAssetResourceManager.default()

let option = PHAssetResourceRequestOptions()

option.isNetworkAccessAllowed = true

resourceManager.writeData(for: assetRescource, toFile: videoPath, options: option) { (error) in

guard let error = error else {

//single(.error(e))

exportSession(asset)

return

}

single(.success((videoPath.relativePath, size)))

}

3, 先 requestDatqa -> 再 writeData

let resourceManager = PHAssetResourceManager.default()

let option = PHAssetResourceRequestOptions()

option.isNetworkAccessAllowed = true

var videoData = Data()

resourceManager.requestData(for: assetRescource, options: option, dataReceivedHandler: { (data) in

videoData.append(data)

}) { (error) in

if let error = error {

print(error)

exportSession(asset)

// single(.error(KimPhotoHelperError.sourceNotFound))

} else {

do {

try videoData.write(to: videoPath)

} catch {

}

single(.success((videoPath.relativePath, size)))

}

}

4, 导出慢动作视频 AVCompostion 类型

func ConvertAvcompositionToAvasset(avComp: AVComposition, completion:@escaping (_ avasset: AVAsset) -> Void){

let exporter = AVAssetExportSession(asset: avComp, presetName: AVAssetExportPresetHighestQuality)

let randNum:Int = Int(arc4random())

//Generating Export Path

let exportPath: NSString = NSTemporaryDirectory().appendingFormat("(randNum)"+"video.mov") as NSString

let exportUrl: NSURL = NSURL.fileURL(withPath: exportPath as String) as NSURL

//SettingUp Export Path as URL

exporter?.outputURL = exportUrl as URL

exporter?.outputFileType = AVFileTypeQuickTimeMovie

exporter?.shouldOptimizeForNetworkUse = true

exporter?.exportAsynchronously(completionHandler: {() -> Void in

DispatchQueue.main.async(execute: {() -> Void in

if exporter?.status == .completed {

let URL: URL? = exporter?.outputURL

let Avasset:AVAsset = AVAsset(url: URL!)

completion(Avasset)

}

else if exporter?.status == .failed{

print("Failed")

}

})

}) }

目录
打赏
0
1
1
0
95
分享
相关文章
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
540 60
微信分享报错 wxlog:Error:fail to load Keychain status:-25300 解决办法
微信分享报错 wxlog:Error:fail to load Keychain status:-25300 解决办法
2960 0
iOS微信分享配置universal links步骤
iOS微信分享配置universal links步骤
1794 58
解决pycharm调用plt.show()后无图片显示问题
解决pycharm调用plt.show()后无图片显示问题
1884 0
一文彻底拿捏DevEco Studio的使用小技巧
本文介绍了DevEco Studio的安装与使用,包括其特性、常用快捷键、设置中文环境和文件注释模板等内容。DevEco Studio是华为为HarmonyOS开发者提供的集成开发环境(IDE),最新版本5.0.0增加了多项功能,如工程外模块代码支持、构建字节码har包等,极大提升了开发效率。通过简单步骤即可完成安装,并能轻松查阅组件API文档。跟随程序员Feri一起快速掌握鸿蒙开发!
826 78
|
11月前
|
Swift笔记:Swift中的扩展语法
Swift笔记:Swift中的扩展语法
255 1
C语言在嵌入式系统开发中的优化策略与代码实现
C语言在嵌入式系统开发中的优化策略与代码实现
229 1
【鸿蒙软件开发】ArkUI容器组件之Grid(网格布局)
【鸿蒙软件开发】ArkUI容器组件之Grid(网格布局)
1236 0
【鸿蒙软件开发】ArkUI容器组件之Grid(网格布局)
DSW、DLC、EAS
DSW、DLC、EAS 是分别表示 "分布式共享内存"、"数据加载与缓存"、"增强型自动调度"的缩写,是 tuemo 工具中常用的三种技术。 1. DSW 分布式共享内存(Distributed Shared Memory)
1132 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问