В настоящее время я использую доску для разработки Nitrogen 6 Max. Я пытаюсь получить видео со своей веб-камеры через v4l2sr c, чтобы поток обратной связи передавался и кодировался для сохранения.
Это конвейер, и он работает:
v4l2src device="/dev/video2" ! tee name=t
t. ! queue ! x264enc ! mp4mux ! filesink location=test.mp4
t. ! queue ! videoconvert ! autovideosink
Затем я попытался использовать библиотеку imx-gstreamer. Я потратил некоторое время на поиски и обнаружил, что это работает:
gst-launch-1.0 -e videotestsrc num-buffers=1000 ! \
video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! \
h264parse ! avdec_h264 ! filesink location=cx1.mp4
Однако, когда я пытаюсь использовать «тройник» для разделения источника видео, он просто зависает, и мой сеанс терминала блокируется.
gst-launch-1.0 -e videotestsrc num-buffers=1000 ! autovideoconvert ! tee name=t \
t. ! video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! h264parse ! avdec_h264 ! filesink location=cx1.mp4 \
t. ! video/x-raw,width=640,height=480,framerate=30/1 ! autovideosink
Я попытался изолировать проблему путем кодирования через тройник и понял, что он работает, но создаваемый им видеофайл поврежден:
gst-launch-1.0 -e videotestsrc num-buffers=1000 ! tee name=t \
t. ! video/x-raw,width=640,height=480,framerate=30/1 ! imxvpuenc_h264 ! \
h264parse ! avdec_h264 ! filesink location=cx1.mp4
Я пытался использовать очереди, видеоконвертировать, но вроде не работает.
Тоже еще вопрос. Я новичок в возможностях GstElement, которые определяют, какой элемент может быть связан (например, возможность v4l2sr c видео / x-raw включает I420, поэтому я могу связать этот элемент с imxvpuenc_h264 ). Однако для элемента tee, разделяет ли он и воспроизводит ли он возможности sr c?
Я новичок в gstreamer, и я не могу решить эту проблему. Может ли кто-нибудь помочь мне здесь?