Как можно внедрять пользовательские данные (например json-фрагмент) в видеокадры средставми ffmpeg (libav*)?
У меня имеется задача, чтобы можно было к каждому кадру можно было добавлять пользовательские данные. Это необходимо для передачи различных мета-данных (например, номера автомобилей, прямоугольники, обозначающие положение обнаруженных объектов на видеокадре). Я проверил множество различных инструкций, спецификаций, интерфейсов, однако, ни один из них не работает нормально...
Что у меня имеется:
- Библиотеки ffmpeg собранная из исходников, последней версии
- Кодирую видео через VAAPI, используя `av_hwframe_get_buffer`, `av_hwframe_transfer_data`, `avcodec_send_frame` и `avcodec_receive_packet`.
- Использую кодеки h264, h265 и MJPEG (в приложении есть возможность выбирать один из трёх кодеков)
- Делал попытки насаживать метаданные, используя поле metadata в AVFrame, не помогло, в записанном файле (формат MPEG-TS) никаких признаков вклиненных данных нет, проверял HEX-редактором
- Пробовал через SideData в AVPacket, тоже ничего...
Может быть кто подскажет, как можно реализовать идею правильно? Даже если будет необходимо лапками формировать сырой h264/h265-пакет, содержащий указанные метаданные, есть где-нибудь рабочие примеры?
MP4 контейнер может содержать треки субтитров. Может, в них записывать?
Например, DJI так делают в своих дронах: в MP4 видео раз в секунду пишется телеметрия. Можно в плеере включить английские субтитры и посмотреть выдержку, ISO, GPS координаты и т.п.
Забыл ответить: в моём случае я вещаю видео через RTSP-каналы, и как раз да, очень хорошая идея вещать через канал субтитров: я выделил на моём RTSP-сервере ещё один канал, но уже текстовый, и через него мой специальный просмотрщик получает эти данные и на месте синхронизирует их с получаемыми видеокадрами, чтобы отобразить (в моём случае это рамки различных модулей аналитики: от детектора движения, лиц, распознаватель автономеров, и т.п.).