AFNetworking 3.0上传文件耗时过长,如何优化视频上传速度?
上传速度优化方案
1. 请求与会话配置优化
- 替换
defaultSessionConfiguration为ephemeralSessionConfiguration,后者会禁用不必要的缓存、cookie持久化逻辑,减少上传时的额外开销 - 不要用
uploadTaskWithStreamedRequest搭配内存中的videoData,直接把视频写入本地临时文件后调用appendPartWithFileURL方法,避免内存加载整个文件带来的额外耗时,同时AFN会自动优化流读取逻辑 - 手动配置请求超时时间,默认的超时时间可能会触发慢启动重传,设置
request.timeoutInterval = 30适配大文件上传场景
2. 传输逻辑优化
- 确认服务端支持HTTP/2协议,
NSURLSession会自动适配HTTP/2,多路复用特性可以大幅减少TCP握手开销,上传速度可提升30%以上 - 如果视频文件大于10M,建议拆分成分片并行上传,服务端做好分片合并逻辑,避免单文件上传失败需要全量重传的问题,同时充分利用上行带宽
- 检查
mimeType配置是否和服务端要求匹配,错误的mimeType会触发服务端额外校验逻辑,延长响应时间
3. 视频压缩优化补充
- 除了画质压缩,还可以调整视频码率、帧率,5秒的普通场景视频可以把码率降到1Mbps以内,文件大小可以控制在1M以内,上传耗时会大幅缩短
- 检查压缩后的视频编码格式,优先用H.264编码,兼容性最好,不需要服务端转码额外等待
优化后的代码参考
// 先把压缩后的视频写入本地临时路径 NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"temp_upload.mp4"]; [videoData writeToFile:tempPath atomically:YES]; NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"urlOfServer" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // 用本地文件URL代替内存Data [formData appendPartWithFileURL:[NSURL fileURLWithPath:tempPath] name:@"fileName" fileName:@"filename.mp4" mimeType:@"video/mp4" error:nil]; } error:nil]; request.timeoutInterval = 30; // 用临时会话配置减少开销 AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]]; NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:nil progress:^(NSProgress * _Nonnull uploadProgress) { dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"PERCENTAGE UPLOADED %f",uploadProgress.fractionCompleted); }); } completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { // 上传完成后删除临时文件 [[NSFileManager defaultManager] removeItemAtPath:tempPath error:nil]; if (error) { NSLog(@"Error: %@", error); } else { NSLog(@"%@ %@", response, responseObject); } }]; [uploadTask resume];
内容的提问来源于stack exchange,提问作者user1887842
相关产品推荐
相关产品推荐

