Innehållsförteckning:
- Steg 1: ESP32 -funktioner och begränsningar
- Steg 2: Videoformat
- Steg 3: Ljudformat
- Steg 4: Formatera konvertering
- Steg 5: Förberedelse av maskinvara
- Steg 6: SD -gränssnitt
- Steg 7: Sätt ihop det
- Steg 8: Programmera
- Steg 9: Benchmark
- Steg 10: Lycka till
Video: Spela upp video med ESP32: 10 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-31 10:25
Denna instruktion visar något om att spela upp video och ljud med ESP32.
Steg 1: ESP32 -funktioner och begränsningar
Funktioner
- 4 SPI -bussar, 2 SPI -bussar tillgängliga för användarutrymme, de är SPI2 och SPI3 eller kallas HSPI och VSPI. Båda SPI -bussarna kan köras högst 80 MHz. Teoretiskt kan den skjuta 320x240 16-bitars färgpixlar till SPI LCD vid 60 fps, men den har ännu inte räknat den tid som krävs för att läsa och avkoda videodata.
- 1-bitars / 4-bitars SD-buss kan ansluta SD-kort i inbyggt protokoll
- I2S intern DAC -ljudutgång
- över 100 KB RAM tillgängligt för video- och ljudbuffert
- Lagom stor processorkraft för att avkoda JPEG (spela upp Motion JPEG) och LZW -datakomprimering (spela upp animerad GIF)
- Dubbelkärnig version kan dela läsdata från SD-kort, avkoda och skjuta till SPI LCD i parallella multi-uppgifter och öka uppspelningsprestandan
Begränsningar
- inte tillräckligt med internt RAM-minne för att ha dubbelrambuffert för 320x240 i 16-bitars färg, det begränsade multitask-designen. Det kan övervinna lite med extern PSRAM men det är långsammare än internt RAM
- inte tillräckligt med processorkraft för att avkoda mp4 -video
- inte alla ESP32-versioner har två kärnor, samplingsprovet har endast fördelar med versionen med två kärnor
Ref.:
Steg 2: Videoformat
RGB565
Eller kallas 16-bitars färg är ett rådataformat som vanligtvis används i kommunikationen mellan MCU och färgdisplay. Varje färgpixel representeras av ett 16-bitars värde, den första 5-bitars är rött värde, efter 6-bitars är grönt värde och sedan 5-bitars blått värde. 16-bitars värde kan göra 65536 färgvariationer så det kallas också 64K färger. Så 1 minut 320x240@30 fps video kommer att vara stor: 16 * 320 * 240 * 30 * 60 = 2211840000 bitar = 276480000 byte eller över 260 MB
Animerad GIF
Detta är ett vanligt filformat på webben sedan 1990 -talet. Det begränsar färgvariationen för varje skärm upp till 256 färger och upprepa inte pixeln med samma färg som föregående ram. Så det kan mycket minska filstorleken, särskilt när varje animationsram inte ändrar för mycket detaljer. LZW -komprimeringen är avsedd att avkodas av 1990 -talets dator, så ESP32 har också tillräckligt med processorkraft för att avkoda den i realtid.
Rörelse JPEG
Eller kallas M-JPEG / MJPEG är ett vanligt videokomprimeringsformat för videoinspelningshårdvaran med begränsad processorkraft. Det är faktiskt helt enkelt en sammanfogning av stilla JPEG -ramar. Jämför med MPEG eller MP4, Motion JPEG behöver inte beräkningsteknisk intensiv teknik för ramramsprognoser, varje bildruta är oberoende. Så det kräver mindre resurs att koda och avkoda.
Ref.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Steg 3: Ljudformat
PCM
Ett rådataformat för digitalt ljud. ESP32 DAC använder 16-bitars bitdjup, det betyder att varje 16-bitars data representerar en digital samplad analog signal. De flesta video- och låtljud använder vanligtvis samplingsfrekvens vid 44100 MHz, det betyder 44100 samplad analog signal för varje sekund. Så, 1 minuts mono -ljud -PCM -rådata kommer att vara storlek: 16 * 44100 * 60 = 42336000 bitar = 5292000 byte eller över 5 MB. Storleken på stereoljud kommer att vara dubbelt, dvs. över 10 MB
MP3
MPEG Layer 3 är ett komprimerat ljudformat som har använts mycket för låtkomprimering sedan 1990 -talet. Det kan dramatiskt minska filstorleken till under en tiondel av rå PCM-format
Ref.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Steg 4: Formatera konvertering
Detta projekt använder FFmpeg konvertera videon till ESP32 läsbart format.
Ladda ner och installera FFmpeg på deras officiella webbplats om inte ännu:
Konvertera till PCM -ljud
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Konvertera till MP3 -ljud
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Konvertera till RGB565
ffmpeg -i input.mp4 -vf "fps = 9, skala = -1: 176: flaggor = lanczos, beskära = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb
Konvertera till animerad GIF
ffmpeg -i input.mp4 -vf "fps = 15, skala = -1: 176: flaggor = lanczos, beskära = 220: in_h: (in_w -220)/2: 0, dela [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif
Konvertera till Motion JPEG
ffmpeg -i input.mp4 -vf "fps = 30, skala = -1: 176: flaggor = lanczos, beskära = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg
Notera:
FFmpeg -konverterat Animerat-g.webp" />
Steg 5: Förberedelse av maskinvara
ESP32 Dev Board
Varje ESP32 dev-kort med två kärnor ska vara ok, den här gången använder jag en TTGO ESP32-Micro.
Färgdisplay
Vilken färgskärm som helst som Arduino_GFX stöder bör vara ok, den här gången använder jag en ILI9225 breakout board med SD -kortplats.
Du hittar Arduino_GFX färglista som stöds på Github:
github.com/moononournation/Arduino_GFX
SD-kort
Alla SD -kort ska vara ok, den här gången använder jag en SanDisk "normal hastighet" 8 GB micro SD med SD -adapter.
Audio
Om du bara vill använda hörlurar ansluter du bara hörlans stift till stift 26 och GND kan lyssna på ljudet. Eller så kan du använda en liten förstärkare för att spela upp ljud med högtalare.
Andra
Några brödbrädor och trådbräda
Steg 6: SD -gränssnitt
ILI9225 LCD -brytkort innehåller också en SD crd -kortplats. Den kan användas som SPI-buss eller 1-bitars SD-buss. Som nämnts i mina tidigare instruktioner, föredrar jag att använda 1-bitars SD-buss, så detta projekt kommer att baseras på 1-bitars SD-buss.
Steg 7: Sätt ihop det
Bilderna ovan visar testplattformen jag använder i detta projekt. Den vita brödbrädan är 3D -tryckt, du kan ladda ner och skriva ut den på thingiverse:
Den faktiska anslutningen beror på vilken hårdvara du har i handen.
Här är sammanfattningen av anslutningen:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k motstånd -> 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.:
Steg 8: Programmera
Arduino IDE
Ladda ner och installera Arduino IDE om du inte ännu gör det:
www.arduino.cc/en/main/software
Support för ESP32
Följ installationsanvisningarna för att lägga till ESP32 -stöd om du inte gör det ännu:
github.com/espressif/arduino-esp32
Arduino_GFX -bibliotek
Ladda ner de senaste Arduino_GFX -biblioteken: (tryck på "Klona eller ladda ner" -> "Ladda ner ZIP")
github.com/moononournation/Arduino_GFX
Importera bibliotek i Arduino IDE. (Arduino IDE "Sketch" -meny -> "Inkludera bibliotek" -> "Lägg till. ZIP -bibliotek" -> välj nedladdad ZIP -fil)
ESP8266Ljud
Ladda ner senaste ESP8266Ljudbibliotek: (tryck på "Klona eller ladda ner" -> "Ladda ner ZIP")
github.com/earlephilhower/ESP8266Audio
Importera bibliotek i Arduino IDE. (Arduino IDE "Sketch" -meny -> "Inkludera bibliotek" -> "Lägg till. ZIP -bibliotek" -> välj nedladdad ZIP -fil)
RGB565_video Provkod
Ladda ner den senaste RGB565_video -provkoden: (tryck på "Klona eller ladda ner" -> "Ladda ner ZIP")
github.com/moononournation/RGB565_video
SD -kortdata
Kopiera de konverterade filerna till SD -kortet och sätt in i LCD -kortplatsen
Kompilera och ladda upp
- Öppna SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino i Arduino IDE
- Om du inte använder ILI9225 ändrar du den nya klasskoden (runt rad 35) till rätt klassnamn
- Tryck på Arduino IDE "Upload" -knappen
- Om du inte lyckades ladda upp programmet, försök koppla bort anslutningen mellan ESP32 GPIO 2 och SD D0/MISO
- Om du tycker att orienteringen inte är korrekt ändrar du "rotation" -värdet (0-3) i den nya klasskoden
- Om programmet fungerar bra kan du prova annan provstart med SDMMC_*
- Om du inte har SD -kortplats eller om du inte har FFmpeg installerat kan du fortfarande prova SPIFFS_* -exempel
Steg 9: Benchmark
Här är prestandasammanfattningen för olika video (220x176) och ljud (44100 MHz):
Formatera | Bildruta per sekund (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Notera:
- MJPEG + PCM kan nå högre fps men det är onödigt att spela på en liten skärm som är större än 30 fps
- RGB565 kräver inte avkodningsprocessen men datastorleken är för stor och det tar mycket tid att ladda data från SD, 4-bitars SD-buss och snabbare SD-kort kan förbättra det lite (vild gissning kan nå runt 12 fps)
- MP3 -avkodningsprocessen ännu inte optimerad, den är nu dedikerad kärna 0 för MP3 -avkodning och kärna 1 för uppspelning av video
Steg 10: Lycka till
Nu kan du spela upp video och ljud med din ESP32, det låste upp många möjligheter!
Jag tror att jag kommer att göra en liten vintage -tv senare …
Rekommenderad:
Talking Arduino - Spela en MP3 med Arduino utan någon modul - Spela upp MP3 -fil från Arduino med PCM: 6 steg
Talking Arduino | Spela en MP3 med Arduino utan någon modul | Spela MP3 -fil från Arduino Använda PCM: I denna instruktioner lär vi oss hur man spelar en mp3 -fil med arduino utan att använda någon ljudmodul, här kommer vi att använda PCM -bibliotek för Arduino som spelar 16 bitars PCM med 8 kHz -frekvens så låt oss göra detta
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer: 6 steg (med bilder)
Spela låtar (MP3) med Arduino med PWM på högtalare eller Flyback Transformer: Hej killar, det här är min första instruerbara, jag hoppas att du kommer att gilla det! I grund och botten har jag i detta projekt använt den seriella kommunikationen mellan min Arduino och min bärbara dator, för att överföra musikdata från min bärbara dator till Arduino. Och med Arduino TIMERS t
Så här stoppar du Facebook från att spela upp videor på Android !!: 10 steg
Så här stoppar du Facebook från att spela upp videor på Android !!: Denna instruktör visar dig hur du stoppar Facebook från att spela upp videor på både data och wifi på en Android -enhet. Prenumerera på min kanal Tack
SPELA OCH LADDA UPP IPOD ANVÄNDNING AV GAMMEL BOOMBOX - Tips och tips: 5 steg (med bilder)
SPELA OCH LADDA UPP IPOD ANVÄNDNING AV GAMMEL BOOMBOX - Tips och tips: Betrakta detta som ett tillägg till andra iPod boombox -mods. Jag erkänner att jag lånat från andra instruktioner. För att inte ta ifrån dessa instruktioner, här är ett " rop ut " till dem som inspirerade mig att dyka in i min egen mod. Tack. Instruktivt
Spela upp videor bakåt med Quicktime Player: 5 steg
Spela videor bakåt med hjälp av Quicktime Player: Detta är århundradets hemskaste trick. Denna instruktion visar dig det enkla sättet att spela videor bakåt utan att ladda ner dumgy -program (om du inte har quicktime behöver du det.) Bilden har ingenting att göra gör med projektet men jag behövde