Sadržaj:

Reproducirajte video zapis sa ESP32: 10 koraka (sa slikama)
Reproducirajte video zapis sa ESP32: 10 koraka (sa slikama)

Video: Reproducirajte video zapis sa ESP32: 10 koraka (sa slikama)

Video: Reproducirajte video zapis sa ESP32: 10 koraka (sa slikama)
Video: ESP32 Cam: программирование камеры ESP32 с использованием Arduino, AI Thinker, исправлены проблемы, проект esp32 IoT 2024, Novembar
Anonim
Reproducirajte video sa ESP32
Reproducirajte video sa ESP32

Ove upute pokazuju nešto o reprodukciji videa i zvuka s ESP32.

Korak 1: Značajke i ograničenja ESP32

Karakteristike

  • 4 SPI sabirnice, 2 SPI sabirnice dostupne za korisnički prostor, one su SPI2 i SPI3 ili se zovu HSPI i VSPI. Obje SPI sabirnice mogu raditi najviše 80 MHz. Teoretski, može gurnuti 320x240 16-bitne piksele u boji na SPI LCD pri 60 fps, ali još nije računao vrijeme potrebno za čitanje i dekodiranje video podataka.
  • 1-bitna / 4-bitna SD sabirnica može povezati SD karticu u izvornom protokolu
  • I2S interni DAC audio izlaz
  • više od 100 KB RAM -a dostupno za video i audio bafer
  • Dovoljno poštena procesorska snaga za dekodiranje JPEG -a (reprodukcija Motion JPEG -a) i LZW kompresije podataka (reprodukcija animiranog-g.webp" />
  • Dvojezgrena verzija može podijeliti pročitane podatke sa SD kartice, dekodirati i pritisnuti na SPI LCD u paralelne više zadataka i povećati performanse reprodukcije

Ograničenja

  • nema dovoljno interne memorije da ima međuspremnik s dvostrukim okvirom za 320x240 u 16-bitnoj boji, to je ograničilo dizajn više zadataka. Može prevazići malo s vanjskim PSRAM -om iako je sporiji od unutrašnjeg RAM -a
  • nema dovoljno procesorske snage za dekodiranje mp4 videa
  • nemaju sve verzije ESP32 2 jezgre, uzorak za više zadataka koristi samo na dvojezgrenoj verziji

Ref.:

Korak 2: Video format

RGB565

Ili nazvana 16-bitna boja je sirovi format podataka koji se obično koristi za komunikaciju između MCU-a i ekrana u boji. Svaki piksel u boji predstavljen je 16-bitnom vrijednošću, prvih 5-bitna je crvena vrijednost, slijedeća 6-bitna je zelena vrijednost, a zatim 5-bitna plava vrijednost. 16-bitna vrijednost može napraviti varijaciju boje 65536 pa se naziva i 64K boja. Tako će 1 minuta 320x240@30 fps videozapis biti veličine: 16 * 320 * 240 * 30 * 60 = 2211840000 bita = 276480000 bajtova ili više od 260 MB

Animirani GIF

Ovo je uobičajeni format datoteke na webu od 1990 -ih. Ograničava varijacije boja za svaki ekran do 256 boja i ne ponavlja ponavljanje u pikselu u istoj boji kao prethodni okvir. Dakle, može znatno smanjiti veličinu datoteke, posebno ako svaki okvir animacije ne promijeni previše detalja. LZW kompresija je dizajnirana za dekodiranje na računaru devedesetih godina prošlog vijeka, pa ESP32 takođe ima dovoljno fer procesorsku snagu da je dekodira u realnom vremenu.

Motion JPEG

Ili nazvan M-JPEG / MJPEG je uobičajeni format kompresije video zapisa za hardver za snimanje video zapisa s ograničenom procesorskom snagom. To je zapravo jednostavno spajanje mirnih JPEG okvira. U usporedbi s MPEG -om ili MP4 -om, Motion JPEG -u nije potrebna računski intenzivna tehnika međukartnog predviđanja, svaki kadar je nezavisan. Stoga je potrebno manje resursa za kodiranje i dekodiranje.

Ref.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Korak 3: Audio format

PCM

Sirovi format podataka za digitalni zvuk. ESP32 DAC koristi 16-bitnu dubinu bita, što znači da svaki 16-bitni podatak predstavlja digitalni uzorkovani analogni signal. Većina zvuka video zapisa i pjesama obično koristi frekvenciju uzorkovanja na 44100 MHz, što znači 44100 uzorkovanog analognog signala za svaku sekundu. Dakle, 1 minutni mono audio PCM sirovi podaci bit će veličine: 16 * 44100 * 60 = 42336000 bita = 5292000 bajtova ili više od 5 MB. Veličina stereo zvuka bit će dvostruka, odnosno preko 10 MB

MP3

MPEG Layer 3 je komprimirani audio format koji se široko koristi za kompresiju pjesama od 1990 -ih. Može dramatično smanjiti veličinu datoteke na manje od jedne desetine neobrađenog PCM formata

Ref.:

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

en.wikipedia.org/wiki/MP3

Korak 4: Pretvorba formata

Ovaj projekat koristi FFmpeg za pretvaranje video zapisa u format čitljiv ESP32.

Molimo vas da preuzmete i instalirate FFmpeg na njihovom službenom web mjestu ako još niste:

Pretvorite u PCM audio

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

Pretvorite u MP3 zvuk

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

Pretvorite u RGB565

ffmpeg -i input.mp4 -vf "fps = 9, scale = -1: 176: zastavice = lanczos, obrezivanje = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Pretvori u animirani GIF

ffmpeg -i input.mp4 -vf "fps = 15, razmjer = -1: 176: zastave = lanczos, obrezivanje = 220: in_h: (in_w -220)/2: 0, podijeljeno [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-loop -1 220_15fps.gif

Pretvori u Motion JPEG

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

Bilješka:

FFmpeg konvertirani animirani-g.webp" />

Korak 5: Priprema hardvera

Priprema hardvera
Priprema hardvera

ESP32 Dev Board

Bilo koja dvojezgrena ESP32 dev ploča trebala bi biti u redu, ovaj put koristim TTGO ESP32-Micro.

Prikaz u boji

Bilo koji zaslon u boji koji Arduino_GFX podržava trebao bi biti u redu, ovaj put koristim ILI9225 probojnu ploču sa utorom za SD karticu.

Popis boja u boji koji podržava Arduino_GFX možete pronaći na Githubu:

github.com/moononournation/Arduino_GFX

Sd kartica

Bilo koja SD kartica bi trebala biti u redu, ovaj put koristim SanDisk micro SD sa normalnom brzinom od 8 GB sa SD adapterom.

Audio

Ako želite koristiti samo slušalice, jednostavno spojite iglice slušalica na pin 26 i GND može slušati zvuk. Ili možete koristiti maleno pojačalo za reprodukciju zvuka sa zvučnikom.

Drugi

Neke matične ploče i žice za matične ploče

Korak 6: SD sučelje

SD interfejs
SD interfejs
SD interfejs
SD interfejs

ILI9225 LCD ploča za probijanje također uključuje igle za probijanje SD crd utora. Može se koristiti kao SPI sabirnica ili 1-bitna SD sabirnica. Kao što je spomenuto u mojim prethodnim uputama, više volim koristiti 1-bitnu SD sabirnicu, pa će se ovaj projekt temeljiti na 1-bitnoj SD sabirnici.

Korak 7: Spojite to zajedno

Sastavi to
Sastavi to
Sastavi to
Sastavi to
Sastavi to
Sastavi to

Gornje slike prikazuju platformu za testiranje koju koristim u ovom projektu. Bijela ploča je 3D štampana, možete je preuzeti i ispisati na thingiverse:

Stvarna veza ovisi o tome koji hardver imate pri ruci.

Evo sažetka veze:

ESP32

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

Korak 8: Program

Program
Program

Arduino IDE

Preuzmite i instalirajte Arduino IDE ako to još niste učinili:

www.arduino.cc/en/main/software

Podrška za ESP32

Slijedite upute za instalaciju da biste dodali podršku za ESP32 ako to još niste učinili:

github.com/espressif/arduino-esp32

Arduino_GFX biblioteka

Preuzmite najnovije Arduino_GFX biblioteke: (pritisnite "Kloniraj ili preuzmi" -> "Preuzmi ZIP")

github.com/moononournation/Arduino_GFX

Uvezite biblioteke u Arduino IDE. (Arduino IDE "Sketch" meni -> "Uključi biblioteku" -> "Dodaj. ZIP biblioteku" -> odaberite preuzetu ZIP datoteku)

ESP8266Audio

Preuzmite najnovije ESP8266Audio biblioteke: (pritisnite "Kloniraj ili preuzmi" -> "Preuzmi ZIP")

github.com/earlephilhower/ESP8266Audio

Uvezite biblioteke u Arduino IDE. (Arduino IDE "Sketch" meni -> "Uključi biblioteku" -> "Dodaj. ZIP biblioteku" -> odaberite preuzetu ZIP datoteku)

RGB565_video Primjer koda

Preuzmite najnoviji uzorak koda RGB565_video: (pritisnite "Kloniraj ili preuzmi" -> "Preuzmi ZIP")

github.com/moononournation/RGB565_video

Podaci sa SD kartice

Kopirajte konvertirane datoteke na SD karticu i umetnite ih u utor za LCD karticu

Sastavi i otpremi

  1. Otvorite SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino u Arduino IDE
  2. Ako ne koristite ILI9225, promijenite novi kôd klase (oko reda 35) kako biste ispravili naziv klase
  3. Pritisnite Arduino IDE dugme "Upload"
  4. Ako niste uspjeli učitati program, pokušajte prekinuti vezu između ESP32 GPIO 2 i SD D0/MISO
  5. Ako smatrate da orijentacija nije ispravna, promijenite vrijednost "rotacije" (0-3) u novom kodu klase
  6. Ako se program dobro pokreće, možete isprobati drugi primjer početka sa SDMMC_*
  7. Ako nemate utor za SD karticu ili nemate instaliran FFmpeg, još uvijek možete isprobati primjer SPIFFS_*

Korak 9: Mjerenje performansi

Benchmark
Benchmark

Evo sažetka performansi za različite video (220x176) i audio (44100 MHz) formate:

Format Broj kadrova u sekundi (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Bilješka:

  • MJPEG + PCM može doseći veće fps, ali nije potrebno reproducirati na malom ekranu većem od 30 fps
  • RGB565 ne zahtijeva postupak dekodiranja, ali je veličina podataka prevelika i potrebno je puno vremena za učitavanje podataka sa SD-a, 4-bitne SD sabirnice i brže SD kartice mogu je malo poboljšati (za pretpostavku je da može doseći oko 12 fps)
  • Proces dekodiranja MP3 -a još nije optimiziran, sada je posvećen jezgri 0 za dekodiranje MP3 -a i jezgri 1 za reprodukciju videa

Korak 10: Sretno igranje

Sretno igranje!
Sretno igranje!

Sada možete reproducirati video i audio sa svojim ESP32, otključalo je mnoge mogućnosti!

Mislim da ću kasnije napraviti mali vintage TV …

Preporučuje se: