Vou explicar como transmitir o h264 usando o gstreamer.
Primeiro, você precisa do kernel Linux 3.2 ou posterior para ter o "formato de pixel H264" suportado nos drivers da v4l2.
Use v4l2-ctl para verificar se você tem suporte H.264 adequado para a câmera:
# v4l2-ctl --list-formats # v4l2-ctl --list-formats-ext
Em seguida, você precisará de bibliotecas e utilitários do video4linux. Estes incluem:
libv4l and libv4l-dev v4l-utils qv4l2 (may be part of v4l-utils) v4l2ucp
Configurando a taxa de quadros:
# v4l2-ctl --set-fmt-video=width=800,height=448,pixelformat=1 # v4l2-ctl --set-parm=30
O Gstreamer tem um elemento de entrada v4l2src, mas ainda não suporta o formato video / x-264.
Mas, podemos capturar o fluxo H.264 e enviá-lo para um arquivo ou até mesmo um padrão, simplesmente canalizando-o para a entrada padrão de um pipeline gstreamer usando uma fonte de arquivo:
# ./capture -c 100000 -o | gst-launch -v -e filesrc location=/dev/fd/0 ! h264parse ! decodebin2 ! xvimagesink sync=false
O fluxo de vídeo codificado pode ser enviado pela rede usando o Gstreamer:
# gst-launch -v udpsrc port=4000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! \ rtph264depay ! ffdec_h264 ! xvimagesink sync=false # ./capture -c 10000 -o | gst-launch -v -e filesrc location=/dev/fd/0 ! h264parse ! rtph264pay ! udpsink host=host_IP port=4000
Espero que você ache isso útil.