使用系统类NSURLSessionDownloadTask实现断点续传(音乐视频下载等)
来源:互联网 发布:一生所爱 网络歌手 编辑:程序博客网 时间:2024/06/08 13:57
断点续传原理:
断点:在点击暂停按钮或者断网的时候记录已经下载的字节数
续传:在点击开始按钮的时候或者监听到网络重连的时候将上次记录的字节数通过HTTP请求传给服务器,继续下载
- 拖两个按钮
- 连接方法
#pragma mark - 开始- (IBAction)startAction:(id)sender {}#pragma mark - 暂停- (IBAction)stopAction:(id)sender {}
- 声明属性
#import <AVFoundation/AVFoundation.h>@interface ViewController ()@property (nonatomic, strong) NSURLSessionDownloadTask *downloadTask; // 下载任务@property (nonatomic, strong) NSURLSession *session; // 网络@property (nonatomic, strong) NSData *downloadData; // 下载的数据@property(nonatomic, strong) AVAudioPlayer * player; // 将player写入属性,用模拟器start项目时必须用属性,否则是没有声音的 player是为了下载完成后播放音乐@end
- 遵守下载代理
- 初始化网络
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];}
- 开始下载
#pragma mark - 开始- (IBAction)startAction:(id)sender { if (self.downloadTask) { NSLog(@"继续下载"); NSLog(@"%lu", self.downloadData.length); // 把存储的下载数据给通过网络传递给服务器继续下载 self.downloadTask = [self.session downloadTaskWithResumeData:self.downloadData]; }else{ NSLog(@"开始下载"); self.downloadTask = [self.session downloadTaskWithURL:[NSURL URLWithString:@"http://yinyueshiting.baidu.com/data2/music/244383700/244379959144425526164.mp3?xcode=ee4c4a527b584e3a794b86d808232fc4"]]; } // 开始任务 [self.downloadTask resume];}
- 暂停下载
#pragma mark - 暂停- (IBAction)stopAction:(id)sender { NSLog(@"暂停下载"); [self.downloadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) { // 把暂停下载的时候的数据存储到全局变量中 NSLog(@"%lu", resumeData.length); self.downloadData = resumeData; }];}
- 下载完成实现音乐播放
#pragma mark - 完成下载实现音乐播放- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { NSLog(@"已下载"); // 存储到本地 NSURL * url=[NSURL fileURLWithPath:@"/Users/jiayuanfa/Desktop/music.mp3"]; NSFileManager * manager=[NSFileManager defaultManager]; [manager moveItemAtURL:location toURL:url error:nil]; // 播放音乐 dispatch_async(dispatch_get_main_queue(), ^{ NSData * data=[manager contentsAtPath:@"/Users/jiayuanfa/Desktop/music.mp3"]; self.player = [[AVAudioPlayer alloc] initWithData:data error:nil]; [self.player play]; });}
- 监听下载进度
#pragma mark - 监听下载 进度条等等- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{ double downloadProgress = totalBytesWritten / (double)totalBytesExpectedToWrite; NSLog(@"%f", downloadProgress);}
- 运行
点击开始按钮
点击暂停按钮然后再点击开始按钮
下载完成
桌面保存
0 0
- 使用系统类NSURLSessionDownloadTask实现断点续传(音乐视频下载等)
- 使用系统类NSURLSessionDownloadTask实现断点续传(音乐视频下载等)
- 使用系统类NSURLSessionDownloadTask实现断点续传(音乐视频下载等)
- 使用系统类NSURLSessionDownloadTask实现断点续传(音乐视频下载等)
- 系统NSURLSessionDownloadTask实现简单的断点下载
- python 下载 图片、音乐、视频 和 断点续传
- ios 后台下载,app退出再进入可以断点续传 NSURLSessionDownloadTask(一)
- 用NSURLSessionDownloadTask断点续传、后台下载、锁屏下载
- NSURLSessionDownloadTask的深度断点续传
- 通过NSURLSessionDownloadTask代理实现下载大文件
- 【iOS开发-网络】使用NSURLSessionDownloadTask断点下载
- Java断点续传下载视频
- (二)使用libcurl实现获取目标文件大小, 下载进度显示, 断点续传等功能
- 使用libcurl实现获取目标文件大小, 下载进度显示, 断点续传等功能
- 【iOS开发-网络】使用NSURLSessionDownloadTask下载任务(不能知道下载进度)
- 【iOS开发-网络】使用NSURLSessionDownloadTask下载任务(有下载进度)
- Python 使用urllib2模块实现断点续传下载
- Android 使用service实现多线程断点续传下载
- SUMO使用教程(四)
- JQuery修改frame的src
- leetcode-Minimum Window Substring
- C/C++基本数据类型大小及表示范围
- Html+Css详解Css选择器,优先级与匹配原理
- 使用系统类NSURLSessionDownloadTask实现断点续传(音乐视频下载等)
- C++伴我每一天
- SUMO使用教程(五)
- LeetCode题解——Copy List with Random Pointer
- 第4讲 项目1-输出点阵图
- 简易QQ登录实现账号密码保存
- [NOIP 2011]铺地毯 模拟
- shell脚本操作mysql数据库-e参数执行各种sql
- 读取写入SharedPreferences数据