Como transmitir vídeo h264 de webcam para rede?

4

Eu tenho uma webcam que desejo usar para transmitir vídeos em h264. Agora estou transmitindo mjpg video com mjpg-streamer. E agora eu gostaria de transmitir o h264. Eu descobri que isso poderia ser feito com gstreamer, mas eu sou totalmente novo nisso. Também depois de ler alguns blogs / artigos / etc, parece-me que houve alguns problemas com h264 e gstreamer. Ainda é verdade?

Pode haver outros métodos para fazer isso além do gstreamer?

Qualquer informação seria útil. Agradecemos antecipadamente.

    
por Val 03.12.2012 / 22:19

1 resposta

3

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.

    
por 03.12.2012 / 23:18