You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS相册大视频高效加载及重启后重开的最优实现方案咨询

iOS相册大视频高效加载及重启后重开的最优实现方案咨询

我目前在开发iOS端的视频播放功能,有以下几个核心需求:

  • 播放用户从iPhone相册选中的视频,且使用自定义的播放控件
  • 读取视频元数据(比如时长)
  • 下次启动App时能重新打开该视频
  • 即使是几GB的大视频,也要实现最快的加载速度
  • 不想处理复杂的权限问题,希望用iOS自带的安全照片选择器

尝试了几种方法后,发现要同时满足所有需求并不容易。目前我找到了两个可选方案,但各自都存在问题:

方案一:使用SwiftUI的PhotosPicker组件

我用了 PhotosPicker(selection: $selectedVideoItem, matching: .videos),通过返回的PhotosPickerItem获取AVAsset,再传给自定义的视频播放器组件。但这个方案有两个问题:

  • 要实现下次启动重开视频,需要用到selectedVideoItem.itemIdentifier,但这个标识符只有在用户授予相册完全访问权限后才能获取到,不符合我想规避权限问题的需求
  • PhotosPicker的UI一致性有问题:如果加载视频时出现错误,selectedVideoItem会保留选中状态,再次打开选择器时会显示该视频已选中,但实际上因为之前的错误已经无法加载了

方案二:通过loadFileRepresentation()加载视频为文件

这个方法看起来可行,而且因为视频会被存到临时文件里,下次启动App时可以重新打开。但我不太喜欢这种方式——视频需要被复制到临时文件,我得处理各种边缘情况,比如复制失败、存储空间不足等问题,增加了开发复杂度。

所以想请教各位,有没有办法不用复制视频到临时文件就能满足所有需求?或者有没有其他更优的实现方案?

备注:内容来源于stack exchange,提问作者brigadir

火山引擎 最新活动