Como transmitir vídeo da câmera Raspberry Pi e assisti-lo ao vivo

93

Eu sou novo no Raspberry Pi e ainda novo na câmera Raspberry Pi. Eu já vi muitos tutoriais on-line para a câmera Raspberry Pi, mas ainda não encontrei o que me permite transmitir diretamente da câmera Raspberry Pi como você pode com uma webcam (usando SimpleCV ou OpenCV). Esperava que alguém pudesse me apontar na direção certa.

Engenheiro de brotação
fonte
você tentou mjpgstreamer? Shell eu posto a solução?
precisa saber é o seguinte
3
As pessoas que arelooking para solução de latência zero, deve verificar raspberrypi.stackexchange.com/a/32521/30681
igaurav
Se você possui ssh e mpv: ssh raspberrypi raspivid -o - -t 0 -fps 25 -w 640 -h 360 | mpv - --speed 2 --fps 25(o "--speed 2" impede muito o atraso).
Metamórfico

Respostas:

81

A solução sugerida por Diego é boa, exceto que é bem lenta e tem um grande atraso de vídeo, já que o vlc re-transmite um fluxo do raspvid. Desde 12/2013, existe um driver oficial v4l2 disponível: http://www.ics.com/blog/raspberry-pi-camera-module#.VJFhbyvF-b8 Isso torna obsoleto o mencionado retransmissão. Basta carregar o módulo e usá-lo:

sudo modprobe bcm2835-v4l2
cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}'

Isso cria um fluxo http na porta 12345, você também pode usar outros formatos, como o rtcp da resposta de Diego. Leia mais aqui: https://web.archive.org/web/20151012014829/http://www.videolan.org:80/doc/streaming-howto/en/ch03.html

Laos
fonte
2
Nesta resposta , é sugerido para adicionar :demux=264a CVLC porque o fluxo é h264 RAW e você precisa definir o demuxer: cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}' :demux=264. Isso possibilita assistir ao stream no VLC para Android, por exemplo.
Jaime M.
8
No link fornecido, em vez de autoreconf -vfivocê deve agora usar #./bootstrap.sh
JuJoDi
1
Existe uma maneira que me permita transmitir o vídeo e também salvá-lo no cartão SD RPi?
Ou Weinberger
4
Acho que vale a pena observar / confirmar que esse método não funciona em um ambiente sem cabeça. Estou recebendo erros, um dos quais fala sobre o X11
Nick
41

Existem várias opções que você pode escolher. No meu trabalho, estamos usando o VLC para transmitir vídeos capturados pelo Raspberry Pi Camera de nossas salas de servidores para o escritório. Uma desvantagem disso é que há um atraso de cerca de 5 segundos e eu não encontrei uma solução para isso. A seguir, nossa configuração:

  1. Tenha o raspbian instalado e atualizado e verifique se a câmera está ativada (você pode habilitá-lo executando sudo raspi-config e escolha Ativar câmera)

    sudo apt-get update
    sudo apt-get upgrade
    
  2. Instale o vlc

    sudo apt-get install vlc
    
  3. Crie um script para iniciar o fluxo com o seguinte conteúdo ou execute o comando (você não poderá fazer mais nada se apenas executar o comando).

    sudo nano myscript.sh
    raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264
    
  4. Tornar o script executável

    sudo chmod +x myscript.sh
    
  5. Se você deseja iniciar o fluxo automaticamente, adicione o script ao crontab. Para fazer isso funcionar, tive que criar outro script executado pelo cron (o OBS! VLC não pode ser executado como sudo, portanto, verifique se você está no cron certo). sudo nano myscript2.sh:

    #!/bin/bash
    /path/to/myscript.sh
    

    Então:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Para assistir ao fluxo de vídeo, abra o VLC em um computador na mesma rede que o raspberry pi que você está usando para streaming. Pressione Mídia -> Abrir fluxo de rede e cole o seguinte no campo:

    rtsp://[IP].[TO].[THE].[PI]:8554/
    

Se você não se importa com o FPS (quadros por segundo) e não deseja nenhum atraso, pode usar o MJPEG. Você pode ler mais sobre isso AQUI

Assista ESTE wiki sobre Módulo de câmara Raspberry Pi. Espero que você encontre o que está procurando.

