Commit 3bf2be226545caff26158904a26cca895ee295da
1 parent
a49b6bed
移除BucketName
Showing
5 changed files
with
147 additions
and
146 deletions
CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo.xcodeproj/project.pbxproj
| @@ -17,6 +17,7 @@ | @@ -17,6 +17,7 @@ | ||
| 17 | 81B9CBA81F54207B009594FB /* KS3YunSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */; }; | 17 | 81B9CBA81F54207B009594FB /* KS3YunSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */; }; |
| 18 | 81B9CBA91F54207B009594FB /* KS3YunSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; | 18 | 81B9CBA91F54207B009594FB /* KS3YunSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
| 19 | 81B9CBAE1F5421C6009594FB /* 7.6M.mov in Resources */ = {isa = PBXBuildFile; fileRef = 81B9CBAD1F5421C6009594FB /* 7.6M.mov */; }; | 19 | 81B9CBAE1F5421C6009594FB /* 7.6M.mov in Resources */ = {isa = PBXBuildFile; fileRef = 81B9CBAD1F5421C6009594FB /* 7.6M.mov */; }; |
| 20 | + D21D75D51FE0C9C700658839 /* cnlive.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = D21D75D41FE0C9C600658839 /* cnlive.mp4 */; }; | ||
| 20 | D2DD1B311FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */; }; | 21 | D2DD1B311FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */; }; |
| 21 | D2DD1B331FDFDA6F001DFDD1 /* CNLiveUploadYunSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; | 22 | D2DD1B331FDFDA6F001DFDD1 /* CNLiveUploadYunSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
| 22 | /* End PBXBuildFile section */ | 23 | /* End PBXBuildFile section */ |
| @@ -51,6 +52,7 @@ | @@ -51,6 +52,7 @@ | ||
| 51 | 81B9CBA01F54204F009594FB /* CNLiveUploadController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveUploadController.m; sourceTree = "<group>"; }; | 52 | 81B9CBA01F54204F009594FB /* CNLiveUploadController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveUploadController.m; sourceTree = "<group>"; }; |
| 52 | 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = KS3YunSDK.framework; sourceTree = "<group>"; }; | 53 | 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = KS3YunSDK.framework; sourceTree = "<group>"; }; |
| 53 | 81B9CBAD1F5421C6009594FB /* 7.6M.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = 7.6M.mov; sourceTree = "<group>"; }; | 54 | 81B9CBAD1F5421C6009594FB /* 7.6M.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = 7.6M.mov; sourceTree = "<group>"; }; |
| 55 | + D21D75D41FE0C9C600658839 /* cnlive.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = cnlive.mp4; sourceTree = "<group>"; }; | ||
| 54 | D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveUploadYunSDK.framework; sourceTree = "<group>"; }; | 56 | D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveUploadYunSDK.framework; sourceTree = "<group>"; }; |
| 55 | /* End PBXFileReference section */ | 57 | /* End PBXFileReference section */ |
| 56 | 58 | ||
| @@ -95,6 +97,7 @@ | @@ -95,6 +97,7 @@ | ||
| 95 | 81B9CB9F1F54204F009594FB /* CNLiveUploadController.h */, | 97 | 81B9CB9F1F54204F009594FB /* CNLiveUploadController.h */, |
| 96 | 81B9CBA01F54204F009594FB /* CNLiveUploadController.m */, | 98 | 81B9CBA01F54204F009594FB /* CNLiveUploadController.m */, |
| 97 | 81B9CBAD1F5421C6009594FB /* 7.6M.mov */, | 99 | 81B9CBAD1F5421C6009594FB /* 7.6M.mov */, |
| 100 | + D21D75D41FE0C9C600658839 /* cnlive.mp4 */, | ||
| 98 | 81B9CB911F542006009594FB /* Main.storyboard */, | 101 | 81B9CB911F542006009594FB /* Main.storyboard */, |
| 99 | 81B9CB941F542006009594FB /* Assets.xcassets */, | 102 | 81B9CB941F542006009594FB /* Assets.xcassets */, |
| 100 | 81B9CB961F542006009594FB /* LaunchScreen.storyboard */, | 103 | 81B9CB961F542006009594FB /* LaunchScreen.storyboard */, |
| @@ -173,6 +176,7 @@ | @@ -173,6 +176,7 @@ | ||
| 173 | buildActionMask = 2147483647; | 176 | buildActionMask = 2147483647; |
| 174 | files = ( | 177 | files = ( |
| 175 | 81B9CBAE1F5421C6009594FB /* 7.6M.mov in Resources */, | 178 | 81B9CBAE1F5421C6009594FB /* 7.6M.mov in Resources */, |
| 179 | + D21D75D51FE0C9C700658839 /* cnlive.mp4 in Resources */, | ||
| 176 | 81B9CB981F542006009594FB /* LaunchScreen.storyboard in Resources */, | 180 | 81B9CB981F542006009594FB /* LaunchScreen.storyboard in Resources */, |
| 177 | 81B9CB951F542006009594FB /* Assets.xcassets in Resources */, | 181 | 81B9CB951F542006009594FB /* Assets.xcassets in Resources */, |
| 178 | 81B9CB931F542006009594FB /* Main.storyboard in Resources */, | 182 | 81B9CB931F542006009594FB /* Main.storyboard in Resources */, |
CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo/AppDelegate.h
| @@ -8,6 +8,7 @@ | @@ -8,6 +8,7 @@ | ||
| 8 | 8 | ||
| 9 | #import <UIKit/UIKit.h> | 9 | #import <UIKit/UIKit.h> |
| 10 | 10 | ||
| 11 | +//在视讯云开放平台 open.cnlive.com 注册应用,配置bundleID以及权限得到AppId和AppKey | ||
| 11 | #define AppId @"60_jaxisljz90" | 12 | #define AppId @"60_jaxisljz90" |
| 12 | #define AppKey @"1ee33b54e18a66b94eca7f8149408565b02f749d314926" | 13 | #define AppKey @"1ee33b54e18a66b94eca7f8149408565b02f749d314926" |
| 13 | 14 |
CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo/AppDelegate.m
| @@ -25,7 +25,9 @@ | @@ -25,7 +25,9 @@ | ||
| 25 | self.window.rootViewController = nav; | 25 | self.window.rootViewController = nav; |
| 26 | [self.window makeKeyAndVisible]; | 26 | [self.window makeKeyAndVisible]; |
| 27 | 27 | ||
| 28 | + //设置地区 | ||
| 28 | [[CNLiveClient initialize] setBucketDomainWithRegion:CNLiveBucketBeijing]; | 29 | [[CNLiveClient initialize] setBucketDomainWithRegion:CNLiveBucketBeijing]; |
| 30 | + //初始化云上传SDK | ||
| 29 | [CNLiveUpload setAppId:AppId appKey:AppKey isTestEnvironment:NO]; | 31 | [CNLiveUpload setAppId:AppId appKey:AppKey isTestEnvironment:NO]; |
| 30 | 32 | ||
| 31 | return YES; | 33 | return YES; |
CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo/CNLiveUploadController.m
| @@ -21,19 +21,18 @@ | @@ -21,19 +21,18 @@ | ||
| 21 | 21 | ||
| 22 | @interface CNLiveUploadController ()<UITableViewDelegate,UITableViewDataSource,KingSoftServiceRequestDelegate> | 22 | @interface CNLiveUploadController ()<UITableViewDelegate,UITableViewDataSource,KingSoftServiceRequestDelegate> |
| 23 | { | 23 | { |
| 24 | - NSString *_bucketName;//SP对应的bucketName | ||
| 25 | NSString *_bucketKey;//SP上传时用到的bucket里文件的路径(包含扩展名) | 24 | NSString *_bucketKey;//SP上传时用到的bucket里文件的路径(包含扩展名) |
| 26 | } | 25 | } |
| 27 | -@property (nonatomic ,strong) UITableView * tableView; | 26 | +@property (nonatomic ,strong) UITableView * tableView;//列表 |
| 28 | 27 | ||
| 29 | -@property (assign, nonatomic) long long fileSize; | ||
| 30 | -@property (assign, nonatomic) NSInteger partSize; | ||
| 31 | -@property (assign, nonatomic) long long partLength; | ||
| 32 | -@property (nonatomic) NSInteger uploadNum; | ||
| 33 | -@property (nonatomic) NSInteger totalNum; | ||
| 34 | -@property (strong, nonatomic) NSFileHandle *fileHandle; | ||
| 35 | -@property (nonatomic, strong) NSArray *arrItems; | ||
| 36 | -@property (strong, nonatomic) CNLiveMultipartUpload *muilt; | 28 | +@property (assign, nonatomic) long long fileSize;//文件大小 |
| 29 | +@property (assign, nonatomic) NSInteger partSize;//单块大小 | ||
| 30 | +@property (assign, nonatomic) long long partLength;//单块长度 | ||
| 31 | +@property (nonatomic) NSInteger uploadNum;//当前上传块 | ||
| 32 | +@property (nonatomic) NSInteger totalNum;//上传总块数 | ||
| 33 | +@property (strong, nonatomic) NSFileHandle *fileHandle;//文件管理 | ||
| 34 | +@property (nonatomic, strong) NSArray *arrItems;//数据源 | ||
| 35 | +@property (strong, nonatomic) CNLiveMultipartUpload *muilt;//分块上传对象 | ||
| 37 | @end | 36 | @end |
| 38 | 37 | ||
| 39 | @implementation CNLiveUploadController | 38 | @implementation CNLiveUploadController |
| @@ -51,16 +50,18 @@ | @@ -51,16 +50,18 @@ | ||
| 51 | self.tableView.delegate = self; | 50 | self.tableView.delegate = self; |
| 52 | self.tableView.dataSource = self; | 51 | self.tableView.dataSource = self; |
| 53 | 52 | ||
| 54 | - _bucketName = [CNLiveUpload getSPBucketName]; | ||
| 55 | - NSLog(@"bucketName:%@",_bucketName); | ||
| 56 | [self getBucketKeyFromServer]; | 53 | [self getBucketKeyFromServer]; |
| 57 | } | 54 | } |
| 58 | 55 | ||
| 56 | + | ||
| 57 | +/** | ||
| 58 | + 从服务器获取BucketKey,BucketKey为文件路径 | ||
| 59 | + */ | ||
| 59 | - (void)getBucketKeyFromServer | 60 | - (void)getBucketKeyFromServer |
| 60 | { | 61 | { |
| 61 | #warning 此处建议从server获取 上传文件对应的bucketKey(文件路径包含扩展名) | 62 | #warning 此处建议从server获取 上传文件对应的bucketKey(文件路径包含扩展名) |
| 62 | #warning Demo为了演示 bucketKey用固定值 | 63 | #warning Demo为了演示 bucketKey用固定值 |
| 63 | - _bucketKey = @"cnlive122/test123-7.6M.mov"; | 64 | + _bucketKey = @"cnlive-test/cnlive.mp4"; |
| 64 | } | 65 | } |
| 65 | 66 | ||
| 66 | #pragma mark 相册方法 | 67 | #pragma mark 相册方法 |
| @@ -135,108 +136,104 @@ | @@ -135,108 +136,104 @@ | ||
| 135 | */ | 136 | */ |
| 136 | - (void)beginMultipartUpload | 137 | - (void)beginMultipartUpload |
| 137 | { | 138 | { |
| 138 | - if(_bucketName == nil){ | ||
| 139 | - _bucketName = [CNLiveUpload getSPBucketName]; | ||
| 140 | - if (!_bucketName) { | ||
| 141 | - NSLog(@"获取BucketName失败,请检查视讯云上传模块权限是否配置!"); | ||
| 142 | - return; | ||
| 143 | - } | ||
| 144 | - } | ||
| 145 | - | ||
| 146 | - NSString *strKey = _bucketKey; | ||
| 147 | - _partSize = 5; // 文件大于5M为最小5M一块 | ||
| 148 | - | ||
| 149 | - CNLiveAccessControlList *acl = [[CNLiveAccessControlList alloc] init]; | ||
| 150 | - [acl setContronAccess:CNLiveYun_Permission_Public_Read]; | ||
| 151 | - | ||
| 152 | - CNLiveInitiateMultipartUploadRequest *initMultipartUploadReq = [[CNLiveInitiateMultipartUploadRequest alloc] initWithKey:strKey inBucket:_bucketName acl:acl grantAcl:nil]; | ||
| 153 | - [initMultipartUploadReq setCompleteRequest]; | ||
| 154 | - | ||
| 155 | - NSArray *array = [initMultipartUploadReq.CNYHeader componentsSeparatedByString:@"\n"]; | ||
| 156 | - NSString *headers = [array firstObject]; | ||
| 157 | - | ||
| 158 | - [CNLiveUpload getTokenWithMd5:initMultipartUploadReq.contentMd5 verb:initMultipartUploadReq.httpMethod type:initMultipartUploadReq.contentType res:initMultipartUploadReq.CNYResource headers:headers date:initMultipartUploadReq.strDate success:^(NSString *token ,NSString *cnliveDate) { | ||
| 159 | - [initMultipartUploadReq setStrCNLiveToken:token]; | ||
| 160 | - [initMultipartUploadReq setStrDate:cnliveDate]; | ||
| 161 | - _muilt = [[CNLiveClient initialize] initiateMultipartUploadWithRequest:initMultipartUploadReq]; | 139 | + [CNLiveUpload initCNLiveUploadWithSuccess:^{ |
| 140 | + NSString *strKey = _bucketKey; | ||
| 141 | + _partSize = 5; // 文件大于5M为最小5M一块 | ||
| 162 | 142 | ||
| 163 | - if (_muilt == nil) { | ||
| 164 | - NSLog(@"####Init upload failed, please check access key, secret key and bucket name!####"); | ||
| 165 | - return ; | ||
| 166 | - } | 143 | + CNLiveAccessControlList *acl = [[CNLiveAccessControlList alloc] init]; |
| 144 | + [acl setContronAccess:CNLiveYun_Permission_Public_Read]; | ||
| 167 | 145 | ||
| 168 | - //选择相册还是普通方式 | ||
| 169 | - _muilt.uploadType = kCNLiveUploadNormal; | 146 | + CNLiveInitiateMultipartUploadRequest *initMultipartUploadReq = [[CNLiveInitiateMultipartUploadRequest alloc] initWithKey:strKey acl:acl grantAcl:nil]; |
| 147 | + [initMultipartUploadReq setCompleteRequest]; | ||
| 170 | 148 | ||
| 171 | - //根据文件路径不一样,有如下两种上传 | ||
| 172 | - if (_muilt.uploadType == kCNLiveUploadNormal) { //如果是沙盒或者工程里的文件 | ||
| 173 | - //工程里,沙盒里,是沙盒路径 | ||
| 174 | - NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"7.6M" ofType:@"mov"]; | ||
| 175 | - _fileHandle = [NSFileHandle fileHandleForReadingAtPath:strFilePath]; | ||
| 176 | - _fileSize = [_fileHandle availableData].length; | ||
| 177 | - if (_fileSize <= 0) { | ||
| 178 | - NSLog(@"####This file is not exist!####"); | ||
| 179 | - return ; | ||
| 180 | - } | ||
| 181 | - if (!(_partSize > 0 || _partSize != 0)) { | ||
| 182 | - _partLength = _fileSize; | ||
| 183 | - }else{ | ||
| 184 | - _partLength = _partSize * 1024.0 * 1024.0; | ||
| 185 | - } | ||
| 186 | - _totalNum = (ceilf((float)_fileSize / (float)_partLength)); | ||
| 187 | - [_fileHandle seekToFileOffset:0]; | ||
| 188 | - }else | ||
| 189 | - { | ||
| 190 | - //如果是相册里的,从这传 | ||
| 191 | - ALAssetRepresentation *assetD = [self getAlasset].defaultRepresentation; | ||
| 192 | - _fileSize = assetD.size; | ||
| 193 | - if (_fileSize <= 0) { | ||
| 194 | - NSLog(@"####This file is not exist!####"); | 149 | + NSArray *array = [initMultipartUploadReq.CNYHeader componentsSeparatedByString:@"\n"]; |
| 150 | + NSString *headers = [array firstObject]; | ||
| 151 | + | ||
| 152 | + [CNLiveUpload getTokenWithMd5:initMultipartUploadReq.contentMd5 verb:initMultipartUploadReq.httpMethod type:initMultipartUploadReq.contentType res:initMultipartUploadReq.CNYResource headers:headers date:initMultipartUploadReq.strDate success:^(NSString *token ,NSString *cnliveDate) { | ||
| 153 | + [initMultipartUploadReq setStrCNLiveToken:token]; | ||
| 154 | + [initMultipartUploadReq setStrDate:cnliveDate]; | ||
| 155 | + _muilt = [[CNLiveClient initialize] initiateMultipartUploadWithRequest:initMultipartUploadReq]; | ||
| 156 | + | ||
| 157 | + if (_muilt == nil) { | ||
| 158 | + NSLog(@"####Init upload failed, please check access key, secret key and bucket name!####"); | ||
| 195 | return ; | 159 | return ; |
| 196 | } | 160 | } |
| 197 | - if (!(_partSize > 0 || _partSize != 0)) { | ||
| 198 | - _partLength = _fileSize; | ||
| 199 | - }else{ | ||
| 200 | - _partLength = _partSize * 1024.0 * 1024.0; | 161 | + |
| 162 | + //选择相册还是普通方式 | ||
| 163 | + _muilt.uploadType = kCNLiveUploadNormal; | ||
| 164 | + | ||
| 165 | + //根据文件路径不一样,有如下两种上传 | ||
| 166 | + if (_muilt.uploadType == kCNLiveUploadNormal) { //如果是沙盒或者工程里的文件 | ||
| 167 | + //工程里,沙盒里,是沙盒路径 | ||
| 168 | + NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"7.6M" ofType:@"mov"]; | ||
| 169 | + _fileHandle = [NSFileHandle fileHandleForReadingAtPath:strFilePath]; | ||
| 170 | + _fileSize = [_fileHandle availableData].length; | ||
| 171 | + if (_fileSize <= 0) { | ||
| 172 | + NSLog(@"####This file is not exist!####"); | ||
| 173 | + return ; | ||
| 174 | + } | ||
| 175 | + if (!(_partSize > 0 || _partSize != 0)) { | ||
| 176 | + _partLength = _fileSize; | ||
| 177 | + }else{ | ||
| 178 | + _partLength = _partSize * 1024.0 * 1024.0; | ||
| 179 | + } | ||
| 180 | + _totalNum = (ceilf((float)_fileSize / (float)_partLength)); | ||
| 181 | + [_fileHandle seekToFileOffset:0]; | ||
| 182 | + }else | ||
| 183 | + { | ||
| 184 | + //如果是相册里的,从这传 | ||
| 185 | + ALAssetRepresentation *assetD = [self getAlasset].defaultRepresentation; | ||
| 186 | + _fileSize = assetD.size; | ||
| 187 | + if (_fileSize <= 0) { | ||
| 188 | + NSLog(@"####This file is not exist!####"); | ||
| 189 | + return ; | ||
| 190 | + } | ||
| 191 | + if (!(_partSize > 0 || _partSize != 0)) { | ||
| 192 | + _partLength = _fileSize; | ||
| 193 | + }else{ | ||
| 194 | + _partLength = _partSize * 1024.0 * 1024.0; | ||
| 195 | + } | ||
| 196 | + _totalNum = (ceilf((float)_fileSize / (float)_partLength)); | ||
| 201 | } | 197 | } |
| 202 | - _totalNum = (ceilf((float)_fileSize / (float)_partLength)); | ||
| 203 | - } | ||
| 204 | - | 198 | + |
| 205 | #warning 上传的断点续传判断:初始化上传后,开始上传前,此处需要list一下所有的数据块,如果uploadID是新生成的,可以跳过list过程从第一块开始传,如果上传是断点续传,需用初始化用到的uploadId,list一下所有已经传过的数据块,再从暂停块上传即可, 这里用NSUserDefault演示存储过程。 | 199 | #warning 上传的断点续传判断:初始化上传后,开始上传前,此处需要list一下所有的数据块,如果uploadID是新生成的,可以跳过list过程从第一块开始传,如果上传是断点续传,需用初始化用到的uploadId,list一下所有已经传过的数据块,再从暂停块上传即可, 这里用NSUserDefault演示存储过程。 |
| 206 | - //判断uploadId是否存在,进而进行上传的断点续传 | ||
| 207 | - if ([mUserDefaults objectForKey:keyUploadId] == nil) { | ||
| 208 | - [mUserDefaults setObject:_muilt.uploadId forKey:keyUploadId]; | ||
| 209 | - [mUserDefaults synchronize]; | ||
| 210 | - _uploadNum = 1; | ||
| 211 | - [self uploadWithPartNumber:_uploadNum]; | ||
| 212 | - }else | ||
| 213 | - { | ||
| 214 | - _muilt.uploadId = [mUserDefaults objectForKey:keyUploadId]; | ||
| 215 | - //list一下所有上传过的块 | ||
| 216 | - CNLiveListPartsRequest *req2 = [[CNLiveListPartsRequest alloc] initWithMultipartUpload:_muilt]; | ||
| 217 | - [req2 setCompleteRequest]; | ||
| 218 | - [CNLiveUpload getTokenWithMd5:req2.contentMd5 verb:req2.httpMethod type:req2.contentType res:req2.CNYResource headers:headers date:req2.strDate success:^(NSString *token ,NSString *cnliveDate) { | ||
| 219 | - [req2 setStrCNLiveToken:token]; | ||
| 220 | - [req2 setStrDate:cnliveDate]; | ||
| 221 | - CNLiveListPartsResponse *response2 = [[CNLiveClient initialize] listParts:req2]; | ||
| 222 | - | ||
| 223 | - NSLog(@"response.listResult.parts.count =%lu",(unsigned long)[response2.listResult.parts count]); | ||
| 224 | - | ||
| 225 | - //从这块开始上传,list结果的最后一块 | ||
| 226 | - _uploadNum = ((CNLivePart *)[response2.listResult.parts lastObject]).partNumber + 1 ; | ||
| 227 | - | ||
| 228 | - //进度补齐 | ||
| 229 | - long long alreadyTotalWriten = (_uploadNum - 1) * _partLength ; | ||
| 230 | - double progress = alreadyTotalWriten / (float)_fileSize; | ||
| 231 | - UIProgressView *progressView = (UIProgressView *)[self.view viewWithTag:199]; | ||
| 232 | - progressView.progress = progress; | 200 | + //判断uploadId是否存在,进而进行上传的断点续传 |
| 201 | + if ([mUserDefaults objectForKey:keyUploadId] == nil) { | ||
| 202 | + [mUserDefaults setObject:_muilt.uploadId forKey:keyUploadId]; | ||
| 203 | + [mUserDefaults synchronize]; | ||
| 204 | + _uploadNum = 1; | ||
| 233 | [self uploadWithPartNumber:_uploadNum]; | 205 | [self uploadWithPartNumber:_uploadNum]; |
| 234 | - } failure:^(NSDictionary *error) { | ||
| 235 | - | ||
| 236 | - }]; | ||
| 237 | - } | 206 | + }else |
| 207 | + { | ||
| 208 | + _muilt.uploadId = [mUserDefaults objectForKey:keyUploadId]; | ||
| 209 | + //list一下所有上传过的块 | ||
| 210 | + CNLiveListPartsRequest *req2 = [[CNLiveListPartsRequest alloc] initWithMultipartUpload:_muilt]; | ||
| 211 | + [req2 setCompleteRequest]; | ||
| 212 | + [CNLiveUpload getTokenWithMd5:req2.contentMd5 verb:req2.httpMethod type:req2.contentType res:req2.CNYResource headers:headers date:req2.strDate success:^(NSString *token ,NSString *cnliveDate) { | ||
| 213 | + [req2 setStrCNLiveToken:token]; | ||
| 214 | + [req2 setStrDate:cnliveDate]; | ||
| 215 | + CNLiveListPartsResponse *response2 = [[CNLiveClient initialize] listParts:req2]; | ||
| 216 | + | ||
| 217 | + NSLog(@"response.listResult.parts.count =%lu",(unsigned long)[response2.listResult.parts count]); | ||
| 218 | + | ||
| 219 | + //从这块开始上传,list结果的最后一块 | ||
| 220 | + _uploadNum = ((CNLivePart *)[response2.listResult.parts lastObject]).partNumber + 1 ; | ||
| 221 | + | ||
| 222 | + //进度补齐 | ||
| 223 | + long long alreadyTotalWriten = (_uploadNum - 1) * _partLength ; | ||
| 224 | + double progress = alreadyTotalWriten / (float)_fileSize; | ||
| 225 | + UIProgressView *progressView = (UIProgressView *)[self.view viewWithTag:199]; | ||
| 226 | + progressView.progress = progress; | ||
| 227 | + [self uploadWithPartNumber:_uploadNum]; | ||
| 228 | + } failure:^(NSDictionary *error) { | ||
| 229 | + NSLog(@"error %@",error); | ||
| 230 | + }]; | ||
| 231 | + } | ||
| 232 | + } failure:^(NSDictionary *error) { | ||
| 233 | + NSLog(@"error %@",error); | ||
| 234 | + }]; | ||
| 238 | } failure:^(NSDictionary *error) { | 235 | } failure:^(NSDictionary *error) { |
| 239 | - | 236 | + NSLog(@"error %@",error); |
| 240 | }]; | 237 | }]; |
| 241 | } | 238 | } |
| 242 | 239 | ||
| @@ -313,7 +310,7 @@ | @@ -313,7 +310,7 @@ | ||
| 313 | NSLog(@"error: %@", response.error.description); | 310 | NSLog(@"error: %@", response.error.description); |
| 314 | } | 311 | } |
| 315 | } failure:^(NSDictionary *error) { | 312 | } failure:^(NSDictionary *error) { |
| 316 | - | 313 | + NSLog(@"error %@",error); |
| 317 | }]; | 314 | }]; |
| 318 | } | 315 | } |
| 319 | 316 | ||
| @@ -321,46 +318,43 @@ | @@ -321,46 +318,43 @@ | ||
| 321 | //最小支持但块上传小于5M,最大支持单块上传为5G | 318 | //最小支持但块上传小于5M,最大支持单块上传为5G |
| 322 | - (void)beginSingleUpload:(NSInteger) row | 319 | - (void)beginSingleUpload:(NSInteger) row |
| 323 | { | 320 | { |
| 324 | - if(_bucketName == nil){ | ||
| 325 | - _bucketName = [CNLiveUpload getSPBucketName]; | ||
| 326 | - if (!_bucketName) { | ||
| 327 | - NSLog(@"获取BucketName失败,请检查视讯云上传模块权限是否配置!"); | ||
| 328 | - return; | ||
| 329 | - } | ||
| 330 | - } | ||
| 331 | - CNLiveAccessControlList *ControlList = [[CNLiveAccessControlList alloc] init]; | ||
| 332 | - [ControlList setContronAccess:CNLiveYun_Permission_Public_Read_Write]; | ||
| 333 | - CNLivePutObjectRequest *putObjRequest = [[CNLivePutObjectRequest alloc] initWithName:_bucketName withAcl:ControlList grantAcl:nil]; | ||
| 334 | - NSString *fileName = [[NSBundle mainBundle] pathForResource:@"7.6M" ofType:@"mov"]; | ||
| 335 | - putObjRequest.data = [NSData dataWithContentsOfFile:fileName options:NSDataReadingMappedIfSafe error:nil]; | ||
| 336 | - _fileSize = putObjRequest.data.length; | ||
| 337 | - | ||
| 338 | - putObjRequest.delegate = self; | ||
| 339 | - putObjRequest.filename = _bucketKey; | ||
| 340 | - putObjRequest.contentMd5 = [CNLiveSDKUtil base64md5FromData:putObjRequest.data]; | ||
| 341 | - [putObjRequest setCompleteRequest]; | ||
| 342 | - | ||
| 343 | - NSArray *array = [putObjRequest.CNYHeader componentsSeparatedByString:@"\n"]; | ||
| 344 | - NSString *headers = [array firstObject]; | ||
| 345 | - | ||
| 346 | - [CNLiveUpload getTokenWithMd5:putObjRequest.contentMd5 verb:putObjRequest.httpMethod type:putObjRequest.contentType res:putObjRequest.CNYResource headers:headers date:putObjRequest.strDate success:^(NSString *token ,NSString *cnliveDate) { | ||
| 347 | - [putObjRequest setStrCNLiveToken:token]; | ||
| 348 | - [putObjRequest setStrDate:cnliveDate]; | ||
| 349 | - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | ||
| 350 | - CNLivePutObjectResponse *response = [[CNLiveClient initialize] putObject:putObjRequest]; | ||
| 351 | - | ||
| 352 | - //putObjRequest若没设置代理,则是同步的下方判断, | ||
| 353 | - //putObjRequest若设置了代理,则走上传代理回调, | ||
| 354 | - if (putObjRequest.delegate == nil) { | ||
| 355 | - NSLog(@"%@",[[NSString alloc] initWithData:response.body encoding:NSUTF8StringEncoding]); | ||
| 356 | - if (response.httpStatusCode == 200) { | ||
| 357 | - NSLog(@"Put object success"); | ||
| 358 | - } | ||
| 359 | - else { | ||
| 360 | - NSLog(@"Put object failed"); | 321 | + [CNLiveUpload initCNLiveUploadWithSuccess:^{ |
| 322 | + CNLiveAccessControlList *ControlList = [[CNLiveAccessControlList alloc] init]; | ||
| 323 | + [ControlList setContronAccess:CNLiveYun_Permission_Public_Read_Write]; | ||
| 324 | + CNLivePutObjectRequest *putObjRequest = [[CNLivePutObjectRequest alloc] initWithAcl:ControlList grantAcl:nil]; | ||
| 325 | + NSString *fileName = [[NSBundle mainBundle] pathForResource:@"7.6M" ofType:@"mov"]; | ||
| 326 | + putObjRequest.data = [NSData dataWithContentsOfFile:fileName options:NSDataReadingMappedIfSafe error:nil]; | ||
| 327 | + _fileSize = putObjRequest.data.length; | ||
| 328 | + | ||
| 329 | + putObjRequest.delegate = self; | ||
| 330 | + putObjRequest.filename = _bucketKey; | ||
| 331 | + putObjRequest.contentMd5 = [CNLiveSDKUtil base64md5FromData:putObjRequest.data]; | ||
| 332 | + [putObjRequest setCompleteRequest]; | ||
| 333 | + | ||
| 334 | + NSArray *array = [putObjRequest.CNYHeader componentsSeparatedByString:@"\n"]; | ||
| 335 | + NSString *headers = [array firstObject]; | ||
| 336 | + | ||
| 337 | + [CNLiveUpload getTokenWithMd5:putObjRequest.contentMd5 verb:putObjRequest.httpMethod type:putObjRequest.contentType res:putObjRequest.CNYResource headers:headers date:putObjRequest.strDate success:^(NSString *token ,NSString *cnliveDate) { | ||
| 338 | + [putObjRequest setStrCNLiveToken:token]; | ||
| 339 | + [putObjRequest setStrDate:cnliveDate]; | ||
| 340 | + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ | ||
| 341 | + CNLivePutObjectResponse *response = [[CNLiveClient initialize] putObject:putObjRequest]; | ||
| 342 | + | ||
| 343 | + //putObjRequest若没设置代理,则是同步的下方判断, | ||
| 344 | + //putObjRequest若设置了代理,则走上传代理回调, | ||
| 345 | + if (putObjRequest.delegate == nil) { | ||
| 346 | + NSLog(@"%@",[[NSString alloc] initWithData:response.body encoding:NSUTF8StringEncoding]); | ||
| 347 | + if (response.httpStatusCode == 200) { | ||
| 348 | + NSLog(@"Put object success"); | ||
| 349 | + } | ||
| 350 | + else { | ||
| 351 | + NSLog(@"Put object failed"); | ||
| 352 | + } | ||
| 361 | } | 353 | } |
| 362 | - } | ||
| 363 | - }); | 354 | + }); |
| 355 | + } failure:^(NSDictionary *error) { | ||
| 356 | + NSLog(@"error %@",error); | ||
| 357 | + }]; | ||
| 364 | } failure:^(NSDictionary *error) { | 358 | } failure:^(NSDictionary *error) { |
| 365 | NSLog(@"error %@",error); | 359 | NSLog(@"error %@",error); |
| 366 | }]; | 360 | }]; |
CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo/cnlive.mp4
0 → 100644
No preview for this file type