Talaan ng mga Nilalaman:

Mag-play ng Video Sa ESP32: 10 Mga Hakbang (na may Mga Larawan)
Mag-play ng Video Sa ESP32: 10 Mga Hakbang (na may Mga Larawan)

Video: Mag-play ng Video Sa ESP32: 10 Mga Hakbang (na may Mga Larawan)

Video: Mag-play ng Video Sa ESP32: 10 Mga Hakbang (na may Mga Larawan)
Video: ESP32 Tutorial 4 - Data types Define Variable Int, bool, char, Serial Monitor-ESP32 IoT Learnig kit 2024, Nobyembre
Anonim
Mag-play ng Video Sa ESP32
Mag-play ng Video Sa ESP32

Nagpapakita ang Mga Tagubilin na ito ng isang bagay tungkol sa pag-play ng video at audio sa ESP32.

Hakbang 1: Mga Tampok at Limitasyon ng ESP32

Mga Tampok

  • 4 SPI bus, 2 SPI bus na magagamit para sa puwang ng gumagamit, ang mga ito ay SPI2 at SPI3 o tinatawag na HSPI at VSPI. Ang parehong mga SPI bus ay maaaring tumakbo nang higit sa 80 MHz. Sa teoretikal maaari nitong itulak ang 320x240 16-bit na mga pixel ng kulay sa SPI LCD sa 60 fps, ngunit hindi pa nito nabibilang ang oras na kinakailangan sa overhead para mabasa at mabaskode ang data ng video.
  • Ang 1-bit / 4-bit SD bus ay maaaring kumonekta sa SD card sa katutubong protocol
  • I2S panloob na output ng audio ng DAC
  • higit sa 100 KB RAM na magagamit para sa video at audio buffer
  • Sapat na kapangyarihan sa pagpoproseso upang ma-decode ang JPEG (play Motion JPEG) at LZW data compression (play Animated GIF)
  • Maaaring i-split ng bersyon ng dual-core ang nabasa na data mula sa SD card, i-decode at itulak sa SPI LCD sa parallel multi-task at palakasin ang pagganap ng pag-playback

Mga limitasyon

  • hindi sapat ang panloob na RAM upang magkaroon ng dobleng frame buffer para sa 320x240 sa 16-bit na kulay, nilimitahan nito ang disenyo ng multitask. Maaari itong mapagtagumpayan ng kaunti sa panlabas na PSRAM kahit na ito ay mas mabagal kaysa sa panloob na RAM
  • walang sapat na kapangyarihan sa pagproseso upang ma-decode ang mp4 video
  • hindi lahat ng bersyon ng ESP32 ay mayroong 2 core, ang sample na multi-task ay nakikinabang lamang sa bersyon ng dual-core

Ref.:

Hakbang 2: Format ng Video

RGB565

O tinatawag na 16-bit na kulay ay isang hilaw na format ng data na karaniwang ginagamit sa komunikasyon sa pagitan ng MCU at pagpapakita ng kulay. Ang bawat kulay na pixel ay kinakatawan ng isang 16-bit na halaga, ang unang 5-bit ay pulang halaga, ang pagsunod sa 6-bit ay berde na halaga at pagkatapos ay 5-bit na asul na halaga. Ang 16-bit na halaga ay maaaring gumawa ng pagkakaiba-iba ng kulay na 65536 kaya't tumawag din ito ng mga kulay na 64K. Kaya't ang 1 minutong 320x240 @ 30 fps na video ay sukat: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 bytes o higit sa 260 MB

Animated na GIF

Ito ay isang karaniwang format ng file sa web mula pa noong 1990s. Nililimitahan nito ang pagkakaiba-iba ng kulay para sa bawat screen hanggang sa 256 na kulay at huwag ulitin ang pag-iimbak ng pixel na kasing kulay ng nakaraang frame. Kaya't maaari nitong mabawasan ang laki ng file, lalo na kapag ang bawat frame ng animation ay hindi nagbabago ng labis na mga detalye. Ang compression ng LZW ay idinisenyo na may kakayahang mai-decode ng computer noong 1990, kaya't ang ESP32 ay mayroon ding sapat na kapangyarihan sa pagpoproseso upang ma-decode ito sa real time.

