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?
fonte
Respostas:
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
fonte
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-i
para caputre o fluxo encanado e-f
você precisará verificar novamente como produzi-lo H264. o FLV o reembala em FLV que pode ser reproduzido com players de HTML.ou um exemplo, descobri que tem como alvo diretamente a V4L, mas oyu precisa ter a câmera presente em
/dev/video*
*1
ou mais ...o
-f
denota 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.
fonte
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
fonte
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
fonte
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.
fonte
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-omx
plugins . Há um elemento para a codificação de vídeo de hardware que seria um bom servidor a partir do seu Raspberry.fonte