Obsah:

Prehrávajte video s ESP32: 10 krokov (s obrázkami)
Prehrávajte video s ESP32: 10 krokov (s obrázkami)

Video: Prehrávajte video s ESP32: 10 krokov (s obrázkami)

Video: Prehrávajte video s ESP32: 10 krokov (s obrázkami)
Video: Как управлять приводом с помощью Arduino - Robojax 2024, November
Anonim
Prehrávajte video s ESP32
Prehrávajte video s ESP32

Tento návod ukazuje niečo o prehrávaní videa a zvuku s ESP32.

Krok 1: Vlastnosti a obmedzenia ESP32

Vlastnosti

  • Pre užívateľský priestor sú k dispozícii 4 zbernice SPI, 2 zbernice SPI, ide o SPI2 a SPI3 alebo sa nazývajú HSPI a VSPI. Oba zbernice SPI môžu pracovať maximálne 80 MHz. Teoreticky môže tlačiť 320 x 240 16-bitových farebných pixelov na SPI LCD pri 60 fps, ale zatiaľ nepočítal časovú réžiu potrebnú na čítanie a dekódovanie video dát.
  • 1-bitová / 4-bitová zbernica SD môže pripojiť kartu SD v natívnom protokole
  • Interný zvukový výstup DAC I2S
  • viac ako 100 KB RAM k dispozícii pre video a audio buffer
  • Dostatočne slušný výpočtový výkon na dekódovanie kompresie údajov JPEG (prehrávanie Motion JPEG) a LZW (prehrávanie animovaného GIF)
  • Dvojjadrová verzia dokáže rozdeliť načítané údaje z karty SD, dekódovať ich a odoslať na SPI LCD do paralelných viacerých úloh a zvýšiť výkon prehrávania.

Obmedzenia

  • nedostatok vnútornej pamäte RAM na vyrovnávaciu pamäť s dvojitým rámcom pre 320 x 240 v 16-bitových farbách, obmedzilo to dizajn viacerých úloh. S externým systémom PSRAM to môže trochu prekonať, aj keď je to pomalšie ako vnútorná pamäť RAM
  • nestačí dekódovať video vo formáte mp4
  • Nie všetky verzie ESP32 majú 2 jadrá, viacúlohová ukážka ťaží iba z dvojjadrovej verzie

Odkaz:

Krok 2: Formát videa

RGB565

Alebo nazývaný 16-bitová farba je formát nespracovaných údajov, ktorý sa bežne používa pri komunikácii medzi MCU a farebným displejom. Každý farebný pixel je reprezentovaný 16-bitovou hodnotou, prvých 5 bitov je červená hodnota, nasledujúcich 6-bitov je zelená hodnota a potom 5-bitová modrá hodnota. 16-bitová hodnota môže spôsobiť 65 536 variácií farieb, takže sa nazýva aj 64 000 farieb. 1 minúta videa s rozlíšením 320 x 240@30 snímok za sekundu bude mať veľkosť: 16 * 320 * 240 * 30 * 60 = 2211840000 bitov = 276480000 bajtov alebo viac ako 260 MB

Animovaný GIF

Toto je bežný formát súborov na webe od 90. rokov minulého storočia. Obmedzuje variácie farieb pre každú obrazovku až na 256 farieb a neopakuje sa ukladanie pixelu rovnakej farby ako v predchádzajúcom ráme. Môže teda výrazne znížiť veľkosť súboru, najmä keď každý rámec animácie nezmení príliš veľa podrobností. Kompresia LZW je schopná dekódovať počítač z 90. rokov, takže ESP32 má tiež dostatočne spravodlivý výpočtový výkon na dekódovanie v reálnom čase.

Motion JPEG

Alebo sa nazýva M-JPEG / MJPEG je bežný formát kompresie videa pre hardvér na zachytávanie videa s obmedzeným výpočtovým výkonom. Je to vlastne len zreťazenie stále JPEG rámcov. V porovnaní s MPEG alebo MP4, Motion JPEG nepotrebujú výpočtovo náročnú techniku predikcie medzisnímok, každý rámec je nezávislý. Na kódovanie a dekódovanie je teda potrebných menej zdrojov.

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 nespracovaných údajov pre digitálny zvuk. ESP32 DAC používa 16-bitovú hĺbku, to znamená, že každé 16-bitové dáta predstavujú digitálny vzorkovaný analógový signál. Väčšina zvukových záznamov videa a piesní bežne používa vzorkovaciu frekvenciu 44 100 MHz, to znamená 44 100 vzorkovaných analógových signálov za každú sekundu. 1 minúta mono audio PCM nespracovaných dát bude mať veľkosť: 16 * 44100 * 60 = 42336000 bitov = 5292000 bajtov alebo viac ako 5 MB. Veľkosť stereofónneho zvuku bude dvojnásobná, tj viac ako 10 MB

MP3

MPEG Layer 3 je komprimovaný zvukový formát, ktorý sa od deväťdesiatych rokov bežne používa na kompresiu piesní. To môže dramaticky znížiť veľkosť súboru na menej ako jednu desatinu surového formátu PCM

Odkaz:

en.wikipedia.org/wiki/Pulse-code_modulatio…

en.wikipedia.org/wiki/MP3

Krok 4: Konverzia formátu

Tento projekt pomocou FFmpeg prevádza video do čitateľného formátu ESP32.

Ak ešte nie je, stiahnite si a nainštalujte FFmpeg na ich oficiálne stránky:

Previesť na zvuk PCM

ffmpeg -i vstup.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm

Previesť na zvuk MP3

ffmpeg -i vstup.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3

Previesť 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

Previesť 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

Previesť 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 skonvertovaný Animovaný-g.webp" />

