Você já deve ter visto em nosso Blog como gravar vídeos e tirar fotos com a Raspberry Pi e também como fazer streaming de vídeo com o RPi Cam Web Interface. Neste tutorial iremos mostrar mais uma opção de streaming usando MJPG-streamer, onde você poderá visualizar o vídeo de sua Raspberry Pi em tempo real através de um navegador web ou programa como o VLC.
Montagem da câmera na Raspberry Pi
Na loja MakerHero você encontra as câmeras da Raspberry Pi. Ambas as câmeras já vem com um cabo flat para conexão com o modelo 3. Se você deseja utilizar as câmeras com a Zero W, vendemos a case oficial da Raspberry Pi Zero que acompanha um cabo flat adaptado. Basta conectar a câmera como na figura abaixo.
Sobre o MJPG-streamer
MJPG-streamer é uma aplicação que “lê” arquivos JPG de webcams compatíveis com Linux-UVC e faz um streaming desses arquivos em formato M-JPEG através do protocolo HTTP. Esse streaming pode ser visto em navegadores Web, VLC e outros softwares. Foi um programa originalmente desenvolvido para dispositivos embarcados com recursos de RAM e CPU bem limitados. É um programa sucessor do UVC-streamer, também uma aplicação para streaming de dispositivos compatíveis Linux-UVC.
Após instalado o MJPG-streamer, e com ajuda de alguns scripts de inicialização, será possível visualizar o vídeo da câmera da sua Raspberry Pi em tempo real através do navegador. Veja abaixo como instalar o MJPG-streamer.
Instalando o MJPG-streamer
Acesse o sistema de sua Raspberry Pi seja via monitor HDMI ou via terminal SSH e clone o repositório abaixo na pasta /home/pi do sistema Raspbian.
cd /home/pi git clone https://github.com/jacksonliam/mjpg-streamer.git
Esse repositório é na verdade um fork do projeto original com adição ao suporte a câmera da Raspberry Pi.
Instale os seguintes programas necessários para compilação do MJPG-streamer.
sudo apt-get install cmake libjpeg8-dev
Então inicie a compilação.
cd mjpg-streamer/mjpg-streamer-experimental make sudo make install
Utilizando o MJPG-streamer
Após a compilação você deve notar que temos um binário chamado mjpg_streamer e também alguns plugins .so dentre eles o input_raspicam.so e output_http.so.
Antes de executar o MJPG-streamer, certifique-se de que sua Raspberry está conectada a uma rede Wi-Fi e que a interface de câmera está configurada no raspi-config. Para executar o MJPG-streamer com a câmera da Raspberry Pi utilize os comandos abaixo.
export LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so"
Se tudo ocorrer bem você deverá ver algo do tipo:
MJPG Streamer Version.: 2.0 i: fps.............: 5 i: resolution........: 640 x 480 i: camera parameters..............: Sharpness 0, Contrast 0, Brightness 50 Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0 Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none' Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128 Rotation 0, hflip No, vflip No ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000 o: www-folder-path......: ./www/ o: HTTP TCP port........: 8080 o: HTTP Listen Address..: (null) o: username:password....: disabled o: commands.............: enabled i: Starting Camera Encoder Buffer Size 81920
Agora abra um navegador e acesse o IP da sua Raspberry Pi na porta 8080. Você deverá ver a página de boas vindas do MJPG-streamer.
Clique na aba Stream onde você poderá ver o vídeo em tempo real. Você também pode ver o link direto para o vídeo clicando em here como mostrado na imagem abaixo:
É possível selecionar a resolução, FPS e qualidade de vídeo como mostrado no comando abaixo:
./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so -fps 15 -x 640 -y 480 -quality 35"
Também é possível utilizar o programa VLC para visualizar o vídeo. Abra o VLC e selecione o menu Open Network Stream…
Insira o link direto, já visto acima, no campo de texto e clique em Play. O stream de vídeo deve iniciar logo em seguida.
Automatizando o Streaming de vídeo com Systemd
Vamos automatizar os comandos vistos acima utilizando systemd e shell script para que o streaming se inicialize logo após o sistema da Raspberry pi iniciar.
Crie um arquivo de nome start-camera.service com o conteúdo abaixo e coloque-o na pasta /lib/systemd/system
[Unit] Description=MJPEG-streamer Wants=network-online.target After=network-online.target [Service] ExecStart=/home/pi/start-camera.sh User=pi [Install] WantedBy=multi-user.target
Crie um outro arquivo de nome start-camera.sh com o conteúdo abaixo e coloque-o na pasta /home/pi.
#!/bin/bash cd /home/pi/mjpg-streamer/mjpg-streamer-experimental/ export LD_LIBRARY_PATH=. mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so -fps 15 -x 640 -y 480 -quality 35"
Não se esqueça de tornar o arquivo executável.
chmod +x start-camera.sh
Ative o e inicie o serviço com os comandos abaixo:
sudo systemctl enable start-camera.service sudo systemctl start start-camera.service
Pronto! Agora sempre que a Raspberry Pi iniciar, o streaming de vídeo já estará disponível automaticamente.
Com isso você pode integrar os conceitos vistos neste tutorial com Node.js, HTML e criar sua própria interface de uma câmera IP.
Gostou de fazer streaming de vídeo com a Raspberry Pi Zero W? Deixe seu comentário logo abaixo.
É possível trocar a porta no MJPG-STREAMER?
É possível enviar o stream também simultaneamente para o Google drive ? Ou para um servidor na nuvem ?
Paulo
Talvez se você conseguir acessar os arquivos que estão sendo armazenados no cache, pode ser que dê pra transferir.
Abraços!
Diogo – Equipe MakerHero
Olá!
Parabéns pelo post e por todo seu trabalho, tanto este site como o Embarcados e o Fazedores são muito úteis para mim 🙂
Eu preciso fazer uma transmissão sem fio utilizando uma Raspberry Pi Zero W e, acho que a melhor forma para eu poder acompanhar o vídeo é através da minha linda, maravilhosa e azul Raspberry Pi 3 B+ Anatel com meu display de 3.5″, na versão de encaixe dos GPIOs. Porém, será um projeto que irei aplicar na minha primeira viagem para coletar informações e vídeos para meu canal, que em breve estará no YouTube, que será para Rondônia. O local de aplicação do projeto será em uma comunidade nativa (ou índios gourmet, rs) na qual só é acessível descendo o Rio Madeira por 8 horas e depois mais umas 2 horas de caminhada a pé, ou seja: sem internet…
Pergunta: se eu criar uma espécie de “intranet”, utilizando um roteador, ou uma Linkit Smart 7688, Esp32, enfim, algum microcontrolador embarcado, é possível eu utilizar a técnica objeto deste Post? Se sim, vcs teriam alguma sugestão para me aconselhar? Pois preciso acompanhar o vídeo em tempo real, mas seria magnífico se eu pudesse gravar…
Aguardo
Abs
Samuel Vaz
Samuel,
A ideia parece realmente muito legal!
É possível você transformar a sua Pi num hotspot e como qualquer dispositivo conectado a um hotspost pode se comunicar entre eles e com a Pi, idependente de sinal de internet. Fazendo isso, você poderia baixar o aplicativo RaspiCam Remote para ver tudo pelo celular também 🙂
Abraços!
Diogo – Equipe MakerHero
Muito legal, também dá pra fazer com Raspbarry pi 3 b?
Olá,
É possível fazer em qualquer modelo de Raspberry que tenha acesso a a internet 😀
Abraço!
Rosana – Equipe MakerHero
Ola, primeiramente obrigado pelo artigo, o mesmo serviu de muita ajuda.
Quanto a automatização do processo não consigo permissão para gravar arquivos na pasta descrita, gostaria de saber se podem me ajudar, agradecido.
Olá Alexandre,
Você recebe alguma mensagem de erro?
Abraço!
Rosana – Equipe MakerHero
Olá Giovanni, tudo bem?
Obrigado pelo artigo 🙂
Estou tendo problemas em relação a velocidade do streaming.. Mesmo diminuindo a qualidade (-quality 10) e diminuindo a resolução..
Alguma dica?
Olá Renan,
Qual resolução você está usando?
Também é importante observar que a velocidade da internet. Vai influenciar na velocidade do streaming.
No mais, não espere algo perfeito, já que a Raspberry Pi Zero W possui algumas limitações.
Abraço!
Rosana – Equipe MakerHero
Gostaria de transmitir um vídeo com duas simultaneamente com dois raspberry pi zero w para gerar uma imagem stereo como fazer isto?
Olá Henrique!
A partir desse método eu acredito não ser possível.
Abraços!
André – Equipe MakerHero
After inserting the ipadress followed by :8080 i am getting this in web browser
, i am using raspberry Pi Camera Rev 1.3, please help me resolve this.
This page isn’t working 192.168.1.4 didn’t send any data.
ERR_EMPTY_RESPONSE
Hello Neeran and welcome to our blog!
Let’s check a few things and try to solve your issue.
Did you enable the camera interface in raspi-config?
Did you get any error during mjpg-streamer installation?
Did you start mjpg-streamer with the following commands?
export LD_LIBRARY_PATH=.
./mjpg_streamer -o “output_http.so -w ./www” -i “input_raspicam.so”
Did you get any error during mjpg-streamer startup?
Is your Raspberry Pi connected to the internet?
Can you “ping” your pi’s IP address from you computer?
Bom dia Filipe, acompanho seu site a algum tempo. Segui esse tutorial, alem de outros, e funcionou perfeitamente.
Agora deixa eu te fazer uma pergunta: Tem como eu adicionar algum texto nas imagens (Steaming ou Snap) nesse exemplo que você postou?
Olá Carlos!
Não sei se o MJPEG Streamer tem essa funcionalidade. Veja nas opções de Help
./mjpg_streamer –help
Abraço!
Bom dia Giovanni, obrigado pela resposta…irei conferir e ver se existe essa possibilidade, mas pelo que andar pesquisando não tem.
É amigo, procurei e não achei. Parti para o MotionEye, farei testes com o Pi W Zero.
Tentei seguir este tutorial com uma webcam usb e deu o seguinte erro:
MJPG Streamer Version: git rev: f387bb44e6c087271b763b27da998bf2e06c4f5d
i: fps………….: 5
i: resolution……..: 640 x 480
i: camera parameters…………..:
Sharpness 0, Contrast 0, Brightness 50
Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0
Exposure Mode ‘auto’, AWB Mode ‘auto’, Image Effect ‘none’
Metering Mode ‘average’, Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
o: www-folder-path……: ./www/
o: HTTP TCP port……..: 8080
o: HTTP Listen Address..: (null)
o: username:password….: disabled
o: commands………….: enabled
i: Starting Camera
mmal: mmal_vc_component_create: failed to create component ‘vc.ril.camera’ (1:ENOMEM)
mmal: mmal_component_create_core: could not create component ‘vc.ril.camera’ (1)
error create camera
A minha webcam está normalmente instalada, tanto que ela tira fotos normalmente e eu já usei para outras aplicações.
Olá Géssica
Você habilitou uso de câmera nas configurações da raspberry?
No terminal digite sudo raspi-config e lá vai ter a opção para habilitar a câmera.
Tente também modificar as resoluções, talvez sua câmera não suporte certas resoluções.
Veja se o sistema reconheceu sua câmera e existe um dispositivo em /dev/videoX