Пытаюсь вещать с 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.
Чего ему не хватает и что сделать, чтобы он стал нормально работать?