#iphone #avfoundation #avassetexportsession
#iPhone #avfoundation #avassetexportsession
Вопрос:
Я пытаюсь обрезать видео, используя следующий код:
AVURLAsset *videoAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@.mp4",documentsDirectory,name]] options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:videoAsset presetName:AVAssetExportPresetHighestQuality];
NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@/finalOutput.mp4",documentsDirectory]];
exportSession.outputURL = url;
NSLog(@"outputting to: %@", [NSString stringWithFormat:@"%@/finalOutput.mp4",documentsDirectory,name]);
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
CMTimeRange timeRange = CMTimeRangeMake(flashbackStart, CMTimeSubtract(flashbackEnd, flashbackStart));
exportSession.timeRange = timeRange;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch (exportSession.status) {
case AVAssetExportSessionStatusCompleted:
// Custom method to import the Exported Video
//[self loadAssetFromFile:exportSession.outputURL];
NSLog(@"completed!!!");
break;
case AVAssetExportSessionStatusFailed:
//
NSLog(@"Failed:%@",exportSession.error);
break;
case AVAssetExportSessionStatusCancelled:
//
NSLog(@"Canceled:%@",exportSession.error);
break;
default:
break;
}
}];
Тем не менее, я получаю ошибку неправильного доступа для этой строки:
[exportSession exportAsynchronouslyWithCompletionHandler:^{
Даже при включенном NSZombie я не получаю никаких подробностей об ошибке. Кто-нибудь может объяснить, что здесь происходит? Входной видеофайл существует, а выходной видеофайл не существует до того, как я попытаюсь выполнить запись в него.
Спасибо, Джеймс
Ответ №1:
Оказывается, проблема была в NSURL
s, которые я использовал. Все, что мне нужно было сделать, это использовать initFileURLWithPath
, и проблема была решена!
Ответ №2:
Возможно, у вас возникла проблема с типом хранилища. Попробуйте добавить __block к вашей exportSession.
__block AVAssetExportSession *exportSession...
Вы можете прочитать больше здесь:
Комментарии:
1. Спасибо за ответ, но это ничего не изменило.
2. Вы выпускаете exportSession после этого кода в вопросе?