2012-02-21 5 views
0

У меня есть приложение для iPhone, которое загружает изображения и видео в веб-службу с помощью ASIHTTPRequest. Все работает отлично на устройствах под управлением iOS 5, но сработает на устройствах 4.3 и ниже после возврата из UIImagePickerController. Видео сжато bu = y сборщиком, затем приложение выйдет из строя. Ниже приведен код из метода - (void) imagePickerController: didFinishPickingMediaWithInfo:, а также из метода, который отправляет видео на сервер, и метода, который захватывает изображение из видео для использования в качестве миниатюры. Любые идеи о том, что вызывает сбои в 4.3?iOS 4.3 сбой при загрузке видео

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

self.mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 

if ([self.mediaType isEqualToString:(NSString *)kUTTypeMovie]) 
{ 
    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; 

    // Get asset to use for orientation determination 
    AVAsset *myAsset = [AVAsset assetWithURL:videoURL]; 

    self.videoOrientation = [self UIInterfaceOrientationToString:[self orientationForTrack:myAsset]]; 

    UIImage *videoThumbnail = [self getVideoThumbnailFromAVAsset:myAsset]; 
    self.photoImageView.image = videoThumbnail; 

    self.videoData = [[NSMutableData alloc]initWithContentsOfURL:videoURL]; 
} 
[self dismissModalViewControllerAnimated:YES]; 
} 

-(UIImage*)getVideoThumbnailFromAVAsset:(AVAsset *)myAsset { 
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:myAsset]; 

Float64 durationSeconds = CMTimeGetSeconds([myAsset duration]); 
CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600); 
NSError *error = nil; 
CMTime actualTime; 
UIImage *myImage; 

CGImageRef halfWayImage = [imageGenerator copyCGImageAtTime:midpoint actualTime:&actualTime error:&error]; 

if (halfWayImage != NULL) { 
    myImage = [UIImage imageWithCGImage:halfWayImage]; 
    CGImageRelease(halfWayImage); 
} 
return myImage; 
} 

- (void)postMessage:(id)sender { 

self.uploadButton.enabled = NO; 
[self.descriptionTextField resignFirstResponder]; 
[self.titleTextField resignFirstResponder]; 

NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; 
NSString *sessionKey = [settings stringForKey: @"sessionKey"]; 

// build URL for request 
NSString *baseURL; 
NSString *endPoint; 

// code here that creates the url component strings baseURL and endPoint 

NSString *fullURL = [NSString stringWithFormat:@"%@%@", baseURL, endPoint]; 
NSURL *url = [NSURL URLWithString:fullURL]; 

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
request.postFormat = ASIMultipartFormDataPostFormat; 

NSString *teamIDStr = [NSString stringWithFormat:@"%d",[self.teamID intValue]]; 

[request setPostValue:sessionKey forKey:@"sessionKey"]; 
[request setPostValue:teamIDStr forKey:@"TeamID"]; 
[request setPostValue:titleTextField.text forKey:@"lessonName"]; 
[request setPostValue:descriptionTextField.text forKey:@"lessonDesc"]; 
[request setPostValue:self.videoOrientation forKey:@"videoOrientation"]; 

//create video file name 
NSDate *date1=[NSDate date]; 
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init]; 
[formatter1 setDateFormat:@"hhmm"]; 
NSString *valuestr = [formatter1 stringFromDate:date1]; 
NSString *moviename = [NSString stringWithFormat:@"video_%@.mov", valuestr]; 

[request setData:self.videoData withFileName:moviename andContentType:@"video/quicktime" forKey:@"file1.mov"]; 

[request setUploadProgressDelegate:self.progressBar]; 
[request setShowAccurateProgress:YES]; 
self.progressBar.hidden = NO; 
[request setDelegate:self]; 
[request setTimeOutSeconds:600]; 
[request startAsynchronous]; 

} 
+0

делает его падение на тренажере, и вы могли бы найти, где он выходит из строя? то вы, вероятно, сможете ответить на вопрос :) –

+0

Мне не удалось выяснить, как добавить видео в симулятор. Когда я помещаю их в каталог, где сохраненные фотографии хранят изображения, они не отображаются в UIImagePickerVirewController – Alpinista

+0

'NSLog (@" Documents:% @ ", [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0]); Может,? –

ответ

4

Простого ответ на этот вопрос: Метод AVAsset класса

+ (id)assetWithURL:(NSURL *)URL 

не доступен до прошивки 5.0. Вы должны использовать конкретный подкласс AVURLAsset для создания экземпляра AVAsset для прошивки 4.0 и 4.3, используя его метод класса

+ (AVURLAsset *)URLAssetWithURL:(NSURL *)URL options:(NSDictionary *)options 
Смежные вопросы