Obsah:
- Krok 1: Funkce a omezení ESP32
- Krok 2: Formát videa
- Krok 3: Formát zvuku
- Krok 4: Převod formátu
- Krok 5: Příprava hardwaru
- Krok 6: Rozhraní SD
- Krok 7: Dejte to dohromady
- Krok 8: Program
- Krok 9: Srovnávací test
- Krok 10: Šťastné hraní
Video: Přehrajte video s ESP32: 10 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-31 10:18
Tento návod ukazuje něco o přehrávání videa a zvuku pomocí ESP32.
Krok 1: Funkce a omezení ESP32
Funkce
- 4 SPI bus, 2 SPI bus available for user space, they are SPI2 and SPI3 or called HSPI and VSPI. Oba sběrnice SPI mohou běžet maximálně 80 MHz. Teoreticky může tlačit 320x240 16bitové barevné pixely na SPI LCD při 60 fps, ale zatím nepočítá časovou režii potřebnou pro čtení a dekódování video dat.
- 1bitová / 4bitová sběrnice SD může připojit kartu SD v nativním protokolu
- Interní zvukový výstup DAC I2S
- více než 100 kB RAM k dispozici pro video a audio buffer
- Dostatečný výpočetní výkon na dekódování dat JPEG (přehrávání Motion JPEG) a komprimace dat LZW (přehrávání animovaného GIF)
- Dvoujádrová verze dokáže rozdělit načtená data z karty SD, dekódovat a přenést na SPI LCD do paralelních více úloh a zvýšit výkon přehrávání
Omezení
- nedostatek interní paměti RAM na dvojitou vyrovnávací paměť pro 320 x 240 v 16bitových barvách, omezilo to design více úkolů. Může to trochu překonat externí PSRAM, i když je pomalejší než interní RAM
- na dekódování videa mp4 není dostatečný výpočetní výkon
- ne všechny verze ESP32 mají 2 jádra, víceúlohový vzorek má prospěch pouze u dvoujádrové verze
Odkaz:
Krok 2: Formát videa
RGB565
Nebo nazývaný 16bitová barva je formát nezpracovaných dat běžně používaný při komunikaci mezi MCU a barevným displejem. Každý barevný pixel reprezentovaný 16bitovou hodnotou, prvních 5 bitů je červená hodnota, následujících 6 bitů je zelená hodnota a poté 5bitová modrá hodnota. 16bitová hodnota může způsobit 65536 barevných variací, takže se také nazývá 64 tisíc barev. Takže 1 minuta videa 320 x 240 při 30 fps bude mít velikost: 16 * 320 * 240 * 30 * 60 = 2211840000 bitů = 276480000 bytů nebo více než 260 MB
Animovaný GIF
Toto je běžný formát souboru na webu od 90. let minulého století. Omezuje barevné variace pro každou obrazovku až na 256 barev a neopakuje ukládání pixelu stejné barvy jako předchozí snímek. Může tedy výrazně snížit velikost souboru, zvláště když každý rámec animace nezmění příliš mnoho detailů. Komprese LZW je navržena tak, aby byla schopna dekódovat počítač z 90. let 20. století, takže ESP32 má také dostatečný výpočetní výkon, aby jej mohl dekódovat v reálném čase.
Motion JPEG
Nebo se nazývá M-JPEG / MJPEG je běžný formát komprese videa pro hardware pro záznam videa s omezeným výkonem zpracování. Ve skutečnosti je to jen zřetězení statických snímků JPEG. Ve srovnání s MPEG nebo MP4, Motion JPEG nepotřebují výpočetně náročnou techniku predikce mezi snímky, každý snímek je nezávislý. Ke kódování a dekódování tedy vyžaduje méně prostředků.
Odkaz:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Krok 3: Formát zvuku
PCM
Formát nezpracovaných dat pro digitální zvuk. ESP32 DAC používá 16bitovou bitovou hloubku, to znamená, že každá 16bitová data představují digitální vzorkovaný analogový signál. Většina zvukových záznamů videa a skladeb běžně používá vzorkovací frekvenci 44100 MHz, to znamená 44100 vzorkovaného analogového signálu za každou sekundu. 1minutová mono audio PCM surová data budou mít velikost: 16 * 44100 * 60 = 42336000 bitů = 5292000 bytů nebo přes 5 MB. Velikost stereofonního zvuku bude dvojnásobná, tj. Přes 10 MB
MP3
MPEG Layer 3 je komprimovaný zvukový formát široce používaný pro kompresi skladeb od 90. let minulého století. Může dramaticky zmenšit velikost souboru na méně než jednu desetinu hrubého formátu PCM
Odkaz:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Krok 4: Převod formátu
Tento projekt využívající FFmpeg převádí video do čitelného formátu ESP32.
Stáhněte si a nainstalujte FFmpeg na jejich oficiální stránky, pokud ještě ne:
Převést na zvuk PCM
ffmpeg -i vstup.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Převést na zvuk MP3
ffmpeg -i vstup.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Převést na 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
Převést na animovaný GIF
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
Převést na 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
Poznámka:
FFmpeg převedený Animovaný-g.webp" />
Krok 5: Příprava hardwaru
Deska pro vývojáře ESP32
Jakákoli dvoujádrová vývojová deska ESP32 by měla být v pořádku, tentokrát používám TTGO ESP32-Micro.
Barevný displej
Jakýkoli barevný displej, který by podpora Arduino_GFX měla být v pořádku, tentokrát používám rozbíjecí desku ILI9225 se slotem pro kartu SD.
Seznam podporovaných barevných displejů podporovaných Arduino_GFX najdete na Github:
github.com/moononournation/Arduino_GFX
SD karta
Jakákoli karta SD by měla být v pořádku, tentokrát používám SanDisk „normální rychlost“8 GB micro SD s adaptérem SD.
Zvuk
Pokud chcete používat pouze sluchátka, jednoduše připojte kolíky sluchátek ke kolíku 26 a GND může poslouchat zvuk. Nebo můžete použít malý zesilovač k přehrávání zvuku s reproduktorem.
Ostatní
Některé prkénka a dráty na prkénko
Krok 6: Rozhraní SD
Odlamovací deska LCD ILI9225 také obsahovala vylamovací piny pro slot SD crd. Lze jej použít jako sběrnici SPI nebo 1bitovou sběrnici SD. Jak již bylo zmíněno v mých předchozích instrukcích, dávám přednost použití 1bitové sběrnice SD, takže tento projekt bude založen na 1bitové sběrnici SD.
Krok 7: Dejte to dohromady
Výše uvedené obrázky ukazují testovací platformu, kterou v tomto projektu používám. Bílé prkénko je vytištěno 3D, můžete si jej stáhnout a vytisknout na webu thingsiverse:
Skutečné připojení závisí na tom, jaký hardware máte v ruce.
Zde je shrnutí připojení:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k odpor -> 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
Odkaz:
Krok 8: Program
Arduino IDE
Stáhněte a nainstalujte Arduino IDE, pokud to ještě neuděláte:
www.arduino.cc/en/main/software
Podpora ESP32
Pokud jste to ještě neudělali, přidejte podporu ESP32 podle pokynů k instalaci:
github.com/espressif/arduino-esp32
Knihovna Arduino_GFX
Stáhněte si nejnovější knihovny Arduino_GFX: (stiskněte „Klonovat nebo Stáhnout“-> „Stáhnout ZIP“)
github.com/moononournation/Arduino_GFX
Import knihoven v Arduino IDE. (Nabídka „Skica“Arduino IDE -> „Zahrnout knihovnu“-> „Přidat knihovnu. ZIP“-> vyberte stažený soubor ZIP)
ESP8266 Zvuk
Stáhněte si nejnovější knihovny ESP8266Audio: (stiskněte „Klonovat nebo Stáhnout“-> „Stáhnout ZIP“)
github.com/earlephilhower/ESP8266Audio
Import knihoven v Arduino IDE. (Nabídka „Skica“Arduino IDE -> „Zahrnout knihovnu“-> „Přidat knihovnu. ZIP“-> vyberte stažený soubor ZIP)
RGB565_video Ukázkový kód
Stáhněte si nejnovější ukázkový kód RGB565_video: (stiskněte „Klonovat nebo Stáhnout“-> „Stáhnout ZIP“)
github.com/moononournation/RGB565_video
Data karty SD
Zkopírujte převedené soubory na kartu SD a vložte je do slotu pro kartu LCD
Zkompilovat a nahrát
- Otevřete SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino v Arduino IDE
- Pokud nepoužíváte ILI9225, změňte nový kód třídy (kolem řádku 35) a opravte název třídy
- Stiskněte tlačítko „Nahrát“Arduino IDE
- Pokud se vám program nepodařilo nahrát, zkuste odpojit spojení mezi ESP32 GPIO 2 a SD D0/MISO
- Pokud zjistíte, že orientace není správná, změňte v novém kódu třídy hodnotu „otočení“(0-3)
- Pokud program běží dobře, můžete zkusit jiný ukázkový start s SDMMC_*
- Pokud nemáte slot pro kartu SD nebo nemáte nainstalovaný FFmpeg, můžete stále vyzkoušet příklad SPIFFS_*
Krok 9: Srovnávací test
Zde je souhrn výkonu pro různé video (220x176) a audio (44100 MHz) formát:
Formát | Rám za sekundu (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Poznámka:
- MJPEG + PCM může dosáhnout vyšších fps, ale je zbytečné hrát na malé obrazovce větší než 30 fps
- RGB565 nevyžaduje dekódovací proces, ale velikost dat je příliš velká a při načítání dat z SD, 4-bitové sběrnice SD a rychlejší SD karty je potřeba hodně času (divoký odhad může dosáhnout kolem 12 fps)
- Proces dekódování MP3 ještě není optimalizován, nyní je věnován jádru 0 pro dekódování MP3 a jádru 1 pro přehrávání videa
Krok 10: Šťastné hraní
Nyní můžete na svém ESP32 přehrávat video a audio, což vám odemklo mnoho možností!
Myslím, že později vyrobím malou vintage televizi…
Doporučuje:
UK Ring Video Doorbell Pro pracující s mechanickým zvoněním: 6 kroků (s obrázky)
UK Ring Video Doorbell Pro pracující s mechanickým zvoněním: *************************************** *************** Vezměte prosím na vědomí, že tato metoda nyní funguje pouze se střídavým napájením. Aktualizuji, pokud/až najdu řešení pro zvonky pomocí stejnosměrného napájení Mezitím, pokud máte stejnosměrné napájení zásobování, budete potřebovat t
Big Wheel - Premiere Pro Video Deck: 7 kroků (s obrázky)
Big Wheel - Premiere Pro Video Deck: Klávesnice jsou dokonalým ovladačem pro videohry (bojujte se mnou, konzolové), ale Premiere Pro vyžaduje úroveň výkonu, na kterou 104 tlačítek nestačí. Musíme Super Saiyan do nové podoby - potřebujeme KNOBS. Tento projekt má velký, velký vliv
CribSense: bezkontaktní video monitor založený na videu: 9 kroků (s obrázky)
CribSense: bezkontaktní dětská chůva založená na videu: CribSense je bezkontaktní dětská chůvička založená na videu, kterou si můžete vyrobit sami, aniž byste museli lámat peníze. CribSense je implementace C ++ zvětšení videa vyladěná tak, aby fungovala na Raspberry Pi 3 Model B. Přes víkend si můžete nastavit vlastní postýlku
Světlo pro intimní video/ ruční fotografování: 7 kroků (s obrázky)
Světlo pro intimní video/ ruční fotografování: Vím, na co myslíte. Od " intimní " Měl jsem na mysli osvětlení zblízka za obtížných světelných situací-ne nutně pro " intimní situace " (Lze to však také použít …) Jako kameraman v New Yorku-nebo
Toddler Video Remote pro PC Video Player: 6 kroků
Toddler Video Remote pro PC Video Player: Stavím dálkové ovládání, které se připojuje k PC pomocí USB. Velký dálkový ovladač umožňuje mému batole vybírat a přehrávat videa na starém počítači. Jedná se o relativně jednoduchý projekt. Základní součástí je buď USB klávesnice nebo bezdrátová USB klávesnice. Poté