GStreamer / iMX6: потоковое видео в кодировке h264 через последовательный порт между iMX6 и ПК - PullRequest
0 голосов
/ 25 июня 2018

Недавно я начал работать над проектом, направленным на приложения для потокового видео в реальном времени на базе процессоров imx6. Краткое описание того, что я сделал до сих пор и что я пытаюсь сделать:

  1. Настройка: плата imx6 (пограничные устройства Sabre Lite), выступающая в роли видеосервера (с помощью плагинов GStreamer imx), и ПК, на котором работает Ubuntu, который получает данные из imx6 и передает видео с использованием функций GStreamer.
  2. На процессоре imx6 я запускаю testvideosrc и успешно транслирую его по протоколу RTP через UDP, используя интернет-интерфейс между imx6 и ПК.
  3. Доступ к последовательному порту с использованием файлов устройств в Linux, затем я попытался выгрузить видеоданные с платы imx6 на последовательный порт и прочитать этот последовательный порт на ПК. Для этого скорость передачи данных обоих устройств была настроена на 115200 бод. Кодировка «битрейт» настроена на 5 Кбит / с. Вот команды:

IMX6:

#gst-launch-1.0 -v videotestsrc pattern=18 ! video/x- raw,width=100,height=50 ! imxvpuenc_h264 bitrate=5 ! h264parse ! filesink location=/dev/ttyUSB1 

PC:

#CAPS=video/x-h264 
#gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 ! $CAPS ! h264parse ! avdec_h264 ! autovideosink sync=true 

На плате imx6 ошибок не наблюдается. Однако я вижу следующие ошибки на стороне ПК:

# GST_DEBUG=3 gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 ! $CAPS ! h264parse ! avdec_h264 ! autovideosink sync=true 
  Setting pipeline to PAUSED … 
  0:00:00.066439392 15475 0x556d8a01d160 WARN basesrc gstbasesrc.c:3583:gst_base_src_start_complete: pad not activated yet 
  Pipeline is PREROLLING … 
  0:00:21.730466251 15475 0x556d8a000940 WARN capsfilter 
  gstcapsfilter.c:455:gst_capsfilter_prepare_buf: error: Filter caps do not completely specify the output format 
  0:00:21.730523691 15475 0x556d8a000940 WARN capsfilter gstcapsfilter.c:455:gst_capsfilter_prepare_buf: error: Output caps are unfixed: video/x-h264, width=(int)[ 1, 8192 ], height=(int)[ 1, 8192 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 
  0:00:21.730676173 15475 0x556d8a000940 WARN basetransform gstbasetransform.c:2159:default_generate_output: could not get buffer from pool: error 
  0:00:21.730742223 15475 0x556d8a000940 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: Internal data stream error. 
  0:00:21.730775478 15475 0x556d8a000940 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: streaming stopped, reason error (-5) 
  ERROR: from element /GstPipeline:pipeline0/GstCapsFilter:capsfilter0: Filter caps do not completely specify the output format 
  Additional debug info: 
  gstcapsfilter.c(455): gst_capsfilter_prepare_buf (): /GstPipeline:pipeline0/GstCapsFilter:capsfilter0: 
  Output caps are unfixed: video/x-h264, width=(int)[ 1, 8192 ], height=(int)[ 1, 8192 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 
  ERROR: pipeline doesn’t want to preroll. 
  Setting pipeline to NULL … 
  Freeing pipeline … 
  1. Поскольку скорость кодирования составляет 5 Кбит / с (битрейт = 5, как указано в приведенной выше команде), я полагаю, что возможно отправить этот объем данных через последовательный порт. Я понимаю, что в настоящее время переговоры по ограничениям проваливаются, однако я не уверен, как поступить с этим.

  2. На стороне ПК считывание последовательного порта с помощью 'cat / dev / ttyUSB1' успешно выполняется с ограниченными данными. Данные не читаются (как и ожидалось), однако это не непрерывный поток.

У кого-нибудь есть идеи, как это решить. Я также думаю, что неправильно интерпретирую использование файлов устройств Linux, когда пытаюсь прочитать файл последовательных данных с помощью GStreamer.

Моим более поздним тестом будет использование реальной камеры (MIPI) и попытка потоковой передачи через последовательный порт. Кажется ли это осуществимым или это совершенно сумасшедшая идея?

1 Ответ

0 голосов
/ 04 июля 2018

С помощью следующих команд я мог бы заставить это работать на последовательном канале со скоростью 19200 бод. Однако задержка очень высока в диапазоне 5-6 секунд.Со скоростью 1 Мб он работает с меньшей задержкой <1 с.</p>

imx6:

gst-launch-1.0 -v videotestsrc pattern=18 ! video/x-raw,width=100,height=50
! imxvpuenc_h264 bitrate=5 ! h264parse ! filesink location=/dev/ttyUSB0
blocksize=1024 max-bitrate=19000 sync=false

ПК:

gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 blocksize=1024 ! $CAPS !
h264parse ! avdec_h264 lowres=2 skip-frame=0 ! autovideosink sync=false 
...