关于ios:将多个分块视频上传到服务器

我正在尝试将分割成块的多个视频上传到服务器。

我从相机胶卷中获取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)
  • ...