Отправка метаданных за кадр с кодированными кадрами H264
Мы ищем способ отправки метаданных за кадр (например, ID) с кадрами в кодировке H264 с сервера на клиент.
В настоящее время мы разрабатываем приложение для удаленного рендеринга, в котором активно участвуют как клиентская, так и серверная сторона. Сервер отображает высококачественное изображение со всеми эффектами, освещением и т. Д. Клиент также имеет информацию о модели и отображает диффузное изображение, которое используется, когда полоса пропускания слишком мала или изображения должны быть деформированы, чтобы избежать заикания.
До сих пор мы кодируем кадры на стороне сервера с помощью ffmpeg и транслируем их с помощью live555 клиенту, который получает rtsp-поток и снова декодирует кадры с помощью ffmpeg.
Для нашего приложения нам нужно отправить метаданные за кадр. Мы хотим, чтобы клиент сообщил серверу, где сейчас находится камера. В идеале мы могли бы отправить матрицу представления клиента на сервер, визуализировать соответствующий кадр и отправить его обратно клиенту вместе с его матрицей представления. Поэтому, когда клиент получает кадр, нам нужно точно знать, в каком положении камеры был визуализирован кадр.
В качестве альтернативы мы могли бы также пометить каждую матрицу представления идентификатором, отправить ее на сервер, визуализировать кадр, пометить его тем же идентификатором и отправить обратно. В этом случае мы должны были бы снова назначить правильную матрицу кадру на стороне клиента.
После нескольких попыток реализовать вышеуказанное намерение с помощью ffmpeg мы пришли к выводу, что ffmpeg не обеспечивает требуемой функциональности. ffmpeg предоставляет только фиксированный, предопределенный набор полей для метаданных, который либо не может хранить матрицу, либо может быть установлен только для каждого ключевого кадра, что недостаточно часто для нашей цели.
Сейчас мы рассматриваем возможность использования live555. Пока у нас есть сервер по требованию, ведьма получает VideoSubsession с H264VideoStreamDiscreteFramer, чтобы содержать наш собственный класс FramedSource. В этом классе мы загружаем закодированный AVPacket (из ffmpeg) и отправляем его буфер данных по сети. Теперь нам нужен способ отправки метаданных с каждым кадром клиенту.
У вас есть идеи, как решить эту проблему с метаданными с помощью live555 или другой библиотеки?
Спасибо за вашу помощь!
1 ответ
Кажется, на этот вопрос ответили в комментариях:
направить вывод ffmpeg через специальный инструмент, который встроил данные в элементарный поток 264 через SEI
Кто-то также дал следующий ответ, который был удален несколько лет назад по сомнительным причинам (он краток, но, похоже, содержит достаточно информации):
Вы можете сделать это с помощью MPEG-4. Подробности см. В MPEG-4, часть 14.