Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Swift:从url保存视频数据时出错

Swift:从url保存视频数据时出错
EN

Stack Overflow用户
提问于 2020-11-01 02:30:50
回答 1查看 306关注 0票数 1

我有以下保存录制视频的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func saveVideo() -> Void {
        guard let url = self.videoUrl else {
            Logger.shared.log(.video, .error, "error video url invalid")
            return
        }
        
        let homeDirectory = URL.init(fileURLWithPath: NSHomeDirectory(), isDirectory: true)
        let fileUrl = homeDirectory.appendingPathComponent(self.adId.toString()).appendingPathComponent("video-clip").appendingPathComponent(UUID.init().uuidString, isDirectory: false).appendingPathExtension("mov")
        
        Logger.shared.log(.video, .debug, "saving video to: \(fileUrl)")
        
        self.savedVideoUrl = fileUrl
        
        do {
            let data = try Data(contentsOf: url)
            try data.write(to: fileUrl, options: .atomicWrite)
        } catch {
            Logger.shared.log(.video, .error, "error saving video: \(error.localizedDescription)")
        }
        
    }

在这里,self.videoUrl是摄像机录制的视频的url,由委托方法func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])初始化。

问题是,当saveVideo()方法执行时,它会给出一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[878     ] 13:22:16.045 | video | Main thread | error saving video: The folder “4A601A28-C4EB-405E-8110-6D01965D5920.mov” doesn’t exist.

我不知道这个代码有什么问题。如果文件不存在,那么我们如何必须先创建文件,然后将数据写入其中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-01 09:23:08

好吧,我几天前有个类似的任务。下载视频,不管网址来源(本地或远程),然后保存在本地)。

我用你的功能做了个实验。

参见github repo,附带工作示例并将修复应用于函数 https://github.com/glennposadas/AVFoundation-SaveLocal

您所做的错误是为新文件提供URL路径的方式。

编辑:我认为您需要首先创建您的文件夹路径。我的fileUrl工作是因为路径是存在的。

这样,它就能工作(.mp4或.mov,不管是哪种方式):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let fileUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
            .first!
            .appendingPathComponent("\(UUID.init().uuidString).mp4")

它有一个路径(如果要打印的话):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/Users/myusername/Library/Developer/CoreSimulator/Devices/812428A5-0893-43BE-B343-B23E9F13D4AA/data/Containers/Data/Application/E278E093-BE29-410B-9C5D-810BD0F968F8/Documents/F227C8B5-5D8D-42B0-8205-3ADAD0DD38F5.mp4

同时,您的fileUrl:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    let homeDirectory = URL.init(fileURLWithPath: NSHomeDirectory(), isDirectory: true)
    let fileUrl = homeDirectory
        .appendingPathComponent("someId")
        .appendingPathComponent("video-clip")
        .appendingPathComponent(UUID.init().uuidString, isDirectory: false)
        .appendingPathExtension("mov")

给出路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/Users/myusername/Library/Developer/CoreSimulator/Devices/812428A5-0893-43BE-B343-B23E9F13D4AA/data/Containers/Data/Application/570D3CFA-3C44-41A5-A642-C79E5590D16E/someId/video-clip/5B1C9C98-C9EA-40D2-805C-B326466837E6.mov

编辑:要解决每次构建项目时文档中缺少文件的问题,请参阅上面提供的repo中的更改。我添加了一个修复程序,用于从文档文件夹检索视频文件。

因此,基本上您应该如何检索文件,只保存fileName,因为构建的每一次运行都会产生不同的filePath

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64630868

