Commit afd7749ba04e50405683956534d6d6fbc96d27b9

Authored by 张旭
1 parent 3bf2be22

修改Demo

CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo.xcodeproj/project.pbxproj
... ... @@ -16,7 +16,6 @@
16 16 81B9CBA11F54204F009594FB /* CNLiveUploadController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81B9CBA01F54204F009594FB /* CNLiveUploadController.m */; };
17 17 81B9CBA81F54207B009594FB /* KS3YunSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */; };
18 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 */; };
20 19 D21D75D51FE0C9C700658839 /* cnlive.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = D21D75D41FE0C9C600658839 /* cnlive.mp4 */; };
21 20 D2DD1B311FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */; };
22 21 D2DD1B331FDFDA6F001DFDD1 /* CNLiveUploadYunSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
... ... @@ -51,7 +50,6 @@
51 50 81B9CB9F1F54204F009594FB /* CNLiveUploadController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CNLiveUploadController.h; sourceTree = "<group>"; };
52 51 81B9CBA01F54204F009594FB /* CNLiveUploadController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CNLiveUploadController.m; sourceTree = "<group>"; };
53 52 81B9CBA31F54205E009594FB /* KS3YunSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = KS3YunSDK.framework; sourceTree = "<group>"; };
54   - 81B9CBAD1F5421C6009594FB /* 7.6M.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = 7.6M.mov; sourceTree = "<group>"; };
55 53 D21D75D41FE0C9C600658839 /* cnlive.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = cnlive.mp4; sourceTree = "<group>"; };
56 54 D2DD1B301FDFDA6C001DFDD1 /* CNLiveUploadYunSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveUploadYunSDK.framework; sourceTree = "<group>"; };
57 55 /* End PBXFileReference section */
... ... @@ -96,7 +94,6 @@
96 94 81B9CB8F1F542006009594FB /* ViewController.m */,
97 95 81B9CB9F1F54204F009594FB /* CNLiveUploadController.h */,
98 96 81B9CBA01F54204F009594FB /* CNLiveUploadController.m */,
99   - 81B9CBAD1F5421C6009594FB /* 7.6M.mov */,
100 97 D21D75D41FE0C9C600658839 /* cnlive.mp4 */,
101 98 81B9CB911F542006009594FB /* Main.storyboard */,
102 99 81B9CB941F542006009594FB /* Assets.xcassets */,
... ... @@ -142,7 +139,7 @@
142 139 81B9CB7D1F542006009594FB /* Project object */ = {
143 140 isa = PBXProject;
144 141 attributes = {
145   - LastUpgradeCheck = 0830;
  142 + LastUpgradeCheck = 0920;
146 143 ORGANIZATIONNAME = zhulin;
147 144 TargetAttributes = {
148 145 81B9CB841F542006009594FB = {
... ... @@ -175,7 +172,6 @@
175 172 isa = PBXResourcesBuildPhase;
176 173 buildActionMask = 2147483647;
177 174 files = (
178   - 81B9CBAE1F5421C6009594FB /* 7.6M.mov in Resources */,
179 175 D21D75D51FE0C9C700658839 /* cnlive.mp4 in Resources */,
180 176 81B9CB981F542006009594FB /* LaunchScreen.storyboard in Resources */,
181 177 81B9CB951F542006009594FB /* Assets.xcassets in Resources */,
... ... @@ -229,7 +225,9 @@
229 225 CLANG_CXX_LIBRARY = "libc++";
230 226 CLANG_ENABLE_MODULES = YES;
231 227 CLANG_ENABLE_OBJC_ARC = YES;
  228 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
232 229 CLANG_WARN_BOOL_CONVERSION = YES;
  230 + CLANG_WARN_COMMA = YES;
233 231 CLANG_WARN_CONSTANT_CONVERSION = YES;
234 232 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
235 233 CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
... ... @@ -237,7 +235,11 @@
237 235 CLANG_WARN_ENUM_CONVERSION = YES;
238 236 CLANG_WARN_INFINITE_RECURSION = YES;
239 237 CLANG_WARN_INT_CONVERSION = YES;
  238 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  239 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
240 240 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  241 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  242 + CLANG_WARN_STRICT_PROTOTYPES = YES;
241 243 CLANG_WARN_SUSPICIOUS_MOVE = YES;
242 244 CLANG_WARN_UNREACHABLE_CODE = YES;
243 245 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
... ... @@ -278,7 +280,9 @@
278 280 CLANG_CXX_LIBRARY = "libc++";
279 281 CLANG_ENABLE_MODULES = YES;
280 282 CLANG_ENABLE_OBJC_ARC = YES;
  283 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
281 284 CLANG_WARN_BOOL_CONVERSION = YES;
  285 + CLANG_WARN_COMMA = YES;
282 286 CLANG_WARN_CONSTANT_CONVERSION = YES;
283 287 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
284 288 CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
... ... @@ -286,7 +290,11 @@
286 290 CLANG_WARN_ENUM_CONVERSION = YES;
287 291 CLANG_WARN_INFINITE_RECURSION = YES;
288 292 CLANG_WARN_INT_CONVERSION = YES;
  293 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  294 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
289 295 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  296 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  297 + CLANG_WARN_STRICT_PROTOTYPES = YES;
290 298 CLANG_WARN_SUSPICIOUS_MOVE = YES;
291 299 CLANG_WARN_UNREACHABLE_CODE = YES;
292 300 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
... ...
CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo/7.6M.mov deleted 100755 → 0
No preview for this file type
CNLiveUploadYunSDKDemo/CNLiveUploadYunSDKDemo/CNLiveUploadController.m
... ... @@ -9,6 +9,7 @@
9 9 #import "CNLiveUploadController.h"
10 10 #import <AssetsLibrary/AssetsLibrary.h>
11 11 #import <CNLiveUploadYunSDK/CNLiveUploadYunSDK.h>
  12 +#import <MobileCoreServices/MobileCoreServices.h>
12 13  
13 14 #define mScreenWidth ([UIScreen mainScreen].bounds.size.width)
14 15 #define mScreenHeight ([UIScreen mainScreen].bounds.size.height)
... ... @@ -19,11 +20,14 @@
19 20 #define keyUploadPartNum @"partNum" //需要app本地存储已经传成功的块号,demo为了演示,用NSUserDefaults存储,app可用数据库等
20 21 #define keyUploadId @"uploadId" //需要app本地存储已经初始化成功的uploadId,用于断点续传,demo为了演示,用NSUserDefaults存储,app可用数据库等
21 22  
22   -@interface CNLiveUploadController ()<UITableViewDelegate,UITableViewDataSource,KingSoftServiceRequestDelegate>
  23 +@interface CNLiveUploadController ()<UITableViewDelegate,UITableViewDataSource,KingSoftServiceRequestDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
23 24 {
  25 + NSURL *_imageAssetUrl;//相册文件URL
  26 + CNLiveUploadType _uploadType;//选择文件方式type
24 27 NSString *_bucketKey;//SP上传时用到的bucket里文件的路径(包含扩展名)
25 28 }
26 29 @property (nonatomic ,strong) UITableView * tableView;//列表
  30 +@property (nonatomic ,strong) UIButton * styleBtn;//上传方式按钮
27 31  
28 32 @property (assign, nonatomic) long long fileSize;//文件大小
29 33 @property (assign, nonatomic) NSInteger partSize;//单块大小
... ... @@ -42,78 +46,49 @@
42 46 // Do any additional setup after loading the view.
43 47 self.view.backgroundColor = [UIColor whiteColor];
44 48 self.navigationItem.title = @"上传";
45   - _arrItems = [NSArray arrayWithObjects:@"Multipart Upload", @"Abort Upload", @"Put Object", nil];
  49 + _arrItems = [NSArray arrayWithObjects:@"Multipart Upload", @"Abort Multipart Upload", @"Put Single Object", nil];
46 50  
47   - self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
  51 + self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, CGRectGetMinY(self.view.frame), mScreenWidth, mScreenHeight-100)];
48 52 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CNLiveUpload"];
49 53 [self.view addSubview:self.tableView];
50 54 self.tableView.delegate = self;
51 55 self.tableView.dataSource = self;
52 56  
  57 + [self.view addSubview:self.styleBtn];
53 58 [self getBucketKeyFromServer];
54 59 }
55 60  
56   -
57 61 /**
58 62 从服务器获取BucketKey,BucketKey为文件路径
59 63 */
60   -- (void)getBucketKeyFromServer
  64 +- (NSString *)getBucketKeyFromServer
61 65 {
62   -#warning 此处建议从server获取 上传文件对应的bucketKey(文件路径包含扩展名)
  66 +#warning 此处建议从server获取,为每一个上传的文件分配唯一的bucketKey,上传文件对应的bucketKey(文件路径包含扩展名). 例:完整bucketKey为@"cnlive-test/cnlive.mp4",可由服务器返回@"cnlive-test/cnlive",扩展名@".mp4"由开发者拼接,组成完整的bucketKey
63 67 #warning Demo为了演示 bucketKey用固定值
64   - _bucketKey = @"cnlive-test/cnlive.mp4";
  68 + _bucketKey = @"cnlive-uploadtest/cnlive.mp4";//本地工程文件
  69 + return _bucketKey;
65 70 }
66 71  
67   -#pragma mark 相册方法
68   -/*
69   - 这里,枚举模拟器相册所有的视频,模拟器只有一个只能获得开头传入的7.6M视频,
70   - 具体工程使用时根据具体逻辑,获取到Alasset即可
71   - KS3Client 方法:
72   - - (NSData *)getUploadPartDataWithPartNum:(NSInteger)partNum
73   - partLength:(NSInteger)partlength
74   - alassetURL:(NSURL *)alassetURL;
75   -
76   - - (NSData *)getUploadPartDataWithPartNum:(NSInteger)partNum
77   - partLength:(NSInteger)partlength
78   - Alasset:(ALAsset *)assets;
79   -
80   - - (ALAsset *)getAlassetFromAlassetURL:(NSURL *)alassetURL;
81   -
82   - */
83   -- (ALAsset *)getAlasset
  72 +- (NSString *)bucketKey
84 73 {
85   - ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
86   - __block ALAsset *assets ;
87   - dispatch_semaphore_t sem= dispatch_semaphore_create(0);
88   - dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_SERIAL);
89   - dispatch_async(concurrentQueue, ^{
90   - [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
91   - if (group) {
92   - [group setAssetsFilter:[ALAssetsFilter allVideos]];
93   - [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
94   - if (result) {
95   - assets = result;
96   - NSLog(@"url = %@",assets.defaultRepresentation.url);
97   - dispatch_semaphore_signal(sem);
98   - return ;
99   - }
100   - }];
101   - dispatch_semaphore_signal(sem);
102   - }else
103   - {
104   - // NSLog(@"group为空,枚举失败");
105   - }
106   - dispatch_semaphore_signal(sem);
107   - } failureBlock:^(NSError *error) {
108   -
109   - NSLog(@"请到设置->隐私->照片中开启,访问照片库的权限");
110   - dispatch_semaphore_signal(sem);
111   - }];
112   - });
113   -
114   - dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
115   -
116   - return assets;
  74 + switch (_uploadType) {
  75 + case kCNLiveUploadNormal:
  76 + {//本地文件
  77 + _bucketKey = [self getBucketKeyFromServer];
  78 + }
  79 + break;
  80 + case kCNLiveUploadAlasset:
  81 + {//相册选取的文件,重新拼接扩展名
  82 + NSString *bucketKeyUnExt = [[self getBucketKeyFromServer] substringToIndex:_bucketKey.length - 4];
  83 + NSArray *arr = [_imageAssetUrl.absoluteString componentsSeparatedByString:@"ext="];
  84 + NSString *ext = arr[1];
  85 + _bucketKey = [NSString stringWithFormat:@"%@.%@",bucketKeyUnExt,ext];
  86 + }
  87 + break;
  88 + default:
  89 + break;
  90 + }
  91 + return _bucketKey;
