我正在尝试将分割成块的多个视频上传到服务器。
我从相机胶卷中获取AVAset,获取其URL,将其放入队列中,并使用第一个文件的URL打开输入流。完成上一个文件后,我才打开下一个文件。
当我上传一个视频时,一切正常,但是当我选择多个视频时,我得到了一个错误。我正在使用流轮询,这是输入流读取的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int size = 1024; uint8_t readBuffer[size]; NSMutableData *collectorBuffer = [NSMutableData data]; NSInteger length = 0; NSInteger totalReadBytes = 0; while (totalReadBytes < kChunkSize) { length = [self.inputStream read:readBuffer maxLength:size]; if (length) { [collectorBuffer appendBytes:(const void *)readBuffer length:length]; totalReadBytes += length; } else { break; } } |
我得到的错误是长度为-1并且streamError为:
Error Domain=NSPOSIXErrorDomain Code=1"Operation not permitted" UserInfo={_kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=1}
我知道我可以将视频复制到沙箱中,然后上传它们,但重点是不要分配太多内存。
我检查过的每个应用一次只能上传1个视频。甚至可以在iOS上进行这样的上传吗?
在询问您的问题时,您说先获得所有URL,然后再开始阅读它们。一次只能获取一个URL即可解决此问题。
我不知道为什么会这样,但是我的假设是(由于您使用的是相机胶卷,而不是应用程序的沙箱),您被授予访问从资产获得的最后一个URL的权限。 。
以您为例,您将获取所有URL,并尝试从第一个URL读取。但是,您很可能只具有读取最后一个URL的权限:
Get first URL (have permission for first URL) Get second URL (have permission for second URL, lose permissions for first URL) ...