Paggalaw JPEG

O tinatawag na M-JPEG / MJPEG ay isang pangkaraniwang format ng compression ng video para sa hardware ng pagkuha ng video na may limitadong lakas sa pagpoproseso. Ito ay talagang isang pagsasama-sama pa rin ng mga frame ng JPEG. Paghambingin sa MPEG o MP4, Paggalaw JPEG hindi na kailangan ng computationally masinsinang pamamaraan ng interframe hula, bawat frame ay malaya. Kaya't nangangailangan ito ng mas kaunting mapagkukunan upang ma-encode at mag-decode.

Ref.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Hakbang 3: Format ng Audio

PCM

Isang hilaw na format ng data para sa digital audio. Gumagamit ang ESP32 DAC ng 16-bit na lalim na bit, nangangahulugang ang bawat 16-bit na data ay kumakatawan sa isang digital na sample ng analog signal. Karamihan sa audio ng video at kanta ay karaniwang gumagamit ng sample rate na 44100 MHz, nangangahulugan iyon ng 44100 na sampol na analog signal para sa bawat segundo. Kaya, 1 minutong mono audio PCM raw data ay susukat: 16 * 44100 * 60 = 42336000 bits = 5292000 bytes o higit sa 5 MB. Ang laki ng stereo audio ay magiging doble, ibig sabihin higit sa 10 MB

MP3

Ang MPEG Layer 3 ay isang naka-compress na audio format na malawakang ginagamit para sa compression ng kanta mula pa noong 1990s. Puwede nitong bawasan ang laki ng file sa ilalim ng ikasampu ng hilaw na format ng PCM

Ref.:

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

en.wikipedia.org/wiki/MP3

Hakbang 4: Pag-format ng Conversion

Gumagamit ang proyektong ito ng FFmpeg i-convert ang video sa nababasa na format na ESP32.

Mangyaring i-download at i-install ang FFmpeg sa kanilang opisyal na site kung hindi pa:

I-convert sa audio ng PCM

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

I-convert sa MP3 audio

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

I-convert sa 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

I-convert sa Animated 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

I-convert sa 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

Tandaan:

Ang FFmpeg na na-convert na Animated-g.webp" />

Hakbang 5: Paghahanda ng Hardware

Paghahanda ng Hardware
Paghahanda ng Hardware

ESP32 Dev Board

Anumang dual-core ESP32 dev board ay dapat na ok, sa oras na ito ay gumagamit ako ng isang TTGO ESP32-Micro.

Pagpapakita ng Kulay

Anumang pagpapakita ng kulay na sinusuportahan ng Arduino_GFX ay dapat na ok, sa oras na ito ay gumagamit ako ng isang ILI9225 breakout board na may puwang ng SD card.

Maaari mong makita ang sinusuportahan ng Arduino_GFX na listahan ng display ng kulay sa Github:

github.com/moononournation/Arduino_GFX

SD Card

Anumang SD card ay dapat na ok, sa oras na ito ay gumagamit ako ng isang SanDisk "normal na bilis" 8 GB micro SD na may SD adapter.

Audio

Kung nais mong gumamit ng headphone lamang, ikonekta lamang ang mga headphone pin sa pin 26 at makikinig ang GND ng audio. O maaari kang gumamit ng isang maliit na amplifier upang i-play ang audio sa speaker.

Ang iba pa

Ang ilang mga breadboard at wireboard wires

Hakbang 6: SD Interface

SD Interface
SD Interface
SD Interface
SD Interface

Ang ILI9225 LCD breakout board ay nagsama rin ng mga SD crd slot breakout pin. Maaari itong magamit bilang SPI bus o 1-bit SD bus. Tulad ng nabanggit sa aking nakaraang mga itinuturo, mas gusto ko ang paggamit ng 1-bit SD bus, kaya ang proyektong ito ay magbabase sa 1-bit SD bus.

Hakbang 7: Isama Ito

Ilagay ito magkasama
Ilagay ito magkasama
Ilagay ito magkasama
Ilagay ito magkasama
Ilagay ito magkasama
Ilagay ito magkasama

Ipinapakita ng mga larawan sa itaas ang platform ng pagsubok na ginagamit ko sa proyektong ito. Ang puting tinapay ay naka-print sa 3D, maaari mong i-download at i-print ito sa thingiverse:

