Streaming de vídeo com Raspberry Pi Zero W 23

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.

Case Raspberry Pi Zero W com câmera

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. Tela principal M-Jpeg 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:

Teste de streaming

É 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…

VLC

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.

Streaming de vídeo com Raspberry Pi

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. 

Faça seu comentário

Acesse sua conta e participe

23 Comentários

  1. É possível trocar a porta no MJPG-STREAMER?

  2. É possível enviar o stream também simultaneamente para o Google drive ? Ou para um servidor na nuvem ?

    1. 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

  3. 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

    1. 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

  4. Muito legal, também dá pra fazer com Raspbarry pi 3 b?

    1. Olá,

      É possível fazer em qualquer modelo de Raspberry que tenha acesso a a internet 😀

      Abraço!
      Rosana – Equipe MakerHero

  5. 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.

    1. Olá Alexandre,

      Você recebe alguma mensagem de erro?

      Abraço!
      Rosana – Equipe MakerHero

  6. 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?

    1. 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

  7. Gostaria de transmitir um vídeo com duas simultaneamente com dois raspberry pi zero w para gerar uma imagem stereo como fazer isto?

    1. Olá Henrique!

      A partir desse método eu acredito não ser possível.

      Abraços!

      André – Equipe MakerHero

  8. 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

    1. 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?

  9. 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?

    1. Olá Carlos!

      Não sei se o MJPEG Streamer tem essa funcionalidade. Veja nas opções de Help

      ./mjpg_streamer –help

      Abraço!

      1. Bom dia Giovanni, obrigado pela resposta…irei conferir e ver se existe essa possibilidade, mas pelo que andar pesquisando não tem.

      2. É amigo, procurei e não achei. Parti para o MotionEye, farei testes com o Pi W Zero.

  10. 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.

    Géssica Milena Duarte de Oliveira
    1. 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

Trackbacks and Pingbacks

  1. […] no blog uma série de projetos com ela, como robô que utiliza visão computacional, campainha IoT, streaming de vídeo e por aí vai. Mas esta placa pode ir além, podendo ser aplicada tranquilamente como servidores […]

  2. […] câmeras juntamente com a Raspberry Pi podemos criar diversos tipos de aplicações, desde câmeras IP até robôs com processamento de imagem usando OpenCV. Neste post vamos mostrar a nossa nova […]