复制
相关文章
为什么Handler会导致内存泄漏?
最近在思考关于内存泄露的问题,进而想到了关于我们最常见和熟知的Handler在Activity内导致的内存泄漏的问题,这个问题相信作为开发都是很熟悉的,但是这背后更多的细节和导致泄漏的不同的情况,可能很多人就没有那么了解和清楚了,因此这次和大家分享一下什么情况下会导致内存泄漏,以及内存泄漏背后的故事。
没关系再继续努力
2021/11/22
1.3K0
360导致内存泄漏
360安全卫士导致内存泄漏,这点肯定,已得到360技术人员确认。其他安全软件是否会导致,未验证,maybe,只有你自己亲测一下了。
Windows技术交流
2022/03/01
3.1K1
关于presenter一直持有Activity对象导致的内存泄漏问题
public abstract class BasePresenter<T> { /** * 当内存不足释放内存 */ protected WeakReference<T> mViewRef; // view 的弱引用 /** * bind p with v * @param view */ public void attachView(T view){ mViewRef = new WeakReferenc
用户4458175
2020/02/12
1.4K0
ThreadLocal导致内存泄漏排查小记
公司sso域名变动,所有涉及的产品都要修改相关的配置。配置修改好之后,运行期间发现业务系统不稳定,出现了很多json解析异常。但是随着sso那边问题得到修改,我们自己的产品也逐渐稳定起来,但查看日志发现多条内存泄露的日志,于是本着学习的心态,对具体的原因进行了粗略的分析,最终得出的结论是异常导致threadLocal.remove()方法没有执行,最后内存泄漏了,以下是本人定位问题的过程。
写一点笔记
2022/08/11
9550
ThreadLocal导致内存泄漏排查小记
ThreadLocal真的会造成内存泄漏吗?
ThreadLoca在并发场景中,应用非常多。前几天有位小伙伴问我一个问题,说ThreadLocal是不是真的会造成内存泄漏?今天给大家做一个分享,个人见解,仅供参考。如果大家有其他见解可以在评论区讨论。
Tom弹架构
2022/08/22
6280
ThreadLocal真的会造成内存泄漏吗?
对象数组的内存图解
对象数组的概述和案例(掌握) (1)对象数组的概述     数组既可以存储基本数据类型,也可以存储引用类型。它存储引用类型的时候的数组就叫对象数组。 (2)对象数组的案例     我有5个学生,请把这个5个学生的信息存储到数组中,并遍历学生数组,获取得到每一个学生的信息。
黑泽君
2018/10/12
1.7K0
动态/静态数组内存布局
上一节 简单介绍了结构体作为函数参数和返回值的情况。本文准备介绍一下数组的内存布局,即静态数组/动态数组和一维数组/二维数组,顺便介绍一下0长度数组的妙用。
chinchao.xyz
2022/04/25
7740
动态/静态数组内存布局
笔记——安卓优化(十八)
一、优化 1.布局优化:尽量减少布局文件层级嵌套,由于RelativeLayout会onMeasure两次,减慢绘制时间,所以,简单布局使用LinearLayout,复杂的用RelativeLayout。使用include标签,merage标签,ViewStub控件加大布局控件的复用率。 2.绘制优化:尽量避免在onDraw方法内做大量的操作。比如不要创建新的局部对象,不要做耗时操作。 3.内存泄漏优化:非静态内部类默认持有外部引用,静态内部类默认不持有外部引用;单例模式导致的内存泄漏,单例的生命周期与application保持一致,由于创建单例时的activity无法被及时释放;属性动画导致的,无限循环动画没有在onDestroy中终止和释放,应该调用animator.cancle()停止动画。 内存泄漏与解决总结
木溪bo
2019/07/26
4730
笔记——安卓优化(十八)
2021年Android面试题及答案收集(不断更新中)
如何招聘人,搜集了一些知识点。如何做好应聘准备,也收集了一些主要知识点,供你参考。
全栈程序员站长
2022/07/28
9070
Android中导致内存泄漏的竟然是它----Dialog
一. 内存泄漏的 Bug 猛增 最近在 App 进行 mokey 测试的时候检测到一些内存泄漏问题。在前天的测试中,楼主一瞬间收到了4个这样的 Bug 单,瞬间心理无比纠结,真有千万只羊驼向我奔来。 登录页面出现内存泄漏??!!楼主的代码是如此的完美而无懈可击,这么可能出现这么多泄漏的问题? 插播什么是 Activity 泄漏:Android 中 Activity 代表一个页面,拥有一段生命周期,生命周期结束后,Activity 对象应当在之后某个合适的时机被 VM 回收内存。出现了泄漏就意味着 Ac
腾讯Bugly
2018/03/23
3.4K0
Android中导致内存泄漏的竟然是它----Dialog
Java中当对象不再使用时,不赋值为null会导致什么后果 ?
点击上方蓝色“程序猿DD”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 作者 | zhantong 来源 | https://www.polarxiong.com 前言 许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。 鉴于网上有太多关于此问题的误导,本文将通过实例,深入JVM剖析“对象不再使用时赋值为null”这一操作存在的意义,供君参考。本文尽量
程序猿DD
2023/04/17
6400
Java中当对象不再使用时,不赋值为null会导致什么后果 ?
数组访问越界_数组越界会导致什么问题
所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一。
全栈程序员站长
2022/11/11
1.6K0
Hive语法内关于With as 的数据是否会缓存到内存分析
  WITH AS短语,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断可以被后面的SQL语句引用,从而使SQL语句的可读性更高。
挽风
2021/12/07
1.3K0
记一次使用Zookeeper C API导致的内存泄漏
可以看到 definitely lost: 24 bytes in 1 blocks
扫帚的影子
2018/09/05
1.7K0
内存泄漏
这个笔记是记录一下,关于内存泄漏的知识,之前我们就知道了,如果要用堆必须要释放堆的内存,如果不释放会产生很多的内存垃圾和碎片,影响系统运行效率,甚至出错。
用户7272142
2023/10/11
2990
内存泄漏
面试造火箭,看下这些大厂Android中高级岗面试原题
面试造火箭,工作拧螺丝,虽然我只想拧螺丝,可是我需要用造火箭的技术去寻找拧螺丝的工作,如何能在面试过程中让自己处于不败的地步呢,刷题是一个比较好的捷径,今天就汇总了一些比较经典的面试题进行了汇总,分享给大家。
Android技术干货分享
2021/06/15
6380
面试造火箭,看下这些大厂Android中高级岗面试原题
内存管理:判断对象是否存活
在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对 Java 堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)。
真正的飞鱼
2023/04/03
4320
Android 知识简记:资深架构师带你快速回顾Android各种知识!
1.网络 2.Java 基础&容器&同步&设计模式 3.Java 虚拟机&内存结构&GC&类加载&四种引用&动态代理 4.Android 基础&性能优化&Framwork 5.Android 模块化&热修复&热更新&打包&混淆&压缩 6.音视频&FFmpeg&播放器
Android技术干货分享
2019/08/06
8880
Android 知识简记:资深架构师带你快速回顾Android各种知识!
Android性能优化之内存优化
Tips:本篇是《深入探索Android内存优化》的基础篇,如果没有掌握Android内存优化的同学建议系统学习一遍。
做个快乐的码农
2021/11/23
2.6K0
Android性能优化之内存优化
Android系统性能优化
快,稳,省,小,这四点很形象的代表了性能的四个方面,同时也让我们知道我们App现在是否是款性能良好的APP,如果有一项不达标,那么说明我们的应用有待优化。
用户9253515
2021/12/22
6180

相似问题

对静态属性的引用是否会导致内存泄漏

12

定义静态列表会导致内存泄漏吗?

45

静态Stack<Activity>会导致内存泄漏吗?

12

在非静态方法中使用静态成员是否会导致内存泄漏?

10

C++静态数组导致内存泄漏?

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文