Diego
fonte
Alguma idéia de por que eu estaria recebendo o seguinte no VLC no Windows? Sua entrada não pode ser aberta: o VLC não pode abrir o MRL 'rtsp: //192.168.1.78: 8554'. Verifique o log para obter detalhes. O lado do Pi parece estar ok - sem erros e parece reagir ao cliente conectado?
precisa saber é o seguinte
@monojohnny O raspberry pi está fluindo? Verifique se o vídeo está realmente funcionando, conectando uma tela. Se o vídeo estiver funcionando, você verá o fluxo na tela conectado ao raspberry pi.
Diego
@monojohnny Obrigado pelo artigo Diego ... funciona perfeitamente na primeira tentativa! monojohnny ... você tem que colocar o "/" à direita caso contrário vlc reclama. Tente isso: rtsp: //192.168.1.78: 8554 /
Sujay Phadke
Obrigado @Diego, isso funcionou muito bem para mim, mas como faço para sair do meu stream?
Denoteone
Eu tenho o mesmo problema no Windows e não consigo transmitir o vídeo do meu pi. dado eu vejo o streaming de vídeo da câmera pi em uma tela conectada ao pi, mas não através do VLC instalado no meu windows 10 pc.
Mostafa
23

Eu tentei algumas opções. No entanto, encontrei o melhor resultado usando esse projeto: RPi-Cam-Web-Interface da comunidade eLinux

o fluxo tem atraso quase zero.

boa sorte :)

user2998302
fonte
4
Pessoas que procuram latência zero, verifique isso com certeza. Adereços para @ user2998302. Eu não posso acreditar, por um ano isso não é positivo (reconhecimento) sobre isso.
Izurav #
Embora essa seja uma configuração rápida e fácil, o software está longe de ser otimizado; portanto, apesar de sua baixa latência (não existe latência zero), a interface é muito faladora e usa alguns ciclos extras de CPU. Não é um problema se você não estiver executando qualquer outra coisa, mas poderia ser se você é, especialmente em um Pi 1.
Nick
Isso é incrível!
precisa saber é o seguinte
O streaming de vídeo na Web mais rápido até agora entre os que eu testei (também o driver nativo v4l2 transmitido via vlc), latência quase zero. Não adianta reclamar sobre otimização, pois todos os recursos da Internet relacionados a esse problema não oferecem nenhum resultado melhor do que esse aplicativo.
Gabber
uau, devo admitir que este é demais!
precisa saber é o seguinte
18

A maneira mais fácil de encontrar, para obter um vídeo ao vivo de um raspberry pi sem cabeça, com uma câmera raspberry pi.

Essa solução funciona imediatamente, sem a instalação de software adicional no PI.

No PI:

raspivid -t 0 -l -o tcp://0.0.0.0:3333

No computador, é possível transmitir com o VLC:

vlc tcp/h264://192.168.66.154:3333

(supondo que 192.168.66.154 é o endereço IP do PI)

Per Hansen
fonte
Bem-vindo ao Raspberry Pi! Geralmente, desencorajamos a cópia literal de suas respostas de uma pergunta para outra - quando você atingir 15 representantes, poderá sinalizar perguntas idênticas como 'duplicadas', para que haja apenas uma cópia da sua resposta. Obrigado por compartilhar sua resposta para o problema!
precisa saber é o seguinte
@ Hans Hansen não está trabalhando para mim ... Pode ser necessário fazer outra coisa além de atribuir uma porta.
Amit Ray
Isso funciona muito bem! Usando um RPi3B + e Raspbian 9.4 (estiramento) sem cabeça.
Dparkar
5

Postei uma possível solução no fórum raspberry usando um servidor RTSP leve, baseado no live555, alimentado com um driver V4L2 que suporta a captura H264:

sudo modprobe -v bcm2835-v4l2
git clone https://github.com/mpromonet/v4l2rtspserver.git
cd v4l2rtspserver
cmake .
make install
v4l2rtspserver -H <height> -W <width> -F <fps>

Em seguida, você poderá acessar o fluxo RTSP usando:

