gpt4 book ai didi

swift 无法将 .m3u8 文件保存到图库

转载 作者:行者123 更新时间:2023-11-28 07:32:32 26 4
gpt4 key购买 nike

我使用下面的方法下载我的视频并将其保存到图库,使用 .mp4 可以正常工作,但是当更改为 .m3u8 时总是失败。

func downloadVideoLinkAndCreateAsset(_ videoLink: String,_ fileName : String) {

// use guard to make sure you have a valid url
guard let videoURL = URL(string: videoLink) else { return }

guard let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let fileNameToSave = "CiviX_HistoryVideo_\(fileName)"
// check if the file already exist at the destination folder if you don't want to download it twice
if !FileManager.default.fileExists(atPath: documentsDirectoryURL.appendingPathComponent(fileNameToSave).path) {

// set up your download task
URLSession.shared.downloadTask(with: videoURL) { (location, response, error) -> Void in

// use guard to unwrap your optional url
guard let location = location else { return }

// create a deatination url with the server response suggested file name
let destinationURL = documentsDirectoryURL.appendingPathComponent(fileNameToSave)
print("destinationURL: \(destinationURL)")
do {

try FileManager.default.moveItem(at: location, to: destinationURL)

PHPhotoLibrary.requestAuthorization({ (authorizationStatus: PHAuthorizationStatus) -> Void in

// check if user authorized access photos for your app
if authorizationStatus == .authorized {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: destinationURL)}) { completed, error in
if completed {
print("Video asset created")
} else {
print("Video asset create failed: \(error?.localizedDescription)")
}
}
}
})

} catch { print("file manager error: \(error.localizedDescription)") }

}.resume()

} else {
print("File already exists at destination url")
}

}

然后这里是调用的方法

let urlString = response.replacingOccurrences(of: "\"", with: "") -> my m3u8 URL

let videoImageUrl = "https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4" -> always success

//TEST MP4 file -> ALWAYS SUCCESS
self.downloadVideoLinkAndCreateAsset(videoImageUrl, "big_buck_bunny_720p_1mb.mp4")

//TEST M3U8 FIlE -> FAIL
self.downloadVideoLinkAndCreateAsset(urlString, history.fileName!) -> fileName format is 'abc.mp4'

MP4 的日志结果


destinationURL: file:///Users/thehe/Library/Developer/CoreSimulator/Devices/05C6DE76-6609-4E4A-B00D-2CE3622D2EF8/data/Containers/Data/Application/90994674-6C07-47F9-A880-D1A80CDA0C27/文档/CiviX_HistoryVideo_big_buck_bunny_720p_1mb.mp4

-> 视频 Assets 创建


M3U8 的日志结果


self.downloadVideoLinkAndCreateAsset(urlString, history.fileName!)

destinationURL: file:///Users/thehe/Library/Developer/CoreSimulator/Devices/05C6DE76-6609-4E4A-B00D-2CE3622D2EF8/data/Containers/Data/Application/DA6ABC38-4E0A-44C7-9C56-8B65F1DC0D4D/文档/CiviX_HistoryVideo_20-1-2019_3h18m32s.mp4

-> 视频 Assets 创建失败:可选(“操作无法完成。(Cocoa 错误 -1。)”)


我也尝试使用 .m3u8 扩展名保存,但仍然无法正常工作


self.downloadVideoLinkAndCreateAsset(urlString, "TEST_M3U8_FILE.m3u8")

destinationURL: file:///Users/thehe/Library/Developer/CoreSimulator/Devices/05C6DE76-6609-4E4A-B00D-2CE3622D2EF8/data/Containers/Data/Application/9B42A55B-4E3E-4A20-A0DC-6E1ED22471A2/文档/CiviX_HistoryVideo_TEST_M3U8_FILE.m3u8

-> 视频 Assets 创建失败:可选(“操作无法完成。(Cocoa 错误 -1。)”)


最佳答案

M3U8 是音频/视频播放列表文件,不能保存到图库。

关于swift 无法将 .m3u8 文件保存到图库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com