前言:
最近做即时聊天项目,涉及到视频的上传下载。AFNetworking上传图片和视频(支持多张图片上传)
在视频下载中遇到一些问题,视频下载后无法播放
1 视频下载方法
/**
* 下载文件
*/
- (void)downloadFileURL:(NSString *)aUrl savePath:(NSString *)aSavePath fileName:(NSString *)aFileName tag:(NSInteger)aTag
{
NSFileManager *fileManager = [NSFileManager defaultManager];
//检查本地文件是否已存在
NSString *fileName = [NSString stringWithFormat:@"%@/%@", aSavePath, aFileName];
//检查附件是否存在
if ([fileManager fileExistsAtPath:fileName]) {
NSData *audioData = [NSData dataWithContentsOfFile:fileName];
//...视频下载完毕操作
}else{
//创建附件存储目录
if (![fileManager fileExistsAtPath:aSavePath]) {
[fileManager createDirectoryAtPath:aSavePath withIntermediateDirectories:YES attributes:nil error:nil];
}
//下载附件
NSURL *url = [[NSURL alloc] initWithString:aUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.inputStream = [NSInputStream inputStreamWithURL:url];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:fileName append:NO];
//下载进度控制
/*
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
NSLog(@"is download:%f", (float)totalBytesRead/totalBytesExpectedToRead);
}];
*/
//已完成下载
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSData *audioData = [NSData dataWithContentsOfFile:fileName];
//设置下载数据到res字典对象中并用代理返回下载数据NSData
//...视频下载完毕操作
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//下载失败
//...视频下载失败操作
}];
[operation start];
}
}
2 下载完视频后,文件没有加后缀.MP4 就会出现播放不了的情况,我的解决方法是,在上面的filename加一个后缀.mp4,播放就ok了。
3 在下载其他文件时,如图片,录音,并未发现不加后缀就不正常显示或播放问题,有了解的或做IM项目的欢迎找我交流。我的软件群 156747694