vlc rtsp://<raspberry>:8554/unicast
mpromonet
fonte
e o atraso?
kuhajeyan
mais curto que o cvlc.
Mpromonet
O cmake reclamou de "Não foi possível encontrar o ALSA (ausente: ALSA_LIBRARY ALSA_INCLUDE_DIR)", até adicionar mais alguns pacotes ao meu projeto. A solução está dentro destes: "sudo apt-get install libopus-dev libexpat1-dev libasound2-dev libudev-dev libavahi-client-dev" (meu palpite é que pode ser suficiente aqui).
MoonCactus 15/09/16
ah, e funciona muito bem (solução leve), obrigado. O intervalo de tempo é decente, cerca de 2 segundos e se compara favoravelmente com outras soluções imho.
MoonCactus 15/09/16
@ MoonCactus: Acho que corrigi a instalação do ALSA (ele precisa apenas do libasound2-dev). O atraso deve ser inferior a um segundo, se você usar vlc, você pode reduzir o buffer de rede usando --network-caching 300
mpromonet
4

O UV4L (também) suporta vídeo padrão HTML5 e streaming de áudio sem configuração necessária. Outras opções também são possíveis, como MJPEG sobre http.

Atualizar:

O UV4L agora também suporta transmissão de áudio e vídeo ao vivo para o Jitsi Meet Rooms pela Web. Nenhuma configuração especial é necessária. É tão fácil quanto preencher seu nome, quarto e clicar em Iniciar .

2ª Atualização:

O UV4L agora também suporta vídeo codificado em hardware H264, em full fps, HD e possivelmente Full HD no futuro.

