Pi4B come rtp streaming video UDP con webcam e Gstreamer
Ho un Buster appena installato (data di rilascio: 2020-08-20) sul mio Pi4B
Sono in grado di eseguire lo streaming con pi Camera facendo
gst-launch-1.0 -v v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=720,framerate=30/1 ! clockoverlay time-format="%H:%M:%S %d.%m.%Y" outline-color=-16777216 color=-1 draw-shadow=false font-desc="myriad pro bold expanded 16" ! omxh264enc target-bitrate=1000000 control-rate=variable ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink host=x.x.my.ip port=8004
Ma quando uso lo stesso comando con la mia webcam , che si trova in "/ dev / video0", ho ricevuto l'errore seguente:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error.
Additional debug info:
gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.001112783
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
La webcam (il nome del marchio è rapoo) che sto utilizzando è compatibile con il mio pi. Posso vedere il video in diretta da esso eseguendo:
gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! ximagesink
Anche testato con fswebcam 123.jpg -d /dev/video0. Funziona anche per la mia fotocamera Pi in / dev / video1
Posso sapere come posso eseguire uno streaming UDP rtp con la mia webcam ?
Risposte
Capito! Funziona bene sulla mia cam pi perché supporta H264 in modo nativo.
Puoi controllare il formato supportato dalla webcam facendo:
v4l2-ctl --list-formats-ext -d /dev/video0
Per la mia webcam, supporta solo YUYV e MJPEG: v4l2-ctl --list-formati-ext -d / dev / video0:
pi@raspberrypi:~ $ v4l2-ctl --list-formats-ext -d /dev/video0
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1280x720
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.050s (20.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 1280x720
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 160x120
Interval: Discrete 0.040s (25.000 fps)
Quindi ho bisogno di usare il formato JPEG e poi convertirlo in H264 e infine inviarlo come rtp udp al mio server:
gst-launch-1.0 -vv -e v4l2src device=/dev/video0 ! \
"image/jpeg,width=640,height=480" ! queue ! jpegdec ! videoconvert ! \
omxh264enc target-bitrate=1000000 control-rate=variable ! h264parse ! rtph264pay config-
interval=1 pt=96 ! udpsink host=my.server.ip port=5000