Streaming H264 com Logitech C920


13

Eu tenho uma webcam logitech C920. Ele tem a capacidade de codificar diretamente o vídeo no H264.

Quero reproduzir o que foi feito com um Beaglebone, mas usando um Raspberry Pi: envie um fluxo H264 para a rede . O Raspberry Pi está aqui apenas para empacotar o fluxo no RTP, a compactação de vídeo é feita pela própria webcam. O modo H264 é imposto usando o video4linux.

Até agora, e se eu usar um computador comum com a versão mais recente do Ubuntu, ele funcionará usando o VLC como servidor ou GStreamer. Por exemplo, se eu iniciar no Raspberry Pi um servidor VLC usando o comando:

cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'

... e, se eu ler o stream com o VLC em outro computador, está tudo certo.

No entanto, se eu usar o raspberry Pi para enviar o fluxo de vídeo, o resultado será muito ruim. Muito lixo na imagem assim que algo se move. As chaves de imagem são bem recebidas a cada 10 segundos, mas, enquanto isso, não é bom o suficiente em comparação com o fluxo de um computador comum.

Eu também tentei o método descrito para o beaglebone com o utilitário "capture" fornecido : ok se eu transmitir em um computador real, o mesmo problema de lixo se transmitir em um Raspberry Pi.

Não é um problema de rede: fiz algumas verificações de rede com o Wireshark e as estatísticas do VLC, não tenho perda de pacotes. Eu tentei com o Raspbian e o Arch Linux para Raspi (gstreamer 0.10 no raspbian, gstreamer 1.0 no Arch Linux).

Não sei se é relevante ou não, mas também testei com a versão de suporte a flutuação suave do Raspbian. Uma atualização deve ser feita primeiro para usar um kernel 3.2; mas mesmo problema, o vídeo tem algum lixo.

Alguma idéia do que eu poderia fazer para melhorar a qualidade do vídeo?


Tente reduzir a taxa de quadros. A CPU do rPi é muito ruim, então acho que transmitir uma imagem de 800x600 a 30FPS é demais. Somente a nova placa da câmera rPI conectada via conector MIPI / CIS (em vez de USB) transmite 1080p a 15-30 FPS.
Matthias

Não é FPS. O Pi pode suportar HD a 60FPS sem problemas usando o módulo Pi Camera. Se a câmera da Logitech enviar um vídeo H264, ele já está codificado e o Pi precisará transmitir novamente os pacotes ... dos quais é totalmente capaz. De fato, ele pode retransmitir até 6 fluxos HD a 25FPS antes de atingir o limite máximo. Deve ser os corromper pacotes do controlador V4L
Piotr Kula

Eu sei que é um tópico antigo, mas você finalmente encontrou algo que funciona? Estou tentando fazer algo semelhante e preso
Ajith

Eu usei um Beaglebone e funcionou melhor. O problema ocorreu devido a um driver USB ruim para o RaspberryPi no Raspbian. Tanto quanto me lembro, mais tarde testei o mesmo sistema com uma versão posterior do Raspbian e tinha menos lixo. Posso fazer uma atualização do rpi (como foi dito em uma das respostas), mas não me lembro bem. Mas o certo é que o desempenho foi melhor após o uso de um firmware / sistema operacional atualizado.
Vincent Hiribarren

Vincent, estou recebendo um erro 'não é possível abrir o URL v4l2'. Este comando está desatualizado?
dalanmiller

Respostas:


5

Eu tive o mesmo problema, encontrei este tópico ao procurar por um codificador de hardware, não por problemas do c920.

No entanto, execute uma atualização de firmware para o raspberry pi e o lixo deve acabar

$> sudo rpi-update

Eu mesmo encontrei a solução aqui: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi


Para encerrar esta pergunta, aceito essa resposta. O problema ocorreu devido a um driver USB quebrado, houve alguma perda de pacotes na comunicação USB. Um sistema / firmware atualizado deve fazer o truque.
Vincent Hiribarren

2

Você pode tentar usar o FFMPEG. Mas o problema não é usar a versão dos repositórios porque está desatualizada. Existe uma versão bifurcada que funciona muito bem.

Você terá que compilá-lo, que leva 5 horas ou mais, ou baixar um binário pré-compilado.

Em seguida, você pode canalizar os dados do driver V4L para o FFMPEG com essas configurações. Onde -i "fifo"deveria ser apenas -ipara caputre o fluxo encanado e -fvocê precisará verificar novamente como produzi-lo H264. o FLV o reembala em FLV que pode ser reproduzido com players de HTML.

ffmpeg -y \  
  -f h264 \  
  -i "$fifo" \  
  -c:v copy \  
  -map 0:0 \  
  -f flv "$urllocal"   

ou um exemplo, descobri que tem como alvo diretamente a V4L, mas oyu precisa ter a câmera presente em /dev/video* * 1ou mais ...

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 out.avi

o -fdenota o formato de saída no. Isso não significa que ele irá transcodificar-lo como H264 para FLV só fica envolto no formato FLV. então mude o endereço para o seu VLC player de clientes. por exemplo-f mpegts udp:192.168.1.19:1234

O VLC não parece funcionar muito bem no Pi. Tive muito pouco sucesso ao enviar o módulo Pi cmaera para o meu PC usando UDP. Funcionou, mas não era estável.

Você também pode instalar o nginx com o módulo rtmp, que funciona bem. Veja este guia, mas você precisará ajustar um pouco as configurações. Você então conecta seu VLC player ao fluxo nginx-rtmp e ele funciona como um encanto.


1
Qual versão bifurcada é a que funciona bem?
22714 Brian

1

Isso parece funcionar para mim @ menos ... cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy


0

Tente com um buffer maior no cliente que exibe o vídeo. Para mim, há uma diferença dramática entre o buffer de 1000ms e o buffer de 200ms. O buffer de 5000ms parece melhor que o buffer de 1000ms.

: cache de rede = 2000


Se o problema persistir, por favor, marque como resposta, caso a sua dúvida não tenha sido solucionada, por favor, poste novamente.
Piotr Kula

0

Postei uma possível solução no fórum raspberry usando um servidor RTSP leve baseado no live555 que captura o H264 a partir de um driver V4L2. Está disponível no github h264_v4l2_rtspserver

Isso foi feito para a raspicamera, mas deve funcionar com qualquer dispositivo V4L2 que forneça H264.


-1

Se eu entendi bem sua situação, você quer que o Raspberry transcodifique o vídeo para o H264? Eu acho que é por isso que você obtém desempenho ruim, porque o VLC está usando codificação de software e o Raspberry não é poderoso para essa tarefa.

Eu sugeriria tentar com o Gstreamer e os gst-omxplugins . Há um elemento para a codificação de vídeo de hardware que seria um bom servidor a partir do seu Raspberry.


1
Como ele disse, a câmera Logitech já oferece H.264. Portanto, o rPi está apenas transportando quadros, mas não fazendo nenhuma codificação.
Matthias

Ele não está transcodificando. Apenas retransmitindo os dados. Como ele usa fluxo diretamente.
Piotr Kula
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.