Obsah:

Přehrajte video s ESP32: 10 kroků (s obrázky)
Přehrajte video s ESP32: 10 kroků (s obrázky)

Video: Přehrajte video s ESP32: 10 kroků (s obrázky)

Video: Přehrajte video s ESP32: 10 kroků (s obrázky)
Video: Push Button Ugal Ugalan (Subtittled) 2024, Listopad
Anonim
Přehrávejte video s ESP32
Přehrávejte video s ESP32

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

Příprava hardwaru
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

Rozhraní SD
Rozhraní SD
Rozhraní SD
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

Dej to dohromady
Dej to dohromady
Dej to dohromady
Dej to dohromady
Dej to dohromady
Dej 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

Program
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

  1. Otevřete SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino v Arduino IDE
  2. Pokud nepoužíváte ILI9225, změňte nový kód třídy (kolem řádku 35) a opravte název třídy
  3. Stiskněte tlačítko „Nahrát“Arduino IDE
  4. Pokud se vám program nepodařilo nahrát, zkuste odpojit spojení mezi ESP32 GPIO 2 a SD D0/MISO
  5. Pokud zjistíte, že orientace není správná, změňte v novém kódu třídy hodnotu „otočení“(0-3)
  6. Pokud program běží dobře, můžete zkusit jiný ukázkový start s SDMMC_*
  7. 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

Srovnávací test
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í

Šťastné hraní!
Šť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: