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




