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

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

慢动作视频, 特殊处理

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")

}

})

}) }

相关文章
|
8月前
|
机器学习/深度学习 uml
Markdown编辑器用法保存自用
Markdown编辑器用法保存自用
101 0
|
存储 PHP 数据安全/隐私保护
Ueditor结合七牛云存储上传图片、附件和图片在线管理的实现和最新更新
最新下载地址: https://github.com/widuu/qiniu_ueditor_1.4.3 Ueditor七牛云存储版本 注意事项 老版本请查看 : https://github.com/widuu/qiniu_ueditor_1.
3128 0
|
6月前
|
前端开发 小程序
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
432 0
|
前端开发 JavaScript
uniapp上传图片至服务器,获得在线图片链接预览(实战)
uniapp上传图片至服务器,获得在线图片链接预览(实战)
456 0
|
JavaScript 前端开发
前端js上传照片实现可预览功能
前端js上传照片实现可预览功能
75 0
|
小程序
微信小程序如何实现多图上传及预览删除
微信小程序如何实现多图上传及预览删除
145 0
|
JavaScript 小程序 前端开发
微信小程序生成海报图片导出相册
小程序内通过静态模板和样式绘制 canvas ,导出图片,可用于生成分享图等场景
609 1
微信小程序生成海报图片导出相册
|
Java 数据库 数据安全/隐私保护
微信聊天记录导出为电脑txt文件教程
网上有一些工具也可以完成这个功能,但是基本都是付费的。手动操作的话,找了很多的博客,基本没有完全有效的。最终找到一篇很靠谱的教程:传送门,本文基本参考这篇进行整理。
593 0
微信聊天记录导出为电脑txt文件教程
|
JavaScript 前端开发
pdf.js插件使用记录,在线打开pdf
原文:pdf.js插件使用记录,在线打开pdf 天记录一个js库:pdf.js。主要是实现在线打开pdf功能。因为项目需求需要能在线查看pdf文档,所以就研究了一下这个控件。 有些人很好奇,在线打开pdf文档浏览器不是支持吗。
2537 0