117 92 }
118 93  
119 94 #pragma mark 上传方法
... ... @@ -137,7 +112,8 @@
137 112 - (void)beginMultipartUpload
138 113 {
139 114 [CNLiveUpload initCNLiveUploadWithSuccess:^{
140   - NSString *strKey = _bucketKey;
  115 +
  116 + NSString *strKey = [self bucketKey];
141 117 _partSize = 5; // 文件大于5M为最小5M一块
142 118  
143 119 CNLiveAccessControlList *acl = [[CNLiveAccessControlList alloc] init];
... ... @@ -160,12 +136,12 @@
160 136 }
161 137  
162 138 //选择相册还是普通方式
163   - _muilt.uploadType = kCNLiveUploadNormal;
  139 + _muilt.uploadType = _uploadType;
164 140  
165 141 //根据文件路径不一样,有如下两种上传
166 142 if (_muilt.uploadType == kCNLiveUploadNormal) { //如果是沙盒或者工程里的文件
167 143 //工程里,沙盒里,是沙盒路径
168   - NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"7.6M" ofType:@"mov"];
  144 + NSString *strFilePath = [[NSBundle mainBundle] pathForResource:@"cnlive" ofType:@"mp4"];
169 145 _fileHandle = [NSFileHandle fileHandleForReadingAtPath:strFilePath];
170 146 _fileSize = [_fileHandle availableData].length;
171 147 if (_fileSize <= 0) {
... ... @@ -182,7 +158,9 @@
182 158 }else
183 159 {
184 160 //如果是相册里的,从这传
185   - ALAssetRepresentation *assetD = [self getAlasset].defaultRepresentation;
  161 + ALAsset *assets = [[CNLiveClient initialize] getAlassetFromAlassetURL:_imageAssetUrl];
  162 + ALAssetRepresentation *assetD = assets.defaultRepresentation;
  163 +
186 164 _fileSize = assetD.size;
187 165 if (_fileSize <= 0) {
188 166 NSLog(@"####This file is not exist!####");
... ... @@ -248,7 +226,8 @@
248 226 NSData *data = nil;
249 227 if (_muilt.uploadType == kCNLiveUploadAlasset) {
250 228 //相册信息
251   - data = [[CNLiveClient initialize] getUploadPartDataWithPartNum:partNumber partLength:FileBlockSize Alasset:[self getAlasset]];
  229 + ALAsset *assets = [[CNLiveClient initialize] getAlassetFromAlassetURL:_imageAssetUrl];
  230 + data = [[CNLiveClient initialize] getUploadPartDataWithPartNum:partNumber partLength:FileBlockSize Alasset:assets];
252 231 }else
253 232 {
254 233 //沙盒路径
... ... @@ -310,7 +289,7 @@
310 289 NSLog(@"error: %@", response.error.description);
311 290 }
312 291 } failure:^(NSDictionary *error) {
313   - NSLog(@"error %@",error);
  292 +
314 293 }];
315 294 }
316 295  
... ... @@ -319,15 +298,16 @@
319 298 - (void)beginSingleUpload:(NSInteger) row
320 299 {
321 300 [CNLiveUpload initCNLiveUploadWithSuccess:^{
  301 +
322 302 CNLiveAccessControlList *ControlList = [[CNLiveAccessControlList alloc] init];
323 303 [ControlList setContronAccess:CNLiveYun_Permission_Public_Read_Write];
324 304 CNLivePutObjectRequest *putObjRequest = [[CNLivePutObjectRequest alloc] initWithAcl:ControlList grantAcl:nil];
325   - NSString *fileName = [[NSBundle mainBundle] pathForResource:@"7.6M" ofType:@"mov"];
  305 + NSString *fileName = [[NSBundle mainBundle] pathForResource:@"cnlive" ofType:@"mp4"];
326 306 putObjRequest.data = [NSData dataWithContentsOfFile:fileName options:NSDataReadingMappedIfSafe error:nil];
327 307 _fileSize = putObjRequest.data.length;
328 308  
329 309 putObjRequest.delegate = self;
330   - putObjRequest.filename = _bucketKey;
  310 + putObjRequest.filename = [self bucketKey];
331 311 putObjRequest.contentMd5 = [CNLiveSDKUtil base64md5FromData:putObjRequest.data];
332 312 [putObjRequest setCompleteRequest];
333 313  
... ... @@ -358,9 +338,11 @@
358 338 } failure:^(NSDictionary *error) {
359 339 NSLog(@"error %@",error);
360 340 }];
  341 +
361 342 }
362 343  
363   -#pragma mark - Action
  344 +#pragma mark -
  345 +#pragma mark - ButtonAction
364 346 - (void)uploadBtnClicked:(UIButton *)btn
365 347 {
366 348 btn.selected =! btn.selected;
... ... @@ -373,6 +355,7 @@
373 355 UIProgressView *progressView = (UIProgressView *)[self.view viewWithTag:199];
374 356 progressView.progress = 0;
375 357 [btn setTitle:@"开始" forState:UIControlStateNormal];
  358 + _uploadType = kCNLiveUploadNormal;
376 359 return;
377 360 }
378 361 [_muilt pause];
... ... @@ -380,6 +363,72 @@
380 363 }
381 364 }
382 365  
  366 +- (void)styleBtnAction
  367 +{
  368 + [self uploadStyle];
  369 +}
  370 +
  371 +- (void)uploadStyle
  372 +{
  373 + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"上传方式" message:@"默认上传方式为本地文件" preferredStyle:UIAlertControllerStyleActionSheet];
  374 + UIAlertAction *localAlert = [UIAlertAction actionWithTitle:@"本地文件" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  375 + _uploadType = kCNLiveUploadNormal;
  376 + }];
  377 + [alert addAction:localAlert];
  378 + UIAlertAction *albumAlert = [UIAlertAction actionWithTitle:@"相册文件" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  379 +
  380 + UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
  381 + imagePicker.delegate = self;
  382 + imagePicker.allowsEditing = YES;
  383 + imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;//相机相册
  384 + // 设置所支持的媒体功能,即只能拍照,或则只能录像,或者两者都可以
  385 +#warning 此处需要区分视频还是图片文件,获取上传资源路径([CNLiveUpload getUploadResourceUrlWithBucketKey:uploadType:success:failure:])时需要用到此CNLiveYun_UploadType,Demo演示相册中 视频文件的上传
  386 + // NSString *requiredMediaType = ( NSString *)kUTTypeImage;
  387 + NSString *requiredMediaType1 = ( NSString *)kUTTypeMovie;
  388 + NSArray *arrMediaTypes=[NSArray arrayWithObjects: requiredMediaType1,nil];//requiredMediaType
  389 + imagePicker.mediaTypes = arrMediaTypes;
  390 + [self presentViewController:imagePicker animated:YES completion:NULL];
  391 +
  392 + _uploadType = kCNLiveUploadAlasset;
  393 + }];
  394 + [alert addAction:albumAlert];
  395 + UIAlertAction *cancelAlert = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
  396 + [self dismissViewControllerAnimated:YES completion:NULL];
  397 + }];
  398 + [alert addAction:cancelAlert];
  399 + [self presentViewController:alert animated:YES completion:NULL];
  400 +}
  401 +
  402 +//#pragma mark 相册方法
  403 +///*
  404 +// 这里,枚举模拟器相册所有的视频,模拟器只有一个只能获得开头传入的cnlive.mp4视频,
  405 +// 具体工程使用时根据具体逻辑,获取到Alasset即可
  406 +//CNLiveClient 方法:
  407 +// - (NSData *)getUploadPartDataWithPartNum:(NSInteger)partNum
  408 +// partLength:(NSInteger)partlength
  409 +// alassetURL:(NSURL *)alassetURL;
  410 +//
  411 +// - (NSData *)getUploadPartDataWithPartNum:(NSInteger)partNum
  412 +// partLength:(NSInteger)partlength
  413 +// Alasset:(ALAsset *)assets;
  414 +//
  415 +// - (ALAsset *)getAlassetFromAlassetURL:(NSURL *)alassetURL;
  416 +//
  417 +// */
  418 +#pragma mark - UIImagePickerControllerDelegate
  419 +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
  420 +{
  421 + NSURL *imageAssetUrl = [info objectForKey:UIImagePickerControllerReferenceURL];
  422 + _imageAssetUrl = imageAssetUrl;
  423 + [self dismissViewControllerAnimated:YES completion:NULL];
  424 +}
  425 +
  426 +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
  427 +{
  428 + [self dismissViewControllerAnimated:YES completion:NULL];
  429 + NSLog(@"cancel");
  430 +}
  431 +
