#gstreamer #gstreamer-1.0
#gstreamer #gstreamer-1.0
Вопрос:
Я новичок в gstreamer и пытаюсь создать конвейер, который сохраняет сетевой поток в серию файлов.
Я использую: (рабочий стол ubunbtu 20.04.3)
gst-launch-1.0 -v tcpclientsrc host=hcam1 port=5050 ! jpegdec ! videoconvert ! videoscale ! video/x-raw,width=480,height=420 ! x264enc ! splitmuxsink location="/home/paul/hcam1.d.mkv" max-size-time=3000000000 muxer=matroskamux
Похоже, что это выполняется без ошибок, но записывает один пустой файл в hcam1.00.mkv.
Если я использую:
gst-launch-1.0 tcpclientsrc host=hcam1 port=5050 ! jpegdec ! videoconvert ! videoscale ! video/x-raw,width=480,height=420 ! autovideosink
тогда поток отображается правильно. В конечном счете, эти 2 выхода будут объединены с тройником.
Я отправляю поток с: (raspberry pi яблочко без головы)
gst-launch-1.0 -v v4l2src device=/dev/video0 num-buffers=-1 ! video/x-raw,width=1280,height=960, framerate=12/1 ! videoconvert ! jpegenc ! tcpserversink host=192.168.22.231 port=5050
Если я заменю узлы tcpclientsrc и jpegdec на videotestsrc, то это будет работать правильно (я получу последовательность файлов), поэтому, как я понимаю, в потоке данных есть какая-то ошибка формата или что-то в этом роде.
Любая помощь была бы очень признательна.
У меня это полностью работало с использованием rtsp-сервера, но задержка составляет 2 секунды, загрузка процессора на pi в 8 раз выше, и запускать поток удаленно неудобно.
Дополнительная информация:
Вот фрагмент подробного вывода, когда он выходит из строя:
... /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstMatroskaMux:matroskamux0.GstMatroskamuxPad:video_0: caps = NULL /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstFileSink:sink: location = /home/paul/hcam1.00.mkv Pipeline is PREROLLED ... /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstMatroskaMux:matroskamux0.GstMatroskamuxPad:video_0: caps = video/x-h264, codec_data=(buffer)01640016ffe1002167640016acd941e0dfe7ffc001c0019b810102a0000003002ee6b28001e2c5b2c001000568ebecb22c, stream-format=(string)avc, alignment=(string)au, level=(string)2.2, profile=(string)high, width=(int)480, height=(int)420, pixel-aspect-ratio=(fraction)7/6, framerate=(fraction)0/1, interlace-mode=(string)progressive, colorimetry=(string)1:4:0:0, chroma-site=(string)mpeg2, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono Setting pipeline to PLAYING ... New clock: GstSystemClock /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstQueue:queue0: max-size-buffers = 6 /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstQueue:queue0: max-size-buffers = 7 /GstPipeline:pipeline0/GstSplitMuxSink:splitmuxsink0/GstQueue:queue0: max-size-buffers = 8 ... etc ...
Спасибо,
Пол