Я пытаюсь присоединиться к 2 существующим видео mpeg4 вместе на ipad2 со следующим кодом.AVAssetExportSession - Присоединяйтесь к файлам 2 mp4 в IOS
-(void)mergeTestVideos
{
//setup asset
NSString *firstassetpath = [NSString stringWithFormat:@"%@mpeg4-1.mp4", NSTemporaryDirectory()];
NSString *secondassetpath = [NSString stringWithFormat:@"%@mpeg4-2.mp4", NSTemporaryDirectory()];
NSFileManager *fileManager = [NSFileManager defaultManager];
AVAsset *firstAsset = [AVAsset assetWithURL:[NSURL fileURLWithPath:firstassetpath]];
AVAsset *secondAsset = [AVAsset assetWithURL:[NSURL fileURLWithPath:secondassetpath]];
NSLog(@"FirstAsset Is Readable = %d", firstAsset.isReadable);
NSLog(@"FirstAsset Is playable = %d", firstAsset.isPlayable);
NSLog(@"FirstAsset Is exportable = %d", firstAsset.exportable);
NSLog(@"SecondAsset Is Readable = %d", secondAsset.isReadable);
NSLog(@"SecondAsset Is playable = %d", secondAsset.isPlayable);
NSLog(@"SecondAsset Is exportable = %d", secondAsset.exportable);
//setup composition and track
AVMutableComposition *composition = [[AVMutableComposition alloc]init];
AVMutableCompositionTrack *track = [composition addMutableTrackWithMediaType:AVAssetExportPresetPassthrough preferredTrackID:kCMPersistentTrackID_Invalid];
//add assets to track
[track insertTimeRange:CMTimeRangeMake(kCMTimeZero, firstAsset.duration) ofTrack:[[firstAsset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0] atTime:kCMTimeZero error:nil];
[track insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[secondAsset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0] atTime:firstAsset.duration error:nil];
// 5 - Create exporter
AVAssetExportSession *exporter = [[AVAssetExportSession alloc]initWithAsset:composition presetName:AVAssetExportPresetPassthrough];
NSString *outputURL = [NSString stringWithFormat:@"%@mergedvid.mp4", NSTemporaryDirectory()];
NSLog(@"%@", exporter.supportedFileTypes);
exporter.outputURL=[NSURL fileURLWithPath:outputURL];
exporter.outputFileType = AVFileTypeMPEG4;
[exporter exportAsynchronouslyWithCompletionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self exportDidFinish:exporter];
});
}];
}
-(void)exportDidFinish:(AVAssetExportSession*)session {
NSLog(@"export method");
NSLog(@"%i", session.status);
NSLog(@"%@", session.error);
}
и выход заключается в следующем:
- FirstAsset Is Readable = 1
- FirstAsset Is playable = 1
- FirstAsset Is exportable = 1
- SecondAsset Is Readable = 1
- SecondAsset Is playable = 1
- SecondAsset Is exportable = 1
- (
"com.apple.quicktime-movie",
"com.apple.m4a-audio",
"public.mpeg-4",
"com.apple.m4v-video",
"public.3gpp",
"org.3gpp.adaptive-multi-rate-audio",
"com.microsoft.waveform-audio",
"public.aiff-audio",
"public.aifc-audio",
"com.apple.coreaudio-format"
)
-export method
- 4
- Error Domain=AVFoundationErrorDomain Code=-11838 "Operation Stopped" UserInfo=0x155f76f0 {NSLocalizedDescription=Operation Stopped, NSLocalizedFailureReason=The operation is not supported for this media.}
ИТАК в соответствии с выходным мои файлы находятся в порядке, и экспортируемый и mp4 является поддерживаемый тип вывода.
Кто-нибудь есть какие-либо идеи, почему он дает мне ошибку «Операция не поддерживается для этого средства массовой информации»
Ok спасибо Я попытался это, но, к сожалению, я не думаю, что это правильно, потому что объект AVAssetExportSession не удается построить (это равный нулю), когда я меняю код на это. Вот что происходит -> NSLog (@ "Экспортер:% @ \ n", экспортер); Экспортер: (null) – Jamesla
Что вы имеете в виду под этим флагом? Вы используете неправильное постоянное значение. Вы можете проверить документацию на Apple для поддерживаемых значений в этом методе. Я думаю, вы должны проверить проект AVSimpleEditor от Apple. https://developer.apple.com/library/ios/samplecode/AVSimpleEditoriOS/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012797 –
Извините, что я испортил (изменен экспортер в AVMediaTypeVideo, а не на трек). были мертвы правильно. Я вручу вам приз :) Спасибо за вашу помощь Гаураву. – Jamesla