383 432 #pragma mark - UITableView datasource
384 433 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
385 434 {
... ... @@ -446,10 +495,11 @@
446 495 if ([request isKindOfClass:[KS3PutObjectRequest class]]) {
447 496 if (response.httpStatusCode == 200) {
448 497 NSLog(@"单块上传成功");
449   - [CNLiveUpload getUploadResourceUrlWithBucketKey:_bucketKey uploadType:CNLiveYun_UploadType_VideoFile success:^(NSString *resUrl) {
  498 +#warning 根据选择的文件类型更改CNLiveYun_UploadType,Demo演示视频路径的获取
  499 + [CNLiveUpload getUploadResourceUrlWithBucketKey:[self bucketKey] uploadType:CNLiveYun_UploadType_VideoFile success:^(NSString *resUrl) {
450 500 NSLog(@"资源路径: %@",resUrl);
451 501 } failure:^(NSDictionary *error) {
452   - NSLog(@"error%@",error);
  502 + NSLog(@"error: %@",error);
453 503 }];
454 504 }else
455 505 {
... ... @@ -499,7 +549,8 @@
499 549 [mUserDefaults setInteger:0 forKey:keyUploadPartNum];
500 550 _uploadNum = 0 ;
501 551 [mUserDefaults synchronize];
502   - [CNLiveUpload getUploadResourceUrlWithBucketKey:_bucketKey uploadType:CNLiveYun_UploadType_VideoFile success:^(NSString *resUrl) {
  552 +#warning 根据选择的文件类型更改CNLiveYun_UploadType,Demo演示视频路径的获取
  553 + [CNLiveUpload getUploadResourceUrlWithBucketKey:[self bucketKey] uploadType:CNLiveYun_UploadType_VideoFile success:^(NSString *resUrl) {
503 554 NSLog(@"资源路径: %@",resUrl);
504 555 } failure:^(NSDictionary *error) {
505 556 NSLog(@"error: %@",error);
... ... @@ -576,11 +627,23 @@
576 627 }
577 628 }
578 629  
  630 +#pragma mark - Lazy
  631 +- (UIButton *)styleBtn
  632 +{
  633 + if (!_styleBtn)
  634 + {
  635 + _styleBtn = [[UIButton alloc] initWithFrame:CGRectMake(mScreenWidth *0.5-70, CGRectGetMaxY(self.tableView.frame) + 20, 140, 30)];
  636 + [_styleBtn setTitle:@"选择上传方式" forState:UIControlStateNormal];
  637 + [_styleBtn addTarget:self action:@selector(styleBtnAction) forControlEvents:UIControlEventTouchUpInside];
  638 + _styleBtn.backgroundColor = [UIColor redColor];
  639 + }
  640 + return _styleBtn;
  641 +}
  642 +
579 643 - (void)didReceiveMemoryWarning {
580 644 [super didReceiveMemoryWarning];
581 645 // Dispose of any resources that can be recreated.
582 646 }
583   -
584 647 /*
585 648 #pragma mark - Navigation
586 649  
... ...