prinxis
fonte
1
A única coisa é que você só consegue obter o fluxo elementar que praticamente tudo o que NÃO entende. Não adianta muito, infelizmente. Você precisa de algo para emitir o WebRTC (que, se você tiver um Pi2 e posterior, poderá usá-lo com UV4L. Se você estiver precisando (devido à restrição de energia / tamanho) um Zero para fazer isso, seu SOL.
Svartalf
3

Ambos mjpeg_streamere motionparecem ter uma latência melhor que o cvlc.

Usando mjpg_streamer

mjpeg_streamer requer compilação, mas as instruções no github são diretas.

Após a compilação, ela pode ser executada iniciando start.shno diretório do projeto ou executando diretamente (no diretório do projeto):

./mjpg_streamer -i "./input_uvc.so -rot 180" -o "./output_http.so -w ./www -p 8090"

onde 8090está a porta TCP. Se não especificado, a porta 8080será usada por padrão. O start.shscript contém alguns exemplos de uso com opções extras.

Usando motion

O Motion inclui um serviço systemd que facilita a inicialização automática na inicialização, parada ou reinicialização.

Para usá-lo no modo de webcam IP, as seguintes configurações devem ser definidas em /etc/motion/motion.conf:

daemon on
stream_localhost off
output_pictures off
ffmpeg_output_movies off
stream_maxrate 24
framerate 24
width 640
height 480

Em seguida, no /etc/default/motionconjunto:

start_motion_daemon=yes

Para fazer o serviço iniciar automaticamente na inicialização:

systemctl enable motion

Use systemctl start/stop/restart motionpara a ação correspondente.

A porta de streaming padrão é 8081. A porta está configurada stream_portem /etc/motion/motion.conf.

ccpizza
fonte
1

Não sei se você está procurando um software de vigilância, mas consegui instalar e executar motionum detector de movimento de software. Você deve dar uma olhada no guia oficial .

Morgan Courbet
fonte
Movimento só se aplica a câmeras USB
geneorama
3
@geneorama motion use a interface video4linux que não está restrita à câmera USB, o módulo bcm2835-v4l2 fornece acesso à placa da câmera por meio dessa interface.
Mpromonet
1

Consegui transmitir vídeo usando o uv4l WebRTC no Raspberry Pi 2. É super fácil. Basta seguir este tutorial. Espero que isso ajude.

bdsys
fonte
Inclua aqui partes relevantes do tutorial, para evitar a podridão do link.
Bex
Aplicável apenas no Pi2 e acima. Não funciona com 1A / 1A + / Zero. Não inteiramente certo porque ele não pode já que as pessoas parecem ser capazes de fazê-lo, mas hey ...
Svartalf
1

Eu estava tendo problemas para obter o fluxo de vídeo no Windows 7. Havia muitas soluções Linux, não consegui replicá-las no Windows até agora. Eu tenho uma solução bastante rápida eventualmente:

  1. obtenha uma versão do netcat para Windows: http://joncraton.org/files/nc111nt.zip , descompacte-a e adicione-a ao caminho
  2. obtenha uma nova versão do mpc-hc, que pode ser lida em stdin: https://mpc-hc.org/downloads/ install e inclua seu caminho também (o meu é de 64 bits, mas 32 bits provavelmente também)

No raspberry pi:

raspivid -t 0 -w 1024 -h 768 -fps 20 -b 1000000 -o - | nc your.receiver.ip.address 5001

Na máquina Windows:

nc -l -p 5001 | mpc-hc64 -

Assim, eu acho que nada é reembalado ou restaurado, remuxado ou o que seja. O fluxo binário do raspvid é alimentado no mpc e mostrado. Minha framboesa opera por wifi, então, a princípio, recebo um atraso razoável, que é em questão de meio minuto reduzido para o atraso de 0,2-0,3 segundos.

Infelizmente, não pude usar o vlc da mesma maneira, pois nc -l -p 5001 | vlc -apenas abre a janela do vlc sem nenhum vídeo.

Grigory Makeev
fonte
1

Usei o Nginx com suporte RTMP para transmitir para o mundo, juntamente com o avconv para processar a entrada da câmera. O código está disponível no Github .

TTT
fonte
Bom, você gostaria de compartilhar alguma experiência com atraso de vídeo?
kuhajeyan
2
Sim, houve um atraso de cerca de 5 segundos.
TTT
0

Embora o código de Peter Hansen possivelmente funcione bem em uma LAN, para garantir a integridade: o TCP trata da integridade dos dados e em tempo real. Em um fluxo em tempo real, algumas perdas de dados podem ser aceitáveis ​​por uma exibição oportuna. Nesse caso, o UDP pode ser melhor. Eu não testei esse código.

Se for uma câmera de segurança, o multicast pode ser considerado. Os roteadores modernos podem fazer isso até nos modelos de US $ 100.

Conta
fonte
0

Instalei uma solução ONVIF em https://github.com/BreeeZe/rpos no meu pi, seguindo as instruções em README.md .

A única diferença é que eu instalei node v8.4.0. Isso me permite ver a saída da minha câmera em um NVR conectado na mesma rede. Além disso, a câmera pode ser reproduzida diretamente pelo fluxo de rede do VLC player usando o endereçortsp://192.168.1.3:8554/h264

KrIsHnA
fonte
0

Algum tempo depois, um problema teve um problema semelhante:

https://www.npmjs.com/package/ws-avc-player

É mais básico do que outras soluções propostas, mas acho que funciona bem se a baixa latência na Web é a prioridade.

Funciona na maioria dos navegadores (mesmo móveis a 480p) sem nenhum plug-in necessário no navegador.

MatijaG
fonte
Eu não escrevi o próprio descodificador, é um projeto separado github.com/mbebenita/Broadway No entanto é surpreendentemente bem otimizado, e como eu disse na resposta que pode easly lidar com um 480p em um droid. A razão pela qual eu fui com a Brodway é porque não há codificador de hardware vp8 / 9 no rpi, então o h264 é realmente a única opção decente. Mas se você quiser usar o decodificador h264 nativo no navegador, poderá esquecer a baixa latência.
MatijaG
Parece tão incrível que eu tenho que tentar.
Kwasmich 07/0318
Qualquer feedback será muito bem-vindo :)
MatijaG
Só agora eu tinha algum tempo livre. Estou tendo problemas para que o exemplo seja executado com o raspividfeed da câmera. Por ffmpegoutro lado, estou apenas obtendo o décimo de quadros por segundo. Eu usei um Raspbian limpo e um Pi Zero. Você tem algumas dicas para mim?
Kwasmich 18/04/19
Sim, com o ffmpeg haverá um não acesso por falta de aceleração de hardware. Tente executar o exemplo com: node example/index.js raspividEle deve funcionar fora da caixa se você tiver problemas tente executar apenas node example/index.jse, separadamente, /opt/vc/bin/raspivid -pf baseline -ih -t 0 -w 640 -h 480 -hf -fps 15 -g 30 -o - | nc localhost 5000e veja se você obter quaisquer erros de raspivid
MatijaG