Els*_*mak 6 nsdata ios avasset swift avplayeritem
有没有办法将数据转换为 AVAsset/AVURLAsset 或更好的 AVPlayerItem?我找到了一个将数据转换为 PHAsset 的答案,需要先将其保存到桌面。有没有更好的办法?
由于我还没有找到一种没有临时文件的方法,根据 Elsammak 的示例,这里有一个小帮助程序类,负责删除临时文件(TemporaryMediaFile只要您使用AVAsset,临时文件就会保留在周围)当对象被释放时被删除,或者您可以.deleteFile()手动调用它):
import Foundation
import AVKit
class TemporaryMediaFile {
var url: URL?
init(withData: Data) {
let directory = FileManager.default.temporaryDirectory
let fileName = "\(NSUUID().uuidString).mov"
let url = directory.appendingPathComponent(fileName)
do {
try withData.write(to: url)
self.url = url
} catch {
print("Error creating temporary file: \(error)")
}
}
public var avAsset: AVAsset? {
if let url = self.url {
return AVAsset(url: url)
}
return nil
}
public func deleteFile() {
if let url = self.url {
do {
try FileManager.default.removeItem(at: url)
self.url = nil
} catch {
print("Error deleting temporary file: \(error)")
}
}
}
deinit {
self.deleteFile()
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
let data = Data(bytes: ..., count: ...)
let tempFile = TemporaryMediaFile(withData: data)
if let asset = tempFile.avAsset {
self.player = AVPlayer(playerItem: AVPlayerItem(asset: asset))
}
// ..keep "tempFile" around while it's playing..
tempFile.deleteFile()
Run Code Online (Sandbox Code Playgroud)
我成功做到了,这里是为任何感兴趣的人提供的。
extension Data {
func getAVAsset() -> AVAsset {
let directory = NSTemporaryDirectory()
let fileName = "\(NSUUID().uuidString).mov"
let fullURL = NSURL.fileURL(withPathComponents: [directory, fileName])
try! self.write(to: fullURL!)
let asset = AVAsset(url: fullURL!)
return asset
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2962 次 |
| 最近记录: |