将多个分块视频上传到服务器

Uploading multiple chunked videos to server

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

我从相机胶卷中获取 AVAssets,获取它们的 URLs,将它们放入队列中并为第一个文件打开一个带有 URL 的输入流。我只在完成上一个文件后才打开下一个文件。

当我上传一个视频时一切正常,但是当我 select 上传多个视频时出现错误。我正在使用流轮询,这是输入流读取代码:

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 上进行这样的上传吗?

在你的问题中你说你首先得到所有 URLs,然后开始阅读它们。一次只得到一个URL就可以解决这个问题.

我不知道为什么会这样,但我的假设是(因为您使用的是相机胶卷,而不是应用的沙箱)您被授予访问最后一个 URL 的权限您从资产中获得的。

在你的例子中,你得到了所有的 URLs,并尝试从第一个开始读取。但是,您很可能只有阅读最后一个 URL:

的权限
  1. Get first URL (have permission for first URL)
  2. Get second URL (have permission for second URL, lose permissions for first URL)
  3. ...