2011-11-04 58 views
1

林采摘从UIImagePicker视频,视频随后被上传到我的服务器。我希望视频的质量保持不变。截至目前,该视频与我直接从手机上拿下的视频相比质量稍差,而且分辨率较低。全面质量有关视频上传

这里是我的代码:

-(IBAction)video:(id)sender{ 
UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
picker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil]; 
picker.allowsEditing = YES; 
picker.wantsFullScreenLayout = YES; 
picker.videoQuality = UIImagePickerControllerQualityTypeHigh; 
[self presentModalViewController:picker animated:YES]; 
} 



- (NSData *)generatePostDataForData:(NSData *)uploadData 
{ 
// Generate the post header: 
NSString *post = [NSString stringWithCString:"--AaB03x\r\nContent-Disposition: form-data;  name=\"upload[file]\"; filename=\"somefile\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n" encoding:NSASCIIStringEncoding]; 

// Get the post header int ASCII format: 
NSData *postHeaderData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

// Generate the mutable data variable: 
NSMutableData *postData = [[NSMutableData alloc] initWithLength:[postHeaderData length] ]; 
[postData setData:postHeaderData]; 

// Add the image: 
[postData appendData: uploadData]; 

// Add the closing boundry: 
[postData appendData: [@"\r\n--AaB03x--" dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]]; 

// Return the post data: 
return postData; 
} 

- (void)post:(NSData *)fileData 
{ 

NSData *videoData = fileData; 
NSString *urlString = @"http://www.site.com/scripts/upload.php"; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\".mov\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:videoData]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPBody:body]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

NSLog(@"%@", returnString); 
} 


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 
[self dismissModalViewControllerAnimated:YES]; 
//assign the mediatype to a string 
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 

//check the media type string so we can determine if its a video 
    NSLog(@"got a movie"); 
    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; 
    NSData *webData = [NSData dataWithContentsOfURL:videoURL]; 
    [self post:webData]; 


} 

设置采摘质量高我想会做到这一点,我想不会。我可以选择以720p格式导出,但是我希望iPhone 4以1080p格式上传。

任何帮助将是伟大的。谢谢:d

回答

1

您不能跳过烦人的压缩步骤,UIImagePicker坚持做下去。您可以高品质的视频使用UIImagePickerControllerReferenceURL键搞定,但是从长远压缩步骤对我来说是一个大忌。

所以去记录错误,然后检查了这个优秀的drop in replacement

+0

好吧,我想虐待使用这个代替即可。谢谢:d – Jacob

+0

@Rhythmic如何才能在得到UIImagePickerControllerReferenceURL绝对文件路径,我想使用photopicker-IOS,但它不返回uiimagepickercontrollermediaurl – thavasidurai

+0

我不知道,我最后写一个替换照片/视频库浏览器。 –