Вопрос или проблема
Я пытаюсь реализовать сетевой поток с Raspberry Pi на платформу iMX8, используя плагины NXP VPU для декодирования потока, но на стороне NXP отображается зеленый экран со следующим выводом:
gst-launch-1.0 tcpclientsrc host=192.168.178.64 port=5004 ! queue ! h264parse ! vpudec ! videoconvert ! fpsdisplaysink sync=false
Установка конвейера в состояние PAUSED ...
====== VPUDEC: 4.7.2 сборка от 1 сентября 2022 года 09:49:28. ======
обертка: 3.0.0 (VPUWRAPPER_ARM64_LINUX сборка от 31 августа 2022 года 01:28:14)
vpulib: 1.1.1
прошивка: 1.1.1.65535
Конвейер в стадии PREROLLING ...
Конвейер подготовлен ...
Установка конвейера в состояние PLAYING ...
Перераспределение задержки...
Новые часы: GstSystemClock
ОШИБКА: cabac_init_idc
ОШИБКА: SLICE_HEADER
ОШИБКА: disable_deblocking_filter_idc
Я использую следующие конвейеры:
Raspberry Pi (Отправитель)
gst-launch-1.0 videotestsrc ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc tune=zerolatency byte-stream=true bitrate=500 threads=2 ! mpegtsmux ! tcpserversink host=0.0.0.0 port=5004
iMX8 (Получатель)
gst-launch-1.0 tcpclientsrc host=<IP Отправителя> port=5004 ! queue ! h264parse ! vpudec ! imxvideoconvert_g2d ! fpsdisplaysink sync=false
Что означает эта ошибка и как я могу ее исправить?
Ответ или решение
Ошибка, которую вы видите, указывает на проблемы с декодированием потока H.264 на стороне iMX8. Скорее всего, это связано с несоответствием кодирования или параметрами, используемыми на стороне отправителя (Raspberry Pi). Давайте рассмотрим, как можно диагностировать и решить эту проблему.
Возможные причины проблемы
-
Проблемы с кодированием видео: Убедитесь, что параметры кодирования на Raspberry Pi правильно соответствуют требованиям декодирования на iMX8.
-
Проблемы с сетью: Убедитесь, что между устройствами нет потерь пакетов или задержек, мешающих корректному потоку данных.
-
Настройки формата: Проверьте, что вы используете правильные форматы и разрешения как на стороне отправителя, так и на стороне приемника.
Шаги для решения проблемы
-
Проверка параметров кодирования на Raspberry Pi:
Попробуйте использовать следующие параметры для кодирования:gst-launch-1.0 videotestsrc ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc tune=zerolatency byte-stream=true bitrate=500 ! mpegtsmux ! tcpserversink host=0.0.0.0 port=5004
Убедитесь, что
x264enc
настроен на использование совместимого профиля и уровня для декодирования iMX8. -
Изменение параметров на iMX8:
Заменитеvpudec
наavdec_h264
для тестирования:gst-launch-1.0 tcpclientsrc host=<IP Sender> port=5004 ! queue ! h264parse ! avdec_h264 ! videoconvert ! fpsdisplaysink sync=false
Это поможет выяснить, действительно ли проблема в
vpudec
. -
Убедитесь в совместимости кодеков:
Проверьте версию и совместимость установленных кодеков на iMX8. Убедитесь, что все необходимые плагином для GStreamer установлены и обновлены до последних версий. -
Проверка сетевых соединений:
Используйте инструменты вродеping
иiperf
для диагностики сетевого соединения. Убедитесь, что нет потерь пакетов и нет проблем с задержками. -
Логирование и диагностика:
Запустите GStreamer с более высоким уровнем логирования, чтобы получить более детализированную информацию об ошибках. Например, можно добавитьGST_DEBUG
:GST_DEBUG=3 gst-launch-1.0 tcpclientsrc host=<IP Sender> port=5004 ! queue ! h264parse ! vpudec ! fpsdisplaysink sync=false
Заключение
Ошибки cabac_init_idc
, SLICE_HEADER
и disable_deblocking_filter_idc
могут быть вызваны неправильными параметрами кодирования или несоответствием версий декодеров. Попробуйте следовать рекомендациям, описанным выше, чтобы диагностировать и исправить проблему с декодированием на вашем iMX8. Если проблема сохранится, возможно, имеет смысл обратиться к документации NXP или на специализированные форумы сообщества для дальнейшей помощи.