Как добавить неподвижное изображение в AVComposition?

У меня есть AVMutableComposition с видеодорожкой, и я хотел бы добавить неподвижное изображение в видеодорожку, которая будет отображаться в течение некоторого времени. По-прежнему это PNG. Я могу загрузить изображение в качестве актива, но об этом, потому что в результирующем активе нет треков и поэтому его нельзя просто вставить с помощью методов insertTimeRange….

Есть ли способ добавить неподвижные изображения в композицию? Похоже, что ответ находится где-то в Core Animation, но все это кажется немного выше моей головы, и я был бы признателен за образец кода или некоторые указатели информации.

Ответ 1

OK. Theres отличное видео под названием "Редактирование медиа" с AV Foundation от WWDC, которое объясняет многое. Вы не можете вставлять изображения прямо на временную шкалу AVComposition, по крайней мере, я не нашел способа сделать это. Но при экспорте или игре актива вы можете обратиться к AVVideoComposition. Это может быть не идеальное название для класса, поскольку оно позволяет вам смешивать различные видеодорожки в актив, очень похоже на AVAudioMix для аудио. И AVVideoComposition имеет свойство animationTool, которое позволяет вам добавлять слои Core Animation (CALayer) в микс. CALayer имеет свойство contents, которому может быть присвоен CGImageRef. Не помогает в моем случае, может помочь кому-то еще.

Ответ 2

Мне также нужны неподвижные изображения в моей композиции. Моя линия мышления немного отличается. Вставляйте на лету фильмы черного цвета вместо того, чтобы появляться изображения (возможно, одного такого видео было бы достаточно). Добавьте ссылку на словарь для каждой такой вставки, связывая временные диапазоны композиций с желаемыми изображениями с помощью bona-fide. Когда правильный временной диапазон поступает в мой штатный пользовательский компоновщик, вытащите желаемое изображение и нарисуйте его в буфер выходного пикселя, игнорируя входящие черные кадры из композиции. Я думаю, что это был бы другой способ сделать это.