Tabla de contenido:
- Paso 1: Funciones y limitaciones de ESP32
- Paso 2: formato de video
- Paso 3: formato de audio
- Paso 4: conversión de formato
- Paso 5: preparación del hardware
- Paso 6: Interfaz SD
- Paso 7: Ponlo junto
- Paso 8: Programa
- Paso 9: Benchmark
- Paso 10: ¡Feliz juego
Video: Reproducir video con ESP32: 10 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-31 10:18
Estos Instructables muestran algo sobre la reproducción de video y audio con ESP32.
Paso 1: Funciones y limitaciones de ESP32
Características
- 4 bus SPI, 2 bus SPI disponibles para espacio de usuario, son SPI2 y SPI3 o se denominan HSPI y VSPI. Ambos buses SPI pueden funcionar como máximo a 80 MHz. En teoría, puede enviar píxeles de color de 320x240 de 16 bits a SPI LCD a 60 fps, pero aún no ha contado el tiempo de sobrecarga requerido para leer y decodificar los datos de video.
- El bus SD de 1 bit / 4 bit puede conectar la tarjeta SD en protocolo nativo
- Salida de audio DAC interna I2S
- más de 100 KB de RAM disponible para búfer de audio y video
- Potencia de procesamiento suficiente para decodificar JPEG (reproducir Motion JPEG) y compresión de datos LZW (reproducir-g.webp" />
- La versión de doble núcleo puede dividir los datos de lectura de la tarjeta SD, decodificar y enviar a SPI LCD en múltiples tareas paralelas y aumentar el rendimiento de la reproducción
Limitaciones
- no hay suficiente RAM interna para tener un búfer de doble cuadro para 320x240 en color de 16 bits, lo que limita el diseño multitarea. Puede superar un poco con PSRAM externo aunque es más lento que la RAM interna
- no hay suficiente potencia de procesamiento para decodificar video mp4
- no todas las versiones de ESP32 tienen 2 núcleos, la muestra de tareas múltiples solo se beneficia en la versión de doble núcleo
Ref.:
Paso 2: formato de video
RGB565
O llamado color de 16 bits es un formato de datos sin procesar que se usa comúnmente en la comunicación entre la MCU y la pantalla a color. Cada píxel de color representado por un valor de 16 bits, los primeros 5 bits son el valor rojo, los siguientes 6 bits son el valor verde y luego el valor azul de 5 bits. El valor de 16 bits puede hacer una variación de color de 65536, por lo que también se llama colores de 64K. Por lo tanto, el tamaño del video de 1 minuto 320x240 @ 30 fps será: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 bytes o más de 260 MB
Este es un formato de archivo común en la web desde la década de 1990. Limita la variación de color para cada pantalla hasta 256 colores y no repite almacenar el píxel del mismo color que el marco anterior. Por lo tanto, puede reducir mucho el tamaño del archivo, especialmente cuando cada cuadro de animación no cambia demasiados detalles. La compresión LZW está diseñada para ser decodificada por una computadora de la década de 1990, por lo que ESP32 también tiene una potencia de procesamiento suficiente para decodificarla en tiempo real.
Motion JPEG
O llamado M-JPEG / MJPEG es un formato de compresión de video común para el hardware de captura de video con potencia de procesamiento limitada. En realidad, es simplemente una concatenación de cuadros JPEG fijos. Compare con MPEG o MP4, Motion JPEG no necesita una técnica computacionalmente intensiva de predicción entre cuadros, cada cuadro es independiente. Por lo que requiere menos recursos para codificar y decodificar.
Árbitro.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Paso 3: formato de audio
PCM
Un formato de datos sin procesar para audio digital. ESP32 DAC utiliza una profundidad de bits de 16 bits, lo que significa que cada dato de 16 bits representa una señal analógica digital muestreada. La mayoría de los videos y el audio de canciones usan comúnmente una frecuencia de muestreo de 44100 MHz, lo que significa 44100 señales analógicas muestreadas por cada segundo. Por lo tanto, los datos en bruto PCM de audio mono de 1 minuto tendrán un tamaño: 16 * 44100 * 60 = 42336000 bits = 5292000 bytes o más de 5 MB. El tamaño del audio estéreo será el doble, es decir, más de 10 MB.
MP3
MPEG Layer 3 es un formato de audio comprimido ampliamente utilizado para la compresión de canciones desde la década de 1990. Puede reducir drásticamente el tamaño del archivo a menos de una décima parte del formato PCM sin procesar
Árbitro.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Paso 4: conversión de formato
Este proyecto utiliza FFmpeg para convertir el video en formato legible ESP32.
Descargue e instale FFmpeg en su sitio oficial si aún no lo ha hecho:
Convertir a audio PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Convertir a audio MP3
ffmpeg -i entrada.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Convierta a RGB565
ffmpeg -i input.mp4 -vf "fps = 9, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w-220) / 2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb
Convertir a-g.webp
ffmpeg -i input.mp4 -vf "fps = 15, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w-220) / 2: 0, split [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif
Convertir a Motion JPEG
ffmpeg -i input.mp4 -vf "fps = 30, scale = -1: 176: flags = lanczos, crop = 220: in_h: (in_w-220) / 2: 0" -q: v 9220_30fps.mjpeg
Nota:
El-g.webp" />
Paso 5: preparación del hardware
Tablero de desarrollo ESP32
Cualquier placa de desarrollo ESP32 de doble núcleo debería estar bien, esta vez estoy usando un TTGO ESP32-Micro.
Pantalla a color
Cualquier pantalla a color que admita Arduino_GFX debería estar bien, esta vez estoy usando una placa de conexión ILI9225 con ranura para tarjeta SD.
Puede encontrar la lista de visualización de color compatible con Arduino_GFX en Github:
github.com/moononournation/Arduino_GFX
Tarjeta SD
Cualquier tarjeta SD debería estar bien, esta vez estoy usando una micro SD de 8 GB de "velocidad normal" SanDisk con adaptador SD.
Audio
Si solo desea usar auriculares, simplemente conecte los pines de los auriculares al pin 26 y GND podrá escuchar el audio. O puede usar un pequeño amplificador para reproducir audio con el altavoz.
Otros
Algunas placas de prueba y cables de placa de pruebas
Paso 6: Interfaz SD
La placa de ruptura LCD ILI9225 también incluyó clavijas de ruptura de ranura SD crd. Se puede utilizar como bus SPI o bus SD de 1 bit. Como mencioné en mis instrucciones anteriores, prefiero usar un bus SD de 1 bit, por lo que este proyecto se basará en un bus SD de 1 bit.
Paso 7: Ponlo junto
Las imágenes de arriba muestran la plataforma de prueba que estoy usando en este proyecto. La placa blanca está impresa en 3D, puede descargarla e imprimirla en Thingiverse:
La conexión real depende del hardware que tenga a mano.
Aquí está el resumen de la conexión:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0 / MISO -> Resistencia 1k -> Vcc GPIO 14 -> SD CLK GPIO 15 -> SD CMD / MOSI GPIO 18 -> LCD SCK GPIO 19 -> LCD MISO GPIO 22 -> LCD LED GPIO 23 -> LCD MOSI GPIO 27 -> LCD DC / RS GPIO 33 -> LCD RST
Ref.:
Paso 8: Programa
IDE de Arduino
Descargue e instale Arduino IDE si aún no lo ha hecho:
www.arduino.cc/en/main/software
Soporte ESP32
Siga las instrucciones de instalación para agregar compatibilidad con ESP32 si aún no lo ha hecho:
github.com/espressif/arduino-esp32
Biblioteca Arduino_GFX
Descargue las últimas bibliotecas Arduino_GFX: (presione "Clonar o Descargar" -> "Descargar ZIP")
github.com/moononournation/Arduino_GFX
Importar bibliotecas en Arduino IDE. (Menú "Sketch" de Arduino IDE -> "Incluir biblioteca" -> "Agregar biblioteca. ZIP" -> seleccione el archivo ZIP descargado)
ESP8266 Audio
Descargue las últimas bibliotecas de audio ESP8266: (presione "Clonar o Descargar" -> "Descargar ZIP")
github.com/earlephilhower/ESP8266Audio
Importar bibliotecas en Arduino IDE. (Menú "Sketch" de Arduino IDE -> "Incluir biblioteca" -> "Agregar biblioteca. ZIP" -> seleccione el archivo ZIP descargado)
Código de muestra RGB565_video
Descargue el último código de muestra RGB565_video: (presione "Clonar o Descargar" -> "Descargar ZIP")
github.com/moononournation/RGB565_video
Datos de la tarjeta SD
Copie los archivos convertidos a la tarjeta SD e insértelos en la ranura para tarjetas LCD
Compilar y cargar
- Abra SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino en Arduino IDE
- Si no está utilizando ILI9225, cambie el nuevo código de clase (alrededor de la línea 35) para corregir el nombre de la clase.
- Presione el botón "Cargar" de Arduino IDE
- Si no pudo cargar el programa, intente desconectar la conexión entre ESP32 GPIO 2 y SD D0 / MISO
- Si encuentra que la orientación no es correcta, cambie el valor de "rotación" (0-3) en el nuevo código de clase
- Si el programa se ejecuta bien, puede probar con otro ejemplo de inicio con SDMMC_ *
- Si no tiene una ranura para tarjeta SD o no tiene FFmpeg instalado, aún puede probar el ejemplo SPIFFS_ *
Paso 9: Benchmark
Aquí está el resumen de rendimiento para diferentes formatos de video (220x176) y audio (44100 MHz):
Formato | Cuadro por segundo (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Nota:
- MJPEG + PCM puede alcanzar fps más altos, pero no es necesario reproducirlo en una pantalla pequeña de más de 30 fps
- RGB565 no requiere un proceso de decodificación, pero el tamaño de los datos es demasiado grande y se consume mucho tiempo para cargar datos desde SD, el bus SD de 4 bits y la tarjeta SD más rápida pueden mejorarlo un poco (la suposición salvaje puede alcanzar alrededor de 12 fps)
- El proceso de decodificación de MP3 aún no está optimizado, ahora está dedicado el núcleo 0 para la decodificación de MP3 y el núcleo 1 para la reproducción de video
Paso 10: ¡Feliz juego
Ahora puede reproducir video y audio con su ESP32, ¡desbloqueó muchas posibilidades!
Creo que haré una pequeña televisión vintage más tarde …
Recomendado:
Álbumes con etiquetas NFC para reproducir automáticamente música de Spotify en Chromecast: 5 pasos
Álbumes con etiquetas NFC para reproducir automáticamente música de Spotify en Chromecast: este proyecto comenzó con la idea de hacer un collage de álbumes de mis artistas más reproducidos en Spotify. Después de jugar con la API de Spotify en Python, pensé que sería bueno vincular estas portadas de álbumes a sus URI de Spotify y comenzar a reproducir el
Reproducir canciones (MP3) con Arduino usando PWM en el altavoz o transformador Flyback: 6 pasos (con imágenes)
Reproducir canciones (MP3) con Arduino usando PWM en altavoz o transformador Flyback: Hola chicos, este es mi primer instructivo, ¡espero que les guste! Básicamente, en este proyecto he utilizado la comunicación en serie entre mi Arduino y mi computadora portátil, para transmitir datos de música desde mi computadora portátil al Arduino. Y usando los TIMERS de Arduino t
Greatest Holdies: pirateé un teléfono antiguo para reproducir la mejor música de espera: 13 pasos (con imágenes)
Greatest Holdies: Hackeé un teléfono antiguo para reproducir la mejor música de espera: https: //youtu.be/Ma4QnfQ7Dxo Bueno … Estoy bastante seguro de que no quieres un teléfono que solo reproduzca música de retención … Pero hay un sinnúmero de otros proyectos interesantes que puede realizar con este truco muy básico de estos " escritorio " Los telefonos
Reproducir CD sin reproductor de CD, usando AI y YouTube: 10 pasos (con imágenes)
Reproducir CD sin reproductor de CD, usando AI y YouTube: ¿Quiere reproducir sus CD pero no tiene más reproductor de CD? ¿No tuvo tiempo de copiar sus CD? ¿Los ha copiado pero los archivos no están disponibles cuando se necesitan? No hay problema. ¡Deje que la IA (inteligencia artificial) identifique su CD y YouTube lo reproduzca! Escribí una aplicación para Android haciendo
Reproducir canciones con motor paso a paso: 11 pasos (con imágenes)
Play Songs Using Stepper Motor !!: Este proyecto trata sobre el diseño de una interfaz dinámica simple, que permitirá interactuar con un motor paso a paso de dos formas diferentes.La primera interfaz controlará la dirección y velocidad del motor paso a paso mediante el uso de un GUI simple, que h