2015-08-29 3 views
1

обрезка видео, затем я отправляю видео, обрезанное на устройство android, и я считаю, что аудио/видео не синхронизировано, звук находится на несколько секунд позади видео. но видео может нормально воспроизводиться на устройстве iOS. 1.I облицовку видео с кодами, как это:ios видео после обрезки, затем воспроизведение на аудио и видео устройствах без ios

- (IBAction)showTrimmedVideo:(UIButton *)sender 
{ 
[self deleteTmpFile]; 

NSURL *videoFileUrl = [NSURL fileURLWithPath:self.originalVideoPath]; 

AVAsset *anAsset = [[AVURLAsset alloc] initWithURL:videoFileUrl options:nil]; 
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:anAsset]; 
if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) { 

    self.exportSession = [[AVAssetExportSession alloc] 
          initWithAsset:anAsset presetName:AVAssetExportPresetHighestQuality]; 
    // Implementation continues. 

    NSURL *furl = [NSURL fileURLWithPath:self.tmpVideoPath]; 

    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); 
    self.exportSession.timeRange = range; 

    self.trimBtn.hidden = YES; 
    self.myActivityIndicator.hidden = NO; 
    [self.myActivityIndicator startAnimating]; 
    [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.myActivityIndicator stopAnimating]; 
        self.myActivityIndicator.hidden = YES; 
        self.trimBtn.hidden = NO; 
        [self playMovie:self.tmpVideoPath]; 
       }); 
       break; 
     } 
    }]; 
} 
} 

2.I отправить видео обрезается на сервер, то андроид устройство получить видео с сервера, но они находят аудио/видео из синхронизации, сначала я считаю сервера делают что-то неправильно, поэтому я просто отправляю видео на устройство Android с USB, ошибка все еще существует.

3.so анализирует обрезанный FFmpeg инструменты: FFmpeg -i trimVideo.mp4
, то я нахожу начало trimVideo.mp4 отрицательное число. вот что FFmpeg печать:

Метаданные:
major_brand: кварты
minor_version: 0
compatible_brands: кварты
CREATION_TIME: 2015-08-29 12:22:13
кодировщик: Lavf56.15.102
Продолжительность: 00: 02: 21,77, начало: -4,692568, бит: 359 кбит/с
Поток № 0: 0 (унция): Аудио: aac (LC) (mp4a/0x6134706D), 24000 Гц, stereo, fltp, 69 kb/s (по умолчанию) Метаданные:
creation_time: 2015-08-29 12:22:13
имя обработчика: обработчик данных носителя данных
Stream # 0: 1 (und): видео: h264 (высокий) (avc1/0x31637661), yuv420p, 512x288 [SAR 1 : 1 ДАР 16: 9], 277 кб/с, 15.16 кадров в секунду, 15.17 TBR, 12136 TBN, 30.34 TBC (по умолчанию)
Метаданные:
CREATION_TIME: 2015-08-29 12:22:13
handler_name: ядро Медиа-обработчик данных
encoder: 'avc1'

Я был озадачен этой ошибкой в ​​течение нескольких дней, я сожалею о своем плохом английском, и мне очень нужна ваша помощь, спасибо.

ответ

0

ОК, наконец, я нашел способ решить проблему. Я использую SDAvassetExportSession, чтобы обрезать видео, хотя результат видео длится немного, но A/V может быть синхронизирован в non quicktime player.

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