Krok 5: Príprava hardvéru

Príprava hardvéru
Príprava hardvéru

Vývojová doska ESP32

Akákoľvek dvojjadrová doska pre vývojárov ESP32 by mala byť v poriadku, tentokrát používam TTGO ESP32-Micro.

Farebný displej

Akýkoľvek farebný displej, ktorý podporuje Arduino_GFX, by mal byť v poriadku, tentoraz používam oddeľovaciu dosku ILI9225 so slotom na kartu SD.

Zoznam podporovaných farebných displejov Arduino_GFX nájdete na Github:

github.com/moononournation/Arduino_GFX

SD karta

Akákoľvek karta SD by mala byť v poriadku, tentoraz používam SanDisk „normálnej rýchlosti“8 GB micro SD s adaptérom SD.

Zvuk

Ak chcete používať iba slúchadlá, jednoducho pripojte kolíky slúchadiel na kolík 26 a GND môže počúvať zvuk. Alebo môžete použiť malý zosilňovač na prehrávanie zvuku s reproduktorom.

Iní

Niektoré doštičky a drôty na chlebníky

Krok 6: Rozhranie SD

Rozhranie SD
Rozhranie SD
Rozhranie SD
Rozhranie SD

Odlamovacia doska LCD ILI9225 obsahovala aj oddeľovacie kolíky na sloty SD crd. Môže byť použitý ako zbernica SPI alebo 1-bitová zbernica SD. Ako je uvedené v mojich predchádzajúcich pokynoch, uprednostňujem používanie 1-bitovej zbernice SD, takže tento projekt bude založený na 1-bitovej zbernici SD.

Krok 7: Dajte to dohromady

Dajte to dohromady
Dajte to dohromady
Dajte to dohromady
Dajte to dohromady
Dajte to dohromady
Dajte to dohromady

Vyššie uvedené obrázky ukazujú testovaciu platformu, ktorú v tomto projekte používam. Biela doska je vytlačená 3D, môžete si ju stiahnuť a vytlačiť na stránke thingsiverse:

Skutočné pripojenie závisí od toho, ktorý hardvér máte v ruke.

Tu je zhrnutie pripojenia:

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

Ak to ešte neurobíte, stiahnite si a nainštalujte Arduino IDE:

www.arduino.cc/en/main/software

Podpora ESP32

Ak ešte nemáte nainštalovanú podporu ESP32, postupujte podľa pokynov na inštaláciu:

github.com/espressif/arduino-esp32

Knižnica Arduino_GFX

Stiahnite si najnovšie knižnice Arduino_GFX: (stlačte „Klonovať alebo stiahnuť“-> „Stiahnuť ZIP“)

github.com/moononournation/Arduino_GFX

Importujte knižnice v Arduino IDE. (Ponuka „Skica“Arduino IDE -> „Zahrnúť knižnicu“-> „Pridať. ZIP knižnicu“-> vyberte stiahnutý súbor ZIP)

ESP8266 Zvuk

Stiahnite si najnovšie zvukové knižnice ESP8266: (kliknite na „Klonovať alebo stiahnuť“-> „Stiahnuť ZIP“)

github.com/earlephilhower/ESP8266Audio

Importujte knižnice v Arduino IDE. (Ponuka „Skica“Arduino IDE -> „Zahrnúť knižnicu“-> „Pridať. ZIP knižnicu“-> vyberte stiahnutý súbor ZIP)

RGB565_video ukážkový kód

Stiahnite si najnovší vzorový kód RGB565_video: (stlačte „Klonovať alebo stiahnuť“-> „Stiahnuť ZIP“)

github.com/moononournation/RGB565_video

Údaje o karte SD

Skopírujte skonvertované súbory na kartu SD a vložte ich do zásuvky na kartu LCD

Skompilovať a nahrať

  1. Otvorte SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino v Arduino IDE
  2. Ak nepoužívate ILI9225, zmeňte nový kód triedy (okolo riadka 35) na opravu názvu triedy
  3. Stlačte tlačidlo „Nahrať“Arduino IDE
  4. Ak sa vám program nepodarilo nahrať, skúste odpojiť spojenie medzi ESP32 GPIO 2 a SD D0/MISO
  5. Ak zistíte, že orientácia nie je správna, zmeňte hodnotu „otočenia“(0-3) v novom kóde triedy
  6. Ak program beží dobre, môžete vyskúšať iný ukážkový štart s SDMMC_*
  7. Ak nemáte slot na kartu SD alebo nemáte nainštalovaný FFmpeg, stále môžete vyskúšať príklad SPIFFS_*

Krok 9: Benchmark

Benchmark
Benchmark

Tu je súhrn výkonu pre rôzne formáty videa (220 x 176) a zvuku (44 100 MHz):

Formát Snímok za sekundu (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Poznámka:

  • MJPEG + PCM môže dosiahnuť vyššie fps, ale je zbytočné hrať na malej obrazovke vyššej ako 30 fps
  • RGB565 nevyžaduje dekódovací proces, ale veľkosť údajov je príliš veľká a veľa času stráveného načítaním údajov z karty SD, 4-bitovej zbernice SD a rýchlejšej karty SD ju môže o niečo zlepšiť (divoký odhad môže dosiahnuť približne 12 snímok za sekundu)
  • Proces dekódovania MP3 ešte nie je optimalizovaný, teraz je vyhradený jadro 0 pre dekódovanie MP3 a jadro 1 pre prehrávanie videa

Krok 10: Šťastné hranie

Šťastné hranie!
Šťastné hranie!

Teraz môžete na svojom ESP32 prehrávať video a zvuk, čo odomklo mnoho možností!

Myslím, že neskôr vyrobím malý vintage televízor …

Odporúča: