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

2023-12-02

我使用下面的方法下载我的视频并将其保存到图库,使用 .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 的日志结果


目的地URL:文件:///Users/thehe/Library/Developer/CoreSimulator/Devices/05C6DE76-6609-4E4A-B00D-2CE3622D2EF8/data/Containers/Data/Application/90994674-6C07-47F9-A880-D1A80CDA0C27/Documents/CiviX_HistoryVideo_big_b uck_bunny_720p_1mb .mp4

-> 创建视频资源


M3U8 的日志结果


self.downloadVideoLinkAndCreateAsset(urlString,history.fileName!)

目的地URL:文件:///Users/thehe/Library/Developer/CoreSimulator/Devices/05C6DE76-6609-4E4A-B00D-2CE3622D2EF8/data/Containers/Data/Application/DA6ABC38-4E0A-44C7-9C56-8B65F1DC0D4D/Documents/CiviX_HistoryVideo_20 -1-2019_3小时18分32秒.mp4

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


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


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

目的地URL:文件:///Users/thehe/Library/Developer/CoreSimulator/Devices/05C6DE76-6609-4E4A-B00D-2CE3622D2EF8/data/Containers/Data/Application/9B42A55B-4E3E-4A20-A0DC-6E1ED22471A2/Documents/CiviX_HistoryVideo_TEST_M 3U8_文件.m3u8

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



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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swift 无法将 .m3u8 文件保存到图库 的相关文章

随机推荐

  • 使用 javascript 和 PHP 生成相同的 MD5

    我正在尝试构建一个需要比较任何文件的 MD5 哈希值的应用程序 由于具体问题 上传前 客户端必须生成MD5 上传后应用程序需要在服务器端检查MD5 我的第一个方法是在客户端使用 JavaScript File API 和FileReader
  • Google App Engine 数据存储区,在更新几秒钟之前返回

    所以我需要在数据存储中更新值 我正在使用事务这样做 如下所示 提交更新后 我将结果发送回客户端 让他们知道更新已完成 然后 客户端发送另一个请求以获取更新的项目列表 据我所知 所有代码都正确执行 没有抛出任何错误 最终我确实得到了按预期显示
  • 如何拆分字符串而不在数组中插入空字符串

    假设存在匹配项 我在使用正则表达式从字符串中分割字符时遇到问题 我想从字符串的第一部分中分离出 m 或 f 字符 假设下一个字符是一个或多个数字 后跟可选的空格字符 后跟我拥有的数组中的字符串 I tried 2 4 0 006 gt MY
  • 写入堆内存时调用系统调用

    我知道 malloc sbrk 是调用的系统调用 同样 当我写入 malloed 内存 堆内存 时调用的系统调用是什么 int main 10 byte of heap memory allocated char ptr malloc 5
  • 使用 Javascript 更改元素的位置

    这应该会在每次循环时将段落 带有 id Text 的位置更改为更向右 但它不起作用 我不知道如何解决它 所以如果有人可以帮助我 我会很高兴 先感谢您 var x 0 d style position absolute function my
  • java中如何获取屏幕分辨率? [复制]

    这个问题在这里已经有答案了 可能的重复 屏幕分辨率java Hi Java中如何获取屏幕分辨率 您可以使用 AWT 工具包 Dimension screenSize Toolkit getDefaultToolkit getScreenSi
  • 尝试在 ScriptDb 中存储数组时出错

    我有一个由脚本创建的对象数组 我尝试将该数组复制到一个新数组中 然后使用以下函数将其存储在 scriptDb 中 function copyAndStore currentArray var db ScriptDb getMyDb var
  • 如何使用 iOS SDK 覆盖其他应用程序

    Android 拥有一项权限 允许应用程序通过浮动内容 覆盖其他应用程序 使用 SYSTEM ALERT WINDOW允许 iOS 有类似的东西吗 不 这是不可能的 用户只能与当前位于前台的任何应用程序进行交互
  • ElasticSearch NEST 5.6.1 单元测试的查询

    我向弹性搜索编写了一堆查询 我想为它们编写一个单元测试 使用这篇文章最小起订量弹性连接我能够进行一般性的嘲笑 但是当我尝试查看从查询生成的 Json 时 我没有设法以任何方式获取它 我尝试关注这篇文章弹性查询最小起订量 但它仅与旧版本的 N
  • AlarmManager 会在断电时删除所有计划吗?

    我已经在特定时间设置了闹钟 如果手机关机了闹钟会丢失吗 我已关闭手机 然后再次启动 但闹钟未在指定时间触发 PendingIntent pendingIntent PendingIntent getBroadcast Global a ge
  • 我应该使用 data.frame 还是矩阵?

    什么时候应该使用data frame 什么时候最好使用matrix 两者都以矩形格式保存数据 因此有时会不清楚 对于何时使用哪种数据类型有什么通用的经验法则吗 部分答案已包含在您的问题中 如果列 变量 预计为不同类型 数字 字符 逻辑等 则
  • Pandas:添加包含其他列计算的列

    我有一个带有测量值的 csv YY MO DD HH MI SS SSS x y 2015 12 07 20 51 06 608 2 4 2015 12 07 20 51 07 609 3 4 我想添加另一列 其中 x 2 y 2 之和的平
  • 检查 C# 中的 WMI 命名空间是否存在

    我想检查某台机器上是否安装了某个功能 我有一个 powershell 代码来检查这一点 现在我想从 net 代码中检查这一点 我可以看到在 cmdlet 中 代码检查是否有invalid namespace error 在网上搜索时 我发现
  • Apache Kafka 和 JMS 之间的连接

    我想知道 Apache Kafka 可以通信并将消息发送到 JMS 吗 我可以在它们之间建立连接吗 例如 我在我的系统中使用 JMS 它应该将消息发送到使用 Kafka 的其他系统 回答有点晚了 但如果我正确理解了要求 如果要求是同步消息传
  • MQ8 + JDk8 的授权错误

    当使用 JMS 示例代码时 放置在应用程序中 使用 MQ8 JDk8 时出现低于授权错误 MQException received while attempting reconnect Reason Code 2035 Exception
  • 有没有一种方法可以使用一个选择来计算 MySQL 中的时间差

    我有一个包含以下内容的表 name type id INT date1 DATETIME date2 DATETIME 我需要计算 date2 和 date1 之间的差异 这可以使用TIMEDIFFMySQL 中的函数 但是 有没有一种方法
  • 表单中的第一个参数不能包含 nil 或为空 Hartl's Rails 4 Tutorial

    我正在学习 Michael Hartl 的 Rails 教程 并且在第 7 3 3 节中遇到了问题 我收到此错误消息 ArgumentError in Users new Showing Users Anuraag rails projec
  • auto&& 变量不是右值引用

    为什么 auto 不是右值引用 Widget var1 Widget rvalue reference auto var2 var1 var2 not rvalue reference 以下是右值参考示例 void f Widget par
  • 如何在.NET Core类库中使用System.Windows.Forms

    我创建了 NET Core 类库并尝试针对 net40 框架构建它 我想使用 System Windows Forms 程序集中的 Clipboard 类 我怎样才能做到这一点 我的project json 文件 version 1 0 0
  • swift 无法将 .m3u8 文件保存到图库

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