Kazalo:

Predvajajte video z ESP32: 10 korakov (s slikami)
Predvajajte video z ESP32: 10 korakov (s slikami)

Video: Predvajajte video z ESP32: 10 korakov (s slikami)

Video: Predvajajte video z ESP32: 10 korakov (s slikami)
Video: Знакомимся с IFTTT 2024, November
Anonim
Predvajajte video z ESP32
Predvajajte video z ESP32

Ta navodila kažejo nekaj o predvajanju videa in zvoka z ESP32.

Korak: Funkcije in omejitve ESP32

Lastnosti

  • 4 vodila SPI, 2 vodila SPI, ki sta na voljo za uporabniški prostor, sta SPI2 in SPI3 ali se imenujeta HSPI in VSPI. Oba vodila SPI lahko delujeta največ 80 MHz. Teoretično lahko potisne 16-bitne barvne slikovne pike 320x240 na SPI LCD pri 60 fps, vendar še ni upošteval časovnih stroškov, potrebnih za branje in dekodiranje video podatkov.
  • 1-bitno / 4-bitno vodilo SD lahko poveže kartico SD v izvornem protokolu
  • I2S notranji avdio izhod DAC
  • za video in avdio vmesnik je na voljo več kot 100 KB RAM -a
  • Dovolj poštena procesna moč za dekodiranje JPEG (predvajajte Motion JPEG) in stiskanje podatkov LZW (predvajajte animirani GIF)
  • Dvojedrna različica lahko razdeli prebrane podatke s kartice SD, dekodira in potisne na SPI LCD v vzporedne večopravilne naloge ter poveča zmogljivost predvajanja

Omejitve

  • premalo notranjega RAM-a, da bi imel vmesni pomnilnik z dvojnim okvirjem za 320x240 v 16-bitni barvi, je omejeval zasnovo večopravilnosti. Z zunanjim PSRAM -om lahko nekoliko premaga, čeprav je počasnejši od notranjega RAM -a
  • premalo procesorske moči za dekodiranje videa mp4
  • nimajo vse različice ESP32 2 jedra, večopravilni vzorec koristi le različici z dvema jedroma

Glej:

Korak: Video format

RGB565

Ali imenovana 16-bitna barva je surov format podatkov, ki se običajno uporablja pri komunikaciji med MCU in barvnim zaslonom. Vsak barvni piksel je predstavljen s 16-bitno vrednostjo, prvih 5-bit je rdeča vrednost, naslednja 6-bitna je zelena vrednost in nato 5-bitna modra vrednost. 16-bitna vrednost lahko povzroči barvno variacijo 65536, zato jo imenujemo tudi 64K barve. Tako bo 1 minutni video 320x240 pri 30 sličicah na sekundo velikosti videoposnetka: 16 * 320 * 240 * 30 * 60 = 2211840000 bitov = 276480000 bajtov ali več kot 260 MB

Animirani GIF

To je običajna oblika datotek v spletu od devetdesetih let prejšnjega stoletja. Omejuje barvno variacijo za vsak zaslon na največ 256 barv in ne ponavlja, da slikovno piko shrani v isti barvi kot prejšnji okvir. Tako lahko veliko zmanjša velikost datoteke, še posebej, če vsak okvir animacije ne spremeni preveč podrobnosti. Stiskanje LZW je zasnovano tako, da ga lahko dekodira računalnik iz devetdesetih let prejšnjega stoletja, zato ima tudi ESP32 dovolj poštene procesorske moči za njegovo dekodiranje v realnem času.

Motion JPEG

Ali pa se imenuje M-JPEG / MJPEG je običajna oblika stiskanja videa za strojno opremo za zajem videa z omejeno močjo obdelave. Pravzaprav gre preprosto za združevanje mirujočih okvirjev JPEG. Za primerjavo z MPEG ali MP4, Motion JPEG ne potrebuje računalniško intenzivne tehnike med kadriranja, vsak okvir je neodvisen. Zato za kodiranje in dekodiranje zahteva manj sredstev.

Ref.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

3. korak: Oblika zvoka

PCM

Surov format podatkov za digitalni zvok. ESP32 DAC uporablja 16-bitno bitno globino, kar pomeni, da vsi 16-bitni podatki predstavljajo digitalni vzorčeni analogni signal. Večina zvoka za video in pesmi običajno uporablja frekvenco vzorčenja pri 44100 MHz, kar pomeni 44100 vzorčenega analognega signala za vsako sekundo. Tako bodo 1 -minutni mono avdio PCM surovi podatki velikosti: 16 * 44100 * 60 = 42336000 bitov = 5292000 bajtov ali več kot 5 MB. Velikost stereo zvoka bo dvojna, to je več kot 10 MB

MP3

MPEG Layer 3 je stisnjen zvočni format, ki se od leta 1990 široko uporablja za stiskanje pesmi. Lahko dramatično zmanjša velikost datoteke na manj kot eno desetino surovega formata PCM

Ref.:

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

en.wikipedia.org/wiki/MP3

4. korak: Oblikujte pretvorbo

Ta projekt z uporabo FFmpeg pretvori video v ESP32 berljivo obliko.

Prenesite in namestite FFmpeg na njihovo uradno spletno mesto, če še ne:

Pretvorite v zvok PCM

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

Pretvorite v zvok MP3

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

Pretvori v RGB565

ffmpeg -i vhod.mp4 -vf "fps = 9, merilo = -1: 176: zastave = lanczos, obrezovanje = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Pretvori v animirani GIF