Ang tunay na koneksyon ay nakasalalay sa aling mga hardware ang nasa kamay mo.

Narito ang buod ng koneksyon:

ESP32

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

Hakbang 8: Programa

Programa
Programa

Arduino IDE

I-download at i-install ang Arduino IDE kung hindi mo pa ito nagagawa:

www.arduino.cc/en/main/software

Suporta ng ESP32

Sundin ang Mga Tagubilin sa Pag-install upang magdagdag ng suporta sa ESP32 kung hindi mo pa ito nagagawa:

github.com/espressif/arduino-esp32

Arduino_GFX Library

Mag-download ng pinakabagong mga aklatan ng Arduino_GFX: (pindutin ang "I-clone o I-download" -> "I-download ang ZIP")

github.com/moononournation/Arduino_GFX

Mag-import ng mga aklatan sa Arduino IDE. (Arduino IDE "Sketch" Menu -> "Isama ang Library" -> "Magdagdag. ZIP Library" -> piliin ang na-download na ZIP file)

ESP8266Audio

Mag-download ng pinakabagong mga aklatan ng ESP8266Audio: (pindutin ang "I-clone o I-download" -> "I-download ang ZIP")

github.com/earlephilhower/ESP8266Audio

Mag-import ng mga aklatan sa Arduino IDE. (Arduino IDE "Sketch" Menu -> "Isama ang Library" -> "Idagdag. ZIP Library" -> piliin ang na-download na ZIP file)

RGB565_video Sample Code

Mag-download ng pinakabagong RGB565_video sample code: (pindutin ang "I-clone o I-download" -> "I-download ang ZIP")

github.com/moononournation/RGB565_video

Data ng SD Card

Kopyahin ang na-convert na mga file sa SD card at ipasok sa slot ng LCD card

Magtipon at Mag-upload

  1. Buksan ang SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino sa Arduino IDE
  2. Kung hindi ka gumagamit ng ILI9225, baguhin ang bagong code ng klase (sa paligid ng linya 35) upang itama ang pangalan ng klase
  3. Pindutin ang pindutan ng "Mag-upload" ng Arduino IDE
  4. Kung nabigo kang i-upload ang programa, subukang tanggalin ang koneksyon sa pagitan ng ESP32 GPIO 2 at SD D0 / MISO
  5. Kung nakita mong hindi tama ang oryentasyon, baguhin ang halagang "pag-ikot" (0-3) sa bagong code ng klase
  6. Kung tumatakbo nang maayos ang programa maaari mong subukan ang iba pang sample na magsimula sa SDMMC_ *
  7. Kung wala kang puwang ng SD card o wala kang naka-install na FFmpeg, maaari mo pa ring subukan ang halimbawa ng SPIFFS_ *

Hakbang 9: Benchmark

Benchmark
Benchmark

Narito ang buod ng pagganap para sa iba't ibang format ng video (220x176) at audio (44100 MHz):

Format Frame bawat segundo (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Tandaan:

  • Ang MJPEG + PCM ay maaaring umabot sa mas mataas na fps ngunit hindi kinakailangan ang pag-play sa isang maliit na screen na mas malaki sa 30 fps
  • Ang RGB565 ay hindi nangangailangan ng proseso ng pag-decode ngunit ang laki ng data ay masyadong malaki at maraming oras na natupok sa paglo-load ng data mula sa SD, 4-bit SD bus at mas mabilis na SD card ay maaaring mapabuti ito nang kaunti (ang ligaw na hula ay maaaring umabot sa paligid ng 12 fps)
  • Ang proseso ng pag-decode ng MP3 ay hindi pa na-optimize, nakatuon ngayon ang core 0 para sa MP3 decode at core 1 para sa pag-play ng video

Hakbang 10: Maligayang Paglalaro

Maligayang Paglalaro!
Maligayang Paglalaro!

Ngayon ay maaari mo nang i-play ang video at audio sa iyong ESP32, na-unlock ang maraming mga posibilidad!

Sa palagay ko ay gagawa ako ng isang maliit na maliit na TV sa TV mamaya …

Inirerekumendang: