En esta guía, te enseñaremos a configurar un servidor streaming de video con una Raspberry Pi y una cámara usando un script simple con la librería Picamera2
. Podrás acceder al servidor web de streaming desde cualquier navegador web de tu red local.

Prerrequisitos
Antes de continuar, debes cumplir los siguientes requisitos:
- Necesitarás una Raspberry Pi y una cámara Raspberry Pi .
- Debes tener una Raspberry Pi con sistema operativo Raspberry Pi (32 bits o 64 bits).
- Debes poder establecer una conexión SSH con su Raspberry Pi .
Librería de Python Picamera2
Picamera2es una librería de Python para interactuar con la cámara de Raspberry Pi. Se basa en la arquitectura de cámaras
libcameray la mantiene la fundación Raspberry Pi. No es recomendable usar la antigua librería Picamera
con las últimas versiones del sistema operativo Raspberry Pi.
La librería de Picamera2 es compatible con todos los modelos de Raspberry Pi, desde Pi Zero hasta RPi 5.
Instalación de la librería Picamera2
Una vez establecida una conexión SSH con tu Raspberry Pi, actualiza y mejora tu Raspberry Pi si es que hay actualizaciones disponibles. Ejecuta el siguiente comando:
sudo apt update && sudo apt upgrade -ysudo apt install -y python3-picamera2Preparación de la cámara Raspberry Pi
La cámara Raspberry Pi es un módulo de cámara pequeño y de bajo costo compatible con las placas Raspberry Pi. Si bien puede ser lo suficientemente bueno para la mayoría de los proyectos, también existen otras cámaras USB compatibles con nuestra Raspberry que pueden resultar una gran opción. Para esta guía, utilizaremos el módulo Raspberry Pi Camera V2 que se muestra en la siguiente imagen:
Esta guía también funciona con la Raspberry Pi Camera V3 y la cámara es compatible con todos los modelos de Raspberry Pi.
Habilitar el módulo de cámara Raspberry Pi
Si estas corriendo la ultima versión del OS de Raspberry pi, las cámaras oficiales serán detectadas y activadas automáticamente.Conectando la cámara
Conectar el módulo de cámara Raspberry Pi es muy sencillo. Con la Pi apagada, conecta la cámara al puerto CSI de la Pi como se muestra en la siguiente figura.
Servidor streaming de video MJPEG – Código Python
Ejecutar un servidor web de transmisión es bastante fácil con la cámara Raspberry Pi gracias a la librería Picamera2 de Python. Cree un nuevo archivo llamado stream_server.py ejecutando el siguiente comando:nano stream_server.pyimport io
import logging
import socketserver
from http import server
from threading import Condition
from picamera2 import Picamera2
from picamera2.encoders import JpegEncoder
from picamera2.outputs import FileOutput
PAGE = """
<html>
<head>
<title>picamera2 MJPEG streaming demo</title>
</head>
<body>
<h1>Picamera2 MJPEG Streaming Demo</h1>
<img src="stream.mjpg" width="640" height="480" />
</body>
</html>
"""
class StreamingOutput(io.BufferedIOBase):
def __init__(self):
self.frame = None
self.condition = Condition()
def write(self, buf):
with self.condition:
self.frame = buf
self.condition.notify_all()
class StreamingHandler(server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.send_response(301)
self.send_header('Location', '/index.html')
self.end_headers()
elif self.path == '/index.html':
content = PAGE.encode('utf-8')
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.send_header('Content-Length', len(content))
self.end_headers()
self.wfile.write(content)
elif self.path == '/stream.mjpg':
self.send_response(200)
self.send_header('Age', 0)
self.send_header('Cache-Control', 'no-cache, private')
self.send_header('Pragma', 'no-cache')
self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
self.end_headers()
try:
while True:
with output.condition:
output.condition.wait()
frame = output.frame
self.wfile.write(b'--FRAMErn')
self.send_header('Content-Type', 'image/jpeg')
self.send_header('Content-Length', len(frame))
self.end_headers()
self.wfile.write(frame)
self.wfile.write(b'rn')
except Exception as e:
logging.warning(
'Removed streaming client %s: %s',
self.client_address, str(e))
else:
self.send_error(404)
self.end_headers()
class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
allow_reuse_address = True
daemon_threads = True
picam2 = Picamera2()
picam2.configure(picam2.create_video_configuration(main={"size": (640, 480)}))
output = StreamingOutput()
picam2.start_recording(JpegEncoder(), FileOutput(output))
try:
address = ('', 7123)
server = StreamingServer(address, StreamingHandler)
server.serve_forever()
finally:
picam2.stop_recording()stream.mjpg se refiere a los archivos de transmisión (el video actual).
PAGE = """
<html>
<head>
<title>picamera2 MJPEG streaming demo</title>
</head>
<body>
<h1>Picamera2 MJPEG Streaming Demo</h1>
<img src="stream.mjpg" width="640" height="480" />
</body>
</html>
"""Ejecutando el script
Ejecute el siguiente comando para obtener la dirección IP de Raspberry Pi. Necesitarás la dirección IP para acceder a tu servidor web.hostname -I
Luego, inicia tu servidor web ejecutando el siguiente comando en el directorio de tu proyecto:
python stream_server.py
Finalmente, abre cualquier navegador web en tu red local y escribe la dirección IP de tu Raspberry Pi seguida por el numero de puerto :7123
http://raspberry-pi-ip-address:7123Y eso es todo! El servidor streaming de video MJPEG ya funciona desde tu Raspberry Pi
PARA FINALIZAR
En esta guía rápida, aprendes como configurar una cámara IP usando la Raspberry Pi y la cámara oficial. Esto puede ser muy útil para monitorear algo en tu red de en tiempo real. Uno de los usos más comunes es para poder seguir el proceso en impresoras 3D por ejemplo, pero también hay un amplio catálogo de aplicaciones como timbres inteligentes o cámaras de seguridad que funcionan de manera excelente.Aprende esto en un curso
Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial:
- Domina la Raspberry Pi: Sistemas y Conectividad — nivel intermedio, 18 horas presenciales en Santiago
- uPython y Electrónica Creativa con Raspberry Pi Pico — nivel inicial, 15 horas presenciales en Santiago