最近在做有关选择本地视频分享出去及播放的问题。本人不才,研究一段时间外加参考大神的代码才捋顺了大体过程,明白该怎么做。
首先我使用的工具是系统自带的UIImagePickerController来进行视频的展示。它的其中一个代理方法:
- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
通过这个方法可以获得你选择的单个视频的信息(图1):
经过尝试发现UIImagePickerControllerMediaURL 根本无法获取到你选择的那个视频,更别提上传数据了。正确路径与之对比(图2):
可以看出前缀多了一个/private,而private代表系统文件夹。这说明文件存储在系统文件夹,非用户文件夹,root级别的,我们访问不到。这样这条路算是走不通了,那么应该怎么做呢?
于是就想到了获得视频的名字重新写入沙盒中,(就是重新给他一个新的路径,)这样不就知道它的路径了吗?视频的名字应该怎么得到又是一个问题。后来发现通过ALAsset 可以得到ALAssetRepresentation 的对象,然后就可以得到很多文件的属性,比如说文件的大小(size)、路径(URL)、名字(filename)等等。这样我们就需要获得相册里的所有分组,然后通过遍历并与UIImagePickerControllerReferenceURL 做匹配(图3),找到一致的通过他的文件名重新写入沙盒中,这样就得到了它的新的路径,不管是播放还是上传都没有问题了。