Я использую следующий код для конкатенации множественного AVURLAssets
:AVMutableComposition - сцепляются видеоматериалы прекращаются после того, как первый активом
AVMutableComposition * movie = [AVMutableComposition composition];
CMTime offset = kCMTimeZero;
for (AVURLAsset * asset in assets) {
AVMutableCompositionTrack *compositionVideoTrack = [movie addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *compositionAudioTrack = [movie addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *assetVideoTrack = [asset tracksWithMediaType:AVMediaTypeVideo].firstObject;
AVAssetTrack *assetAudioTrack = [asset tracksWithMediaType:AVMediaTypeAudio].firstObject;
CMTimeRange timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration);
NSError * error = nil;
if (![compositionVideoTrack insertTimeRange: timeRange ofTrack: assetVideoTrack atTime: offset error: &error]) {
NSLog(@"Error adding video track - %@", error);
}
if (![compositionAudioTrack insertTimeRange: timeRange ofTrack: assetAudioTrack atTime: offset error: &error]) {
NSLog(@"Error adding audio track - %@", error);
}
offset = CMTimeAdd(offset, asset.duration);
}
Полученная композиция воспроизводится через комбинированную продолжительность всех первоначальные активов, и аудио пьес правильно, но воспроизводится только видео из первого актива, а затем останавливается на его последнем кадре.
Любые мысли о том, что я сделал неправильно?
Порядок первоначальных активов не имеет значения - первое видео и все звуковые игры.
Я не уверен, откуда вы взяли эту идею, но это неправильный ответ (см. Мое собственное решение). Спасибо за попытку. –
Ваше решение действительно работает. Я думал о более масштабируемом решении, в котором вы хотите использовать несколько композиционных композиций вместо того, чтобы вставлять их в одну композиционную дорожку. Использование AVMutableVideoCompositionLayerInstructions, AVMutableVideoCompositionInstruction и AVVideoComposition позволяет выполнять больше операций редактирования, таких как переходы, наложения и т. Д. Рад, что вы нашли что-то, что работает для вас. – Jonathan