Недавно я начал работать над проектом, направленным на приложения для потокового видео в реальном времени на базе процессоров imx6. Краткое описание того, что я сделал до сих пор и что я пытаюсь сделать:
- Настройка: плата imx6 (пограничные устройства Sabre Lite), выступающая в роли видеосервера (с помощью плагинов GStreamer imx), и ПК, на котором работает Ubuntu, который получает данные из imx6 и передает видео с использованием функций GStreamer.
- На процессоре imx6 я запускаю testvideosrc и успешно транслирую его по протоколу RTP через UDP, используя интернет-интерфейс между imx6 и ПК.
- Доступ к последовательному порту с использованием файлов устройств в 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 …
Поскольку скорость кодирования составляет 5 Кбит / с (битрейт = 5, как указано в приведенной выше команде), я полагаю, что возможно отправить этот объем данных через последовательный порт. Я понимаю, что в настоящее время переговоры по ограничениям проваливаются, однако я не уверен, как поступить с этим.
На стороне ПК считывание последовательного порта с помощью 'cat / dev / ttyUSB1' успешно выполняется с ограниченными данными. Данные не читаются (как и ожидалось), однако это не непрерывный поток.
У кого-нибудь есть идеи, как это решить. Я также думаю, что неправильно интерпретирую использование файлов устройств Linux, когда пытаюсь прочитать файл последовательных данных с помощью GStreamer.
Моим более поздним тестом будет использование реальной камеры (MIPI) и попытка потоковой передачи через последовательный порт. Кажется ли это осуществимым или это совершенно сумасшедшая идея?