2016-07-08 4 views
9

Я работаю над приложением, которое требует редактирования видео (установка оверлей). Теперь, когда видеоролики, снятые с iPhone, редактируются в порядке, те, которые снимаются с телефонов Android, получают пустой после редактирования.Видеоролики, снятые с телефонов Android, разрушаются после редактирования с помощью AVFoundation iOS

Я не могу представить, в чем проблема. Я был бы признателен за немедленную помощь.

Это один из методов (функциональность Trim).

- (IBAction)cutButtonTapped:(id)sender { 

    hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.mode = MBProgressHUDModeText; 
    hud.labelText = @"Encoding..."; 

    [self.playButton setBackgroundImage:[UIImage imageNamed:@"video_pause.png"] forState:UIControlStateNormal]; 



    NSString *uniqueString = [[NSProcessInfo processInfo]globallyUniqueString]; 

//do this to export video 
    NSURL *videoFileUrl = [NSURL fileURLWithPath:[AppHelper userDefaultsForKey:@"videoURL"]]; 

    AVAsset *anAsset = [[AVURLAsset alloc] initWithURL:videoFileUrl options:nil]; 
    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:anAsset]; 

    if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) { 

     self.exportSession_ = [[AVAssetExportSession alloc] 
          initWithAsset:anAsset presetName:AVAssetExportPresetPassthrough]; 
    // Implementation continues. 

    //  NSURL *furl = [self newURLWithName:[uniqueString stringByAppendingString:@".mov"]]; 
      NSURL *furl = [self newURLWithName:[uniqueString stringByAppendingString:[NSString stringWithFormat:@".%@",[videoFileUrl pathExtension]]]]; 

    self.exportSession_.outputURL = furl; 
    self.exportSession_.outputFileType = AVFileTypeMPEG4; 

    CMTime start = CMTimeMakeWithSeconds(self.startTime, anAsset.duration.timescale); 
    CMTime duration = CMTimeMakeWithSeconds(self.stopTime-self.startTime, anAsset.duration.timescale); 
    CMTimeRange range = CMTimeRangeMake(start, duration); 
    CMTimeShow(self.exportSession_.timeRange.duration); 
    self.exportSession_.timeRange = range; 
    CMTimeShow(self.exportSession_.timeRange.duration); 

    [self.exportSession_ exportAsynchronouslyWithCompletionHandler:^{ 

     switch ([self.exportSession_ status]) { 
      case AVAssetExportSessionStatusFailed: 
       NSLog(@"Export failed: %@", [[self.exportSession_ error] localizedDescription]); 
       break; 
      case AVAssetExportSessionStatusCancelled: 
       NSLog(@"Export canceled"); 
       break; 
      default: 
       NSLog(@"NONE"); 
       dispatch_async(dispatch_get_main_queue(), ^{ 

//       [self playDocumentDirectoryVideoWithURLString:[uniqueString stringByAppendingString:@".mov"]]; 
         [self playDocumentDirectoryVideoWithURLString:[uniqueString stringByAppendingString:[NSString stringWithFormat:@".%@",[videoFileUrl pathExtension]]]]; 

       }); 
     } 
    }]; 
} 

}

Может кто-нибудь, пожалуйста, помогите мне с этим?

+0

Там что-то я не понимаю: у вас есть проблемы с приложением IOS или сделать ваш имеют проблемы с Android приложения ? Я имею в виду, что я понимаю, что у вас есть проблема с видеороликами, снятыми на телефоне Android, когда вы хотите редактировать эти видео на iPhone. Но я думаю, что ваша проблема: ваше приложение iOS работает хорошо, ваше приложение для Android этого не делает. – Randy

+0

В приложении для Android такой проблемы нет. Библиотека FTMPEG использовалась там для всего процесса редактирования видео. Но в приложении iOS я использовал AVFoundation для выполнения всех задач редактирования видео (вырезание, скорость, наложение, слияние). хорошо работает для видео, снятых с iPhone, но не для видео, снятых с android. – Reckoner

+0

Не могли бы вы показать нам свой код? – Randy

ответ

1

Прежде всего, я рекомендую вам проверить duration & range значения. Это похоже на проблему с CMTime и декодированием. И второй, попробуйте инициализировать ваш AVURLAsset с возможностью заставить экстракцию продолжительность:

AVAsset *anAsset = [[AVURLAsset alloc] initWithURL:videoFileUrl options:@{AVURLAssetPreferPreciseDurationAndTimingKey: @(YES)}]; 
+0

По-прежнему та же проблема. – Reckoner

+0

Если у вас есть шанс, вы можете прикрепить видео до обработки и после? – dive

+0

Да, я приложу это позже сегодня. Но я думаю, что я нашел проблему. Проблема в том, что когда я пытаюсь настроить слой инструкции для настройки ориентации видео, я сталкиваюсь с этой проблемой. Но вопрос в том, почему только на видеороликах android ? – Reckoner

 Смежные вопросы

  • Нет связанных вопросов^_^