У меня нет реальной среды разработки для Swift, которая могла бы использовать AVFoundation. Таким образом, я не могу предоставить вам пример кода.
Для добавления метаданных (дата, местоположение, отметка времени, водяной знак, частота кадров и т. Д.) В качестве наложения на видео во время записи вам потребуется обработать видеопоток, кадр за кадром, в прямом эфирево время записи. Скорее всего, вам придется хранить кадры в буфере и обрабатывать их до того, как они действительно будут записаны.
Теперь, когда дело доходит до метаданных, есть два типа, статический и динамический. Для статического типа, такого как водяной знак, это должно быть достаточно просто, поскольку все кадры получат одно и то же.
Однако для динамического типа метаданных, такого как метка времени или местоположение GPS, есть несколько вещей, которыенеобходимо принимать во внимание. Для обработки видеокадров требуются вычислительная мощность и время. Таким образом, зависит от типа динамических данных и от того, как вы их получили, иногда обрабатываемое значение может быть неправильным. Например, если у вас есть кадр в 1:00:01, вы обрабатываете его и добавляете к нему метку времени. Просто представьте, что для обработки метки времени потребовалось 2 секунды. Следующий полученный вами кадр - 1:00:02, но вы не можете обработать его до 1:00:03, поскольку обработка предыдущего кадра заняла 2 секунды. Таким образом, в зависимости от того, как вы получили эту новую временную метку для нового кадра, эта временная метка может быть не тем значением, которое вы хотели.
Для обработки динамических метаданных вы также должны учитывать аппаратную задержку. Например, предполагается, что программное обеспечение добавляет живые данные о местоположении GPS в каждый кадр, и не было никаких задержек в разработке или тестировании. Однако в реальной жизни пользователь использовал программное обеспечение в области с плохим соединением, и его телефон зависал при получении своего местоположения GPS. Некоторые из его лагов длились целых 5 секунд. Что вы делаете в этой ситуации? Вы установили тайм-аут для местоположения GPS и использовали последнюю удачную позицию? Вы сообщаете об ошибке? Откладываете ли вы обработку этого кадра позже, когда станут доступны данные GPS (это может испортить запись в реальном времени) и используете дорогой алгоритм, чтобы попытаться предсказать местоположение пользователя для этого кадра?
Кроме тех, которые необходимо учитыватьУ меня есть некоторые ссылки здесь, которые я думаю, может помочь вам. Я думал, что один из medium.com выглядел довольно неплохо.
https://medium.com/ios-os-x-development/ios-camera-frames-extraction-d2c0f80ed05a
Добавление водяного знака в текущую запись видео и сохранение с водяным знаком
Рендеринг динамического текста на CVPixelBufferRef во время записи видео