Swift 3 将数据转换为 AVAsset 或 PHAsset
Posted
技术标签:
【中文标题】Swift 3 将数据转换为 AVAsset 或 PHAsset【英文标题】:Swift 3 Convert Data to AVAsset or PHAsset 【发布时间】:2017-06-18 22:32:14 【问题描述】:我需要将 Data 对象转换为 AVAsset。
曾经我需要将 Realm 中的视频保存为 Data 对象。为了保存它,我将 AVAsset 转换为 Data。现在我需要将其转换回来并将视频保存到 cameraRoll。
也许你可以为这个问题提出一些其他的解决方案?)
这是我将 AVAsset 转换为 Data 的方法:
func convert(phAsset: PHAsset, completion: @escaping (_ data: Data?) -> Void)
PHCachingImageManager().requestAVAsset(forVideo: phAsset,
options: nil,
resultHandler: asset, _, _ in
guard let asset = asset else return
let exportSession = AVAssetExportSession(asset: asset,
presetName: AVAssetExportPresetHighestQuality)
let fileUrl: URL
guard let url = asset as? AVURLAsset else return
fileUrl = url.url
exportSession?.outputURL = fileUrl
exportSession?.outputFileType = AVFileTypeQuickTimeMovie
var data = Data()
exportSession?.exportAsynchronously
do
data = try Data(contentsOf: fileUrl)
completion(data)
catch return
)
【问题讨论】:
尝试将NSData
存储到磁盘,然后用AVAsset.init(url: diskURL)
检索它
@BadhanGanesh 我需要将其存储在 Realm 中,而不是磁盘上,以便在设备之间同步数据。
***.com/questions/28237412/…
【参考方案1】:
您不能直接将 Data 对象转换为 PHAsset。但是您可以将数据写入本地 url,然后从 url 创建资产。
斯威夫特 3:
func writeImage_VideoToLibrary(data: Data, fileDescription: String)
let date = Date()
self.createDirectory(name: "MyDataApp")
// write data to library camera roll
phphotoLibrary.shared().performChanges(
if fileDescription.contains("VIDEO")
// write video
let url = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("MyDataApp/video_\(date).mov")
try? data.write(to: url)
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
else
//write image
let url = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("MyDataApp/img_\(date).jpeg")
try? data.write(to: url)
PHAssetChangeRequest.creationRequestForAssetFromImage(atFileURL: url)
print(fileDescription)
) saved, err in
if err != nil
print(err.debugDescription)
【讨论】:
以上是关于Swift 3 将数据转换为 AVAsset 或 PHAsset的主要内容,如果未能解决你的问题,请参考以下文章
Swift 5 将 AVAsset 保存到 UserDefaults
在 Nativescript 应用程序中将 PHAsset/AVAsset 转换为 mp4 视频