Временная шкала видео выглядит неправильно, например, вы вставляете оба видео в один и тот же момент времени, ноль, и используете неправильную длительность для videoAsset2
.
Отсутствие звука связано с тем, что вы не вставляете какие-либо звуковые дорожки в композицию.
Попробуйте что-то вроде этого (повторяющегося) фрагмента:
// video
try track?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), of: videoAsset.tracks(withMediaType:.video)[0] as AVAssetTrack, at: kCMTimeZero)
try track?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset2.duration), of: videoAsset2.tracks(withMediaType:.video)[0] as AVAssetTrack, at: videoAsset.duration)
// audio
try track?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), of: videoAsset.tracks(withMediaType:.audio)[0] as AVAssetTrack, at: kCMTimeZero)
try track?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset2.duration), of: videoAsset2.tracks(withMediaType:.audio)[0] as AVAssetTrack, at: videoAsset.duration)
Отказ от ответственности: я не уверен, является ли хорошей практикой использование длительности AVAsset
AVAssetTrack
в качестве прокси для длины трека. Может быть, вы должны использовать AVAssetTrack.timeRange
.