Índice:
- Etapa 1: Recursos e limitações do ESP32
- Etapa 2: formato de vídeo
- Etapa 3: formato de áudio
- Etapa 4: conversão de formato
- Etapa 5: Preparação de Hardware
- Etapa 6: Interface SD
- Etapa 7: coloque tudo junto
- Etapa 8: Programa
- Etapa 9: Comparativo de mercado
- Etapa 10: Jogue bem
Vídeo: Reproduzir vídeo com ESP32: 10 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-31 10:23
Este Instructables mostra algo sobre a reprodução de vídeo e áudio com ESP32.
Etapa 1: Recursos e limitações do ESP32
Recursos
- 4 barramentos SPI, 2 barramentos SPI disponíveis para o espaço do usuário, eles são SPI2 e SPI3 ou chamados de HSPI e VSPI. Ambos os barramentos SPI podem operar a no máximo 80 MHz. Teoricamente, ele pode enviar 320x240 pixels coloridos de 16 bits para o SPI LCD a 60 fps, mas ainda não contou o tempo necessário para ler e decodificar os dados de vídeo.
- O barramento SD de 1/4 bits pode conectar o cartão SD no protocolo nativo
- Saída de áudio DAC interna I2S
- mais de 100 KB de RAM disponível para buffer de vídeo e áudio
- Potência de processamento razoável para decodificar JPEG (reproduzir Motion JPEG) e compactação de dados LZW (reproduzir-g.webp" />
- A versão dual-core pode dividir os dados de leitura do cartão SD, decodificar e enviar para SPI LCD em multitarefas paralelas e aumentar o desempenho de reprodução
Limitações
- RAM interna insuficiente para ter buffer de quadro duplo para 320x240 em cores de 16 bits, limitava o design multitarefa. Ele pode superar um pouco com PSRAM externo, embora seja mais lento do que a RAM interna
- não há capacidade de processamento suficiente para decodificar vídeo mp4
- nem todas as versões do ESP32 têm 2 núcleos, o exemplo multitarefa só se beneficia na versão dual-core
Ref.:
Etapa 2: formato de vídeo
RGB565
Ou chamado de cor de 16 bits é um formato de dados brutos comumente usado na comunicação entre o MCU e o visor colorido. Cada pixel de cor representado por um valor de 16 bits, os primeiros 5 bits são o valor vermelho, os 6 bits seguintes são o valor verde e, em seguida, o valor azul de 5 bits. O valor de 16 bits pode fazer uma variação de 65.536 cores, por isso também é chamado de 64 mil cores. Portanto, o vídeo de 1 minuto 320x240 @ 30 fps terá o tamanho: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 bytes ou mais de 260 MB
Este é um formato de arquivo comum na web desde 1990. Limita a variação de cor para cada tela em até 256 cores e não armazena repetidamente o pixel que tem a mesma cor do quadro anterior. Portanto, pode reduzir muito o tamanho do arquivo, especialmente quando cada quadro de animação não altera muitos detalhes. A compressão LZW foi projetada para ser decodificada pelo computador dos anos 1990, de modo que o ESP32 também tem poder de processamento justo o suficiente para decodificá-lo em tempo real.
Motion JPEG
Ou chamado M-JPEG / MJPEG é um formato de compressão de vídeo comum para o hardware de captura de vídeo com poder de processamento limitado. Na verdade, é simplesmente uma concatenação de quadros JPEG estáticos. Compare com MPEG ou MP4, Motion JPEG sem necessidade de técnica computacionalmente intensiva de predição entre quadros, cada quadro é independente. Portanto, requer menos recursos para codificar e decodificar.
Ref.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Etapa 3: formato de áudio
PCM
Um formato de dados brutos para áudio digital. ESP32 DAC usa profundidade de 16 bits, o que significa que cada dado de 16 bits representa uma amostra de sinal analógico digital. A maioria dos vídeos e músicas normalmente usam taxa de amostragem de 44100 MHz, o que significa 44100 sinal analógico amostrado para cada segundo. Portanto, os dados brutos PCM de áudio mono de 1 minuto serão dimensionados: 16 * 44100 * 60 = 42336000 bits = 5292000 bytes ou mais de 5 MB. O tamanho do áudio estéreo será o dobro, ou seja, mais de 10 MB
MP3
MPEG Layer 3 é um formato de áudio compactado amplamente utilizado para compactação de músicas desde 1990. Pode reduzir drasticamente o tamanho do arquivo para menos de um décimo do formato PCM bruto
Ref.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Etapa 4: conversão de formato
Este projeto usa FFmpeg para converter o vídeo em formato legível ESP32.
Baixe e instale o FFmpeg em seu site oficial, se ainda não:
Converter para áudio PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Converter para áudio MP3
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Converter para 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
Converter para-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
Converter para 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 9 220_30fps.mjpeg
Observação:
FFmpeg convertido-g.webp" />
Etapa 5: Preparação de Hardware
ESP32 Dev Board
Qualquer placa de desenvolvimento ESP32 dual-core deve estar ok, desta vez estou usando um TTGO ESP32-Micro.
Exibição em cores
Qualquer display colorido que suporte Arduino_GFX deve estar ok, desta vez estou usando uma placa de breakout ILI9225 com slot para cartão SD.
Você pode encontrar a lista de exibição de cores compatível com Arduino_GFX no Github:
github.com/moononournation/Arduino_GFX
Cartão SD
Qualquer cartão SD deve estar ok, desta vez estou usando um micro SD de 8 GB de "velocidade normal" da SanDisk com adaptador SD.
Áudio
Se você quiser usar apenas fone de ouvido, basta conectar os pinos do fone de ouvido ao pino 26 e o GND poderá ouvir o áudio. Ou você pode usar um pequeno amplificador para reproduzir áudio com alto-falante.
Outros
Algumas placas de ensaio e fios da placa de ensaio
Etapa 6: Interface SD
A placa de breakout ILI9225 LCD também inclui pinos de breakout de slot SD crd. Pode ser usado como barramento SPI ou barramento SD de 1 bit. Conforme mencionado em meus instructables anteriores, eu prefiro usar o barramento SD de 1 bit, então este projeto será baseado no barramento SD de 1 bit.
Etapa 7: coloque tudo junto
As fotos acima mostram a plataforma de teste que estou usando neste projeto. A placa de ensaio branca é impressa em 3D, você pode fazer o download e imprimi-la em thingiverse:
A conexão real depende de qual hardware você tem em mãos.
Aqui está o resumo da conexão:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0 / MISO -> resistor 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.:
Etapa 8: Programa
IDE Arduino
Baixe e instale o Arduino IDE se ainda não o fez:
www.arduino.cc/en/main/software
Suporte ESP32
Siga as instruções de instalação para adicionar suporte ESP32 se você ainda não o fez:
github.com/espressif/arduino-esp32
Biblioteca Arduino_GFX
Baixe as bibliotecas Arduino_GFX mais recentes: (pressione "Clonar ou Baixar" -> "Baixar o ZIP")
github.com/moononournation/Arduino_GFX
Importe bibliotecas no Arduino IDE. (Menu "Sketch" do IDE do Arduino -> "Incluir Biblioteca" -> "Adicionar Biblioteca. ZIP" -> selecione o arquivo ZIP baixado)
ESP8266Audio
Baixe as bibliotecas de áudio ESP8266 mais recentes: (pressione "Clonar ou Baixar" -> "Baixar ZIP")
github.com/earlephilhower/ESP8266Audio
Importe bibliotecas no Arduino IDE. (Menu "Sketch" do IDE do Arduino -> "Incluir Biblioteca" -> "Adicionar Biblioteca. ZIP" -> selecione o arquivo ZIP baixado)
Código de amostra RGB565_video
Baixe o código de amostra RGB565_video mais recente: (pressione "Clonar ou Baixar" -> "Baixar ZIP")
github.com/moononournation/RGB565_video
Dados do cartão SD
Copie os arquivos convertidos para o cartão SD e insira no slot do cartão LCD
Compilar e fazer upload
- Abra SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino no Arduino IDE
- Se você não estiver usando ILI9225, altere o novo código da classe (em torno da linha 35) para corrigir o nome da classe
- Pressione o botão "Upload" do IDE do Arduino
- Se você não conseguiu carregar o programa, tente desconectar a conexão entre ESP32 GPIO 2 e SD D0 / MISO
- Se você achar que a orientação não está correta, altere o valor de "rotação" (0-3) no novo código de classe
- Se o programa funcionar bem, você pode tentar outro exemplo de início com SDMMC_ *
- Se você não tem slot para cartão SD ou não tem FFmpeg instalado, você ainda pode tentar SPIFFS_ * example
Etapa 9: Comparativo de mercado
Aqui está o resumo do desempenho para diferentes formatos de vídeo (220x176) e áudio (44100 MHz):
Formato | Quadro por segundo (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Observação:
- MJPEG + PCM pode atingir fps maiores, mas é desnecessário jogar em uma tela minúscula maior que 30 fps
- RGB565 não requer processo de decodificação, mas o tamanho dos dados é muito grande e muito tempo consumido no carregamento de dados do SD, o barramento SD de 4 bits e o cartão SD mais rápido podem melhorá-lo um pouco (o palpite pode chegar a cerca de 12 fps)
- Processo de decodificação de MP3 ainda não otimizado, agora é dedicado núcleo 0 para decodificação de MP3 e núcleo 1 para reproduzir vídeo
Etapa 10: Jogue bem
Agora você pode reproduzir vídeo e áudio com seu ESP32, ele desbloqueou muitas possibilidades!
Acho que vou fazer uma pequena TV vintage mais tarde …
Recomendado:
Como fazer um rádio estéreo Audiófilo Ford reproduzir arquivos MP3: 7 etapas
Como fazer um rádio estéreo Audiófilo da Ford reproduzir arquivos MP3: Este manual fornecerá alguns detalhes importantes sobre como atender aos requisitos de compatibilidade do CD-R de MP3 de um Audiófilo Ford (e provavelmente um Mach 300, Shaker 500 e Shaker 1000 ) estéreo de fábrica para que você possa gravar e desfrutar de arquivos MP3 em um CD
Usando um estéreo automotivo para reproduzir MP3s em um estéreo doméstico mais antigo: 7 etapas
Usando um estéreo automotivo para reproduzir MP3 em um estéreo doméstico mais antigo: Reproduzindo arquivos mp3 em um estéreo doméstico Baixei ou copiei cerca de 5.000 músicas de rock clássico nas últimas duas décadas e precisava de uma maneira simples de reproduzir arquivos de música digital em um estéreo doméstico mais antigo. Tenho um computador de home theater (HTC) conectado
Álbuns com tags NFC para reproduzir músicas do Spotify automaticamente no Chromecast: 5 etapas
Álbuns com tags NFC para reproduzir músicas do Spotify automaticamente no Chromecast: Este projeto começou com a ideia de fazer uma colagem de álbum dos meus artistas mais tocados no Spotify. Depois de brincar com a API do Spotify em Python, achei que seria bom vincular as capas dos álbuns aos URIs do Spotify e começar a tocar
Reproduzir músicas (MP3) com Arduino usando PWM no alto-falante ou transformador Flyback: 6 etapas (com imagens)
Tocar músicas (MP3) com Arduino usando PWM no alto-falante ou transformador Flyback: Olá pessoal, este é meu primeiro instrutível, espero que gostem !! Basicamente, neste projeto usei a comunicação serial entre meu Arduino e meu laptop, para transmitir dados de música do meu laptop para o Arduino. E usando o Arduino TIMERS t
Como reproduzir áudio digital Dolby 5.1 no QuickTime Mac OS X: 6 etapas
Como reproduzir áudio Dolby Digital 5.1 no QuickTime Mac OS X: Neste Instructable, vou mostrar a você como reproduzir áudio Dolby Digital (AC-3) multicanal no QuickTime 7 ou QuickTime X e fazer o fluxo de bits em um Toslink de fibra óptica Cabo (S / PDIF), para o seu amplificador. Vídeo instrutivo: http://www.youtube.com/watc