ffmpeg -i vhod.mp4 -vf "fps = 15, merilo = -1: 176: zastave = lanczos, obrezovanje = 220: in_h: (in_w -220)/2: 0, razcep [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-ool -1 220_15fps.gif

Pretvori v Motion JPEG

ffmpeg -i vhod.mp4 -vf "fps = 30, merilo = -1: 176: zastave = lanczos, obrezovanje = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

Opomba:

Animirani GIF, pretvorjen v FFmpeg, je mogoče dodatno optimizirati z nekaterimi spletnimi orodji. Poiščite ga lahko v orodju za optimiziranje GIF

5. korak: Priprava strojne opreme

Priprava strojne opreme
Priprava strojne opreme

Razvojna plošča ESP32

Vsaka dvojedrna ESP32 dev plošča bi morala biti v redu, tokrat uporabljam TTGO ESP32-Micro.

Barvni zaslon

Vsak barvni zaslon, ki ga podpira Arduino_GFX, bi moral biti v redu, tokrat uporabljam odklopno ploščo ILI9225 z režo za kartico SD.

Seznam barvnih zaslonov, ki jih podpira Arduino_GFX, najdete na Githubu:

github.com/moononournation/Arduino_GFX

SD kartice

Vsaka kartica SD bi morala biti v redu, tokrat uporabljam SanDisk "normal speed" 8 GB micro SD s SD adapterjem.

Zvok

Če želite uporabljati samo slušalke, preprosto priključite nožice za slušalke na pin 26 in GND lahko posluša zvok. Lahko pa uporabite majhen ojačevalnik za predvajanje zvoka z zvočnikom.

Drugi

Nekaj ploščic in žic za plošče

Korak 6: Vmesnik SD

SD vmesnik
SD vmesnik
SD vmesnik
SD vmesnik

Odklopna plošča LCD ILI9225 vključuje tudi odmične zatiče za režo SD crd. Uporablja se lahko kot vodilo SPI ali 1-bitno vodilo SD. Kot sem že omenil v svojih prejšnjih navodilih, raje uporabljam 1-bitno vodilo SD, zato bo ta projekt temeljil na 1-bitnem vodilu SD.

7. korak: Sestavite skupaj

Skupaj
Skupaj
Skupaj
Skupaj
Skupaj
Skupaj

Zgornje slike prikazujejo preskusno platformo, ki jo uporabljam v tem projektu. Bela plošča je 3D natisnjena, lahko jo naložite in natisnete na thingiverse:

Dejanska povezava je odvisna od strojne opreme, ki jo imate pri roki.

Tu je povzetek povezave:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k upor -> 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

Glej:

8. korak: Program

Program
Program

Arduino IDE

Prenesite in namestite Arduino IDE, če tega še niste storili:

www.arduino.cc/en/main/software

Podpora za ESP32

Če tega še niste storili, sledite navodilom za namestitev, če tega še niste storili:

github.com/espressif/arduino-esp32

Knjižnica Arduino_GFX

Prenesite najnovejše knjižnice Arduino_GFX: (pritisnite "Clone or Download" -> "Download ZIP")

github.com/moononournation/Arduino_GFX

Uvozite knjižnice v Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> izberite preneseno datoteko ZIP)

ESP8266Avdio

Prenesite najnovejše knjižnice ESP8266Audio: (pritisnite "Clone or Download" -> "Download ZIP")

github.com/earlephilhower/ESP8266Audio

Uvozite knjižnice v Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> izberite preneseno datoteko ZIP)

RGB565_video vzorčna koda

Prenesite najnovejšo vzorčno kodo RGB565_video: (pritisnite "Clone or Download" -> "Download ZIP")

github.com/moononournation/RGB565_video

Podatki s kartice SD

Pretvorite datoteke na kartico SD in jih vstavite v režo za kartico LCD

Sestavite in naložite

  1. Odprite SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino v Arduino IDE
  2. Če ne uporabljate ILI9225, spremenite novo kodo razreda (okoli vrstice 35), da popravite ime razreda
  3. Pritisnite gumb "Naloži" Arduino IDE
  4. Če programa niste naložili, poskusite prekiniti povezavo med ESP32 GPIO 2 in SD D0/MISO
  5. Če ugotovite, da orientacija ni pravilna, spremenite vrednost "rotacije" (0-3) v novi kodi razreda
  6. Če se program dobro izvaja, lahko poskusite z drugim vzorčnim zagonom s SDMMC_*
  7. Če nimate reže za kartico SD ali nimate nameščenega FFmpeg, lahko še vedno poskusite s primerom SPIFFS_*

9. korak: Primerjalno merilo

Merilo uspešnosti
Merilo uspešnosti

Tu je povzetek uspešnosti za različne video (220x176) in zvočne (44100 MHz) oblike:

Oblika Sličic na sekundo (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Opomba:

  • MJPEG + PCM lahko doseže višje fps, vendar je nepotrebno predvajanje na majhnem zaslonu, večjem od 30 fps
  • RGB565 ne potrebuje dekodiranja, vendar je velikost podatkov prevelika in veliko časa porabljenega pri nalaganju podatkov s SD-ja, 4-bitnega vodila SD in hitrejše kartice SD lahko to nekoliko izboljša (ugibanje lahko doseže okoli 12 fps)
  • Postopek dekodiranja MP3 še ni optimiziran, zdaj je namenjen jedru 0 za dekodiranje MP3 in jedru 1 za predvajanje videa

10. korak: Veselo igranje

Veselo igranje!
Veselo igranje!

Zdaj lahko s svojim ESP32 predvajate video in zvok, odklenil je številne možnosti!

Mislim, da bom kasneje naredil majhen starinski televizor …

Priporočena: