瀏覽代碼

1.视频上传二次切片

huangxiaodong 1 年之前
父節點
當前提交
c1647c22d1
共有 1 個文件被更改,包括 64 次插入42 次删除
  1. 64 42
      创维盒子/双子星云手机/CloudPlayer/PlayerViewController+otherDelegate.mm

+ 64 - 42
创维盒子/双子星云手机/CloudPlayer/PlayerViewController+otherDelegate.mm

@@ -157,14 +157,20 @@
 //每次从文件重新切一片 传一片
 -(void)beginGotoUploadVidelFun:(NSNumber*)fileLengthNum{
     
-//    NSData *data = [self cutVideoFileFunAtIndex:0];
-//    HLog(@"data leng:%ld",[data length]);
-//    return;
-    
-    NSString*videoPathStr = [cachesFileManager getFilePathWithName:self.curUploadFileDataMod.filename type:uploadFileTypeVideo];
-    self.AllFileData = [NSData dataWithContentsOfFile:videoPathStr];
+    NSData *data = [self cutVideoFileFunAtIndex:fileLengthNum.longLongValue];
+    HLog(@"data leng:%ld",[data length]);
+
+    self.AllFileData = data;
+    self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData withDidUpLoadSize:0];
+    self.indexOfUploadFlie = 0;
+    HLog(@"data leng:%ld",[data length]);
     
-    self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData withDidUpLoadSize:[fileLengthNum integerValue]];
+    //return;
+
+//    NSString*videoPathStr = [cachesFileManager getFilePathWithName:self.curUploadFileDataMod.filename type:uploadFileTypeVideo];
+//    self.AllFileData = [NSData dataWithContentsOfFile:videoPathStr];
+
+   // self.cutFileDataArr = [self fileCutPartsBy:self.AllFileData withDidUpLoadSize:[fileLengthNum integerValue]];
     
     if(!self.cutFileDataArr){
         [self clearUploadFileDataFun];
@@ -196,17 +202,17 @@
     NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath]; // 创建文件句柄
       
     // 设置分段读取的大小,这里以每次读取1KB为例
-    const NSUInteger chunkSize = 20 * 1024 *1024;
+    const NSUInteger chunkSize = 50 * 1024 *1024;
     NSMutableData *data = [NSMutableData data];
     
     if (fileHandle) {
-        
-        // 读取文件的分段数据到某个位置
-        if(dataIndex > 0){
+       
+        long long endOfFile = [fileHandle seekToEndOfFile];
+        if (endOfFile >=  chunkSize) {
+            
+            // 读取文件的分段数据到某个位置
             [fileHandle seekToFileOffset:dataIndex];
-        }
-        
-        if ([fileHandle seekToEndOfFile] >= [data length]) {
+            
             // 读取文件的分段数据
             NSData* chunk = [fileHandle readDataOfLength:chunkSize];
             if (chunk) {
@@ -214,6 +220,9 @@
             }
         }
         else{
+            // 读取文件的分段数据到某个位置
+            [fileHandle seekToFileOffset:dataIndex];
+            
             [data appendData:[fileHandle readDataToEndOfFile]];
         }
         
@@ -248,7 +257,14 @@
                     [[uploadFileManager shareInstance] uploadFileFailFun];
                     
                 }else if ([status isEqualToString:@"0"]){
-                    [self handleUploadingFun];
+                    
+                    NSNumber * fileLengthNum = @0;
+                    if ([[data allKeys] containsObject:@"fileLenth"])
+                    {
+                        fileLengthNum = data[@"fileLenth"];
+                    }
+                    
+                    [self handleUploadingFun:fileLengthNum];
                 }
             }
         }
@@ -295,7 +311,7 @@
 }
 
 #pragma mark 处理上传过程
-- (void)handleUploadingFun
+- (void)handleUploadingFun:(NSNumber*)fileLengthNum
 {
     if(self.isSuspendUploadType){
         //暂停
@@ -310,7 +326,8 @@
     
     if(self.indexOfUploadFlie < self.cutFileDataArr.count -1) {
         
-        NSInteger didUploadSize = (self.indexOfUploadFlie+1) * (self.cutFileEachPieceSzie);
+        //NSInteger didUploadSize = (self.indexOfUploadFlie+1) * (self.cutFileEachPieceSzie);
+        NSInteger didUploadSize = fileLengthNum.longLongValue;
         
         [[uploadFileManager shareInstance] changeUploadFileState:uploadStateUploading withDidUploadBytes:didUploadSize withModel:self.curUploadFileDataMod complete:^(BOOL isSuccess) {
 
@@ -319,6 +336,11 @@
         self.indexOfUploadFlie ++;
         [self upLoadFileFun];
     }
+    else if(self.curUploadFileDataMod.curUploadFileType == uploadFileTypeVideo && fileLengthNum && fileLengthNum.longLongValue < self.curUploadFileDataMod.totalBytes){
+        //视频做了二次切割 不一定上传完了
+        HLog(@"视频上传传完一片 再来一片");
+        [self beginGotoUploadVidelFun:fileLengthNum];
+    }
     else{
         HLog(@"上传完成");
         
@@ -356,8 +378,9 @@
     
     NSUInteger allLength = data.length;
     
-    NSUInteger subs = 100*1024;//4096;//要切片的大小,我这里设置的是4096字节
-    //NSUInteger subs = 8*1024;//4096;//要切片的大小,我这里设置的是4096字节
+    //NSUInteger subs = 100*1024;//4096;//要切片的大小,我这里设置的是4096字节
+    NSUInteger subs = 31*1024;//4096;//要切片的大小,内存没有暴增
+    
     self.cutFileEachPieceSzie = subs;
     
     NSInteger index = 0;//起始位置
@@ -378,30 +401,29 @@
     NSMutableArray *dataArray =[NSMutableArray new];
     
     do {
-
-        if (allLength>subs) {
-            
-            NSRange range =NSMakeRange(index*subs, subs);
-            
-            index++;
-            
-            //NSLog(@"%@",NSStringFromRange(range));
-            
-            [dataArray addObject:[data subdataWithRange:range]];
-            
-            allLength = allLength - subs;
-
-        }else{
-            
-            NSRange range = NSMakeRange(index*subs, allLength);
-            
-            //NSLog(@"%@",NSStringFromRange(range));
-            
-            [dataArray addObject:[data subdataWithRange:range]];
-
-            allLength = 0;
+        @autoreleasepool {
+            if (allLength>subs) {
+                
+                NSRange range =NSMakeRange(index*subs, subs);
+                
+                index++;
+                
+                //NSLog(@"%@",NSStringFromRange(range));
+                
+                [dataArray addObject:[data subdataWithRange:range]];
+                
+                allLength = allLength - subs;
+                
+            }else{
+                NSRange range = NSMakeRange(index*subs, allLength);
+                
+                //NSLog(@"%@",NSStringFromRange(range));
+                
+                [dataArray addObject:[data subdataWithRange:range]];
+                
+                allLength = 0;
+            }
         }
-
         
     } while (allLength>0);