Преобразование в формат пикселей yuv422p неверно

#ffmpeg #h.264 #mjpeg

Вопрос:

Настройка:

  1. Камера, которая транслирует видео в формате H. 264 в прямом эфире через RTSP
  2. Приложение для Android, которое использует FFMPEG для захвата фрагментов пакетов H. 264, преобразует их в кадры mjpeg в формате пикселей yuv422.
  3. Отдельное приложение, которое получает указанные изображения в формате jpeg по протоколу udp, ожидает, что они будут в формате yuv422 пикселей, и отображает поток.

Мост между всеми этими компонентами работает идеально, #2 получает кадры и отправляет их #3, а #3 проверяет, получает ли он их. Однако #3 не отображался, и поэтому при более тщательном рассмотрении пакетов, которые он получает, я обнаружил в заголовке изображения jpeg для каждого пакета, что коэффициент подвыборки по горизонтали и вертикали был не таким, как ожидается для YUV422. Это 0x22, несмотря на то, что для YUV422 мы должны ожидать вдвое меньшего разрешения цветности по горизонтали (поэтому мы должны ожидать 0x21).

Это команда ffmpeg, которую я использую:

ffmpeg -i rtsp://****:*** -vcodec mjpeg -pix_fmt yuv422p -f mjpeg udp://*******

Что может происходить? Кодек по умолчанию просто не поддерживает это преобразование?

Комментарии:

1. Кодировщик FFmpeg MJPEG поддерживает: yuvj420p yuvj422p yuvj444p . Видеть ffmpeg -h encoder=mjpeg .

2. Поделитесь полным журналом cmd 2

Ответ №1:

Большинство видео в потребительском пространстве составляет 4:2:0, а не 4:2:2. Поэтому попробуйте формат пикселей, такой как YVU420 («YV12»), YUV420 («YU12») или какой-либо другой 4:2:0.