2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03
Reproduzir vídeo com ESP32
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:
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
Interface SDInterface 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
Junte tudoJunte tudoJunte tudo
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.
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
Benchmark
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
Bom jogo!
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 …
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 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: 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
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 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