Задать вопрос
Wohlstand
@Wohlstand
Инженер-программист С++

Как можно внедрять пользовательские данные (например 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-пакет, содержащий указанные метаданные, есть где-нибудь рабочие примеры?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Сложный Комментировать
Решения вопроса 1
MP4 контейнер может содержать треки субтитров. Может, в них записывать?

Например, DJI так делают в своих дронах: в MP4 видео раз в секунду пишется телеметрия. Можно в плеере включить английские субтитры и посмотреть выдержку, ISO, GPS координаты и т.п.
скрин
6165388223857109716568.jpeg
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы