LINUX.ORG.RU

gstreamer1.0 ошибка с flvmux

 , , , ,


0

2

Пытаюсь вещать с raspberrypi и usb-камеры с микрофоном по rtmp, кодирует h264 своим аппаратным кодеком действительно на отлично, но с gstreamer-ом у меня реально затык - не могу понять как сделать правильную pipeline для flv и rtmp, чтоб она сработала.

Пишем такое:

gst-launch-1.0 v4l2src ! «video/x-raw,width=640,height=480,framerate=30/1» !\
 omxh264enc target-bitrate=1000000 control-rate=variable !\
 video/x-h264,profile=high ! h264parse ! queue ! \
flvmux name=mux alsasrc device=plughw:1 ! audioresample ! \
audio/x-raw,rate=48000,channels=1 ! queue ! voaacenc bitrate=32000 ! queue ! mux. mux. !\
 rtmpsink location='rtmp://блаблабла'

В итоге ошибка:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstAudioSrcClock
ERROR: from element /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 535913298 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
libv4l2: warning v4l2 mmap buffers still mapped on close()
Freeing pipeline ...

При этом если просто записать в файл что-то в mpegts, то все ок:

gst-launch-1.0 v4l2src ! «video/x-raw,width=640,height=480,framerate=30/1» ! \
omxh264enc target-bitrate=1000000 control-rate=variable !\
 video/x-h264,profile=high ! h264parse ! queue ! \
 mpegtsmux name=mux alsasrc device=plughw:1 ! audioresample !\
 audio/x-raw,rate=48000,channels=1 ! queue ! voaacenc bitrate=32000 ! \
queue ! mux. mux. ! filesink location=1.ts

То все ок пишется, проигрывается, все довольны, но подцепить rtmpsink в mpegtsmux в итоге нельзя - ошибка:

WARNING: erroneous pipeline: could not link mux to rtmpsink0

По вроде бы понятным причинам, что тот хочет flv.

Чего ему не хватает и что сделать, чтобы он стал нормально работать?

Все ясно, flvmux потребляет только сырой поток с некоторых пор, потому и не работало. С информативностью сообщений об ошибках у него плохо, конечно. Нужно добавлять еще и aacparse в линию, тогда будет ок.

coredump ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.