обрезка видео, затем я отправляю видео, обрезанное на устройство 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'
Я был озадачен этой ошибкой в течение нескольких дней, я сожалею о своем плохом английском, и мне очень нужна ваша помощь, спасибо.