将多个分块视频上传到服务器
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:
的权限
- Get first URL (have permission for first URL)
- Get second URL (have permission for second URL, lose permissions for first URL)
- ...
我正在尝试将分割成块的多个视频上传到服务器。
我从相机胶卷中获取 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:
的权限
- Get first URL (have permission for first URL)
- Get second URL (have permission for second URL, lose permissions for first URL)
- ...