Tartalomjegyzék:

Videó lejátszása az ESP32 segítségével: 10 lépés (képekkel)
Videó lejátszása az ESP32 segítségével: 10 lépés (képekkel)

Videó: Videó lejátszása az ESP32 segítségével: 10 lépés (képekkel)

Videó: Videó lejátszása az ESP32 segítségével: 10 lépés (képekkel)
Videó: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
Videó lejátszása az ESP32 segítségével
Videó lejátszása az ESP32 segítségével

Ez az utasítások mutatnak valamit a videó és hang lejátszásáról az ESP32 segítségével.

1. lépés: Az ESP32 jellemzői és korlátozásai

Jellemzők

  • 4 SPI busz, 2 SPI busz elérhető a felhasználói térben, ezek SPI2 és SPI3, vagy HSPI és VSPI. Mindkét SPI busz legfeljebb 80 MHz -en tud működni. Elméletileg képes 320x240 16 bites színes képpontokat tolni az SPI LCD-re 60 kép / mp sebességgel, de még nem számolta a videoadatok olvasásához és dekódolásához szükséges többletidőt.
  • Az 1 bites / 4 bites SD busz natív protokollban csatlakoztathatja az SD kártyát
  • I2S belső DAC hangkimenet
  • több mint 100 KB RAM áll rendelkezésre video- és audió pufferhez
  • Elég tisztességes feldolgozási teljesítmény a JPEG (Motion Motion JPEG lejátszása) és az LZW adattömörítés dekódolásához (animált-g.webp" />
  • A kétmagos verzió fel tudja osztani az olvasott adatokat az SD-kártyáról, dekódolni és SPI LCD-re tolni párhuzamos többfeladatos feladatokra, és növelheti a lejátszási teljesítményt

Korlátozások

  • nem elegendő belső RAM ahhoz, hogy dupla keretpuffer legyen 320x240 méretű, 16 bites színben, ez korlátozta a többfeladatos kialakítást. A külső PSRAM segítségével kissé legyőzhető, bár lassabb, mint a belső RAM
  • nincs elegendő feldolgozási teljesítmény az mp4 videó dekódolásához
  • nem minden ESP32 verzió rendelkezik 2 maggal, a többfeladatos minta csak a kétmagos verzióban részesül

Ltsz.:

2. lépés: Videó formátum

RGB565

Vagy az úgynevezett 16 bites szín egy nyers adatformátum, amelyet általában használnak az MCU és a színes kijelző közötti kommunikációban. Minden egyes színes pixelt 16 bites érték képvisel, az első 5 bites piros érték, a 6 bites után zöld érték, majd 5 bites kék érték. A 16 bites érték 65536 színváltozatot hozhat létre, így 64K színeknek is nevezték. Tehát az 1 perces 320x240@30 fps videó mérete: 16 * 320 * 240 * 30 * 60 = 2211840000 bit = 276480000 bájt vagy több mint 260 MB

Animált GIF

Ez az 1990 -es évek óta gyakori fájlformátum az interneten. Az egyes képernyők színváltozatát legfeljebb 256 színre korlátozza, és nem ismétli meg a pixel azonos színű tárolását, mint az előző képkocka. Így jelentősen csökkentheti a fájlméretet, különösen akkor, ha minden animációs keret nem változtat túl sok részletet. Az LZW tömörítést az 1990 -es évek számítógépe dekódolására tervezték, így az ESP32 is elég tisztességes feldolgozási kapacitással rendelkezik a valós idejű dekódoláshoz.

Mozgás JPEG

Vagy M-JPEG / MJPEG néven egy általános tömörítési formátum a korlátozott feldolgozási teljesítményű videofelvételi hardverekhez. Valójában egyszerűen állhatatlan JPEG képkockák összefűzése. Összehasonlítva az MPEG vagy MP4 formátumokkal, a Motion JPEG nem igényel számításigényes interframe predikciós technikát, minden képkocka független. Tehát kevesebb erőforrást igényel a kódolás és a dekódolás.

Ltsz.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

3. lépés: Hangformátum

PCM

Nyers adatformátum a digitális hanghoz. Az ESP32 DAC 16 bites mélységet használ, ami azt jelenti, hogy minden 16 bites adat digitális mintavételi analóg jelet képvisel. A legtöbb video- és dalhang általában mintavételi frekvenciát használ 44100 MHz -en, ami azt jelenti, hogy minden másodpercben 44100 mintavételezett analóg jelet használnak. Tehát az 1 perces mono audio PCM nyers adatok mérete: 16 * 44100 * 60 = 42336000 bit = 5292000 bájt vagy több mint 5 MB. A sztereó hang mérete dupla lesz, azaz több mint 10 MB

MP3

Az MPEG Layer 3 egy tömörített hangformátum, amelyet széles körben használnak a dalok tömörítésére az 1990 -es évek óta. Drámaian csökkentheti a fájlméretet a nyers PCM formátum egytizedére

Ltsz.:

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

en.wikipedia.org/wiki/MP3

4. lépés: Formázás átalakítása

Ez a projekt az FFmpeg segítségével konvertálja a videót ESP32 olvasható formátumba.

Kérjük, töltse le és telepítse az FFmpeg -et a hivatalos webhelyükről, ha még nem:

Konvertálás PCM audióvá

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

Konvertálás MP3 hangra

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

Átalakítás RGB565 -re

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

Konvertálás animált-g.webp

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

Konvertálás Motion JPEG formátumba

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

Jegyzet:

Az FFmpeg konvertált animált-g.webp" />

5. lépés: A hardver előkészítése

Hardver előkészítése
Hardver előkészítése

ESP32 Dev Board

Bármilyen kétmagos ESP32 fejlesztői kártyának rendben kell lennie, ezúttal TTGO ESP32-Micro-t használok.

Színes kijelző

Bármilyen színes kijelzőnek, amelyet az Arduino_GFX támogat, rendben kell lennie, ezúttal ILI9225 törőlapot használok SD -kártya foglalattal.

A Githubon megtalálhatja az Arduino_GFX által támogatott színes megjelenítési listát:

github.com/moononournation/Arduino_GFX

SD kártya

Bármelyik SD -kártyának rendben kell lennie, ezúttal egy SanDisk "normál sebességű" 8 GB -os micro SD -t használok SD adapterrel.

Hang

Ha csak fejhallgatót szeretne használni, egyszerűen csatlakoztassa a fejhallgató érintkezőit a 26 -os tűhöz, és a GND hallgathatja a hangot. Vagy használhat egy apró erősítőt, hogy hangot játsszon a hangszóróval.

Mások

Néhány kenyérsütő deszkát és kenyeretábla vezetéket

6. lépés: SD interfész

SD interfész
SD interfész
SD interfész
SD interfész

Az ILI9225 LCD törőpanel SD crd foglalatú kitörőcsapokat is tartalmazott. Használható SPI buszként vagy 1 bites SD buszként. Amint azt az előző utasításomban említettem, inkább az 1 bites SD buszt használom, így ez a projekt 1 bites SD buszon fog alapulni.

7. lépés: Állítsd össze

Rakd össze
Rakd össze
Rakd össze
Rakd össze
Rakd össze
Rakd össze

A fenti képek azt a tesztelési platformot mutatják, amelyet ebben a projektben használok. A fehér kenyértábla 3D nyomtatású, letöltheti és kinyomtathatja a thingiverse webhelyről:

A tényleges kapcsolat attól függ, hogy milyen hardvert tart a kezében.

Íme a kapcsolat összefoglalója:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k ellenállás -> 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

Ltsz.:

8. lépés: Programozás

Program
Program

Arduino IDE

Töltse le és telepítse az Arduino IDE programot, ha még nem tette meg:

www.arduino.cc/en/main/software

ESP32 támogatás

Kövesse a telepítési utasításokat az ESP32 támogatás hozzáadásához, ha még nem tette meg:

github.com/espressif/arduino-esp32

Arduino_GFX könyvtár

Töltse le a legújabb Arduino_GFX könyvtárakat: (nyomja meg a "Klón vagy letöltés" -> "Letöltés ZIP" gombot)

github.com/moononournation/Arduino_GFX

Könyvtárak importálása az Arduino IDE -ben. (Arduino IDE "Vázlat" menü -> "Könyvtár beillesztése" -> ". ZIP könyvtár hozzáadása" -> válassza ki a letöltött ZIP fájlt)

ESP8266Audio

Töltse le a legújabb ESP8266Audio könyvtárakat: (nyomja meg a "Clone or Download" -> "Download ZIP" gombot)

github.com/earlephilhower/ESP8266Audio

Könyvtárak importálása az Arduino IDE -ben. (Arduino IDE "Vázlat" menü -> "Könyvtár beillesztése" -> ". ZIP könyvtár hozzáadása" -> válassza ki a letöltött ZIP fájlt)

RGB565_video mintakód

Töltse le a legújabb RGB565_video mintakódot: (nyomja meg a "Clone or Download" -> "Download ZIP" gombot)

github.com/moononournation/RGB565_video

SD kártya adatai

Másolja át az átalakított fájlokat SD -kártyára, és helyezze be az LCD -kártya foglalatába

Fordítás és feltöltés

  1. Az SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino megnyitása az Arduino IDE -ben
  2. Ha nem az ILI9225 -öt használja, módosítsa az új osztálykódot (a 35. sor körül) a helyes osztálynévre
  3. Nyomja meg az Arduino IDE „Feltöltés” gombot
  4. Ha nem sikerült feltölteni a programot, próbálja meg leválasztani a kapcsolatot az ESP32 GPIO 2 és az SD D0/MISO között
  5. Ha úgy találja, hogy a tájolás nem megfelelő, módosítsa a "forgás" értéket (0-3) az új osztálykódban
  6. Ha a program jól fut, kipróbálhat egy másik mintaindítást SDMMC_* -vel
  7. Ha nincs SD -kártyahelye, vagy nincs telepítve az FFmpeg, akkor is megpróbálhatja a SPIFFS_* példát

9. lépés: benchmark

Viszonyítási alap
Viszonyítási alap

Íme a különböző videó (220x176) és audio (44100 MHz) formátum teljesítményének összefoglalója:

Formátum Képkocka másodpercenként (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Jegyzet:

  • Az MJPEG + PCM képes elérni a magasabb képkocka / s sebességet, de szükségtelen lejátszás egy 30 kép / mp -nél nagyobb apró képernyőn
  • Az RGB565 nem igényel dekódolási folyamatot, de az adatméret túl nagy, és sok időbe telik az adatok SD-ről, 4 bites SD buszról és gyorsabb SD-kártyáról történő betöltése, ez egy kicsit javíthat (a vad találgatás akár 12 kép / mp-t is elérhet)
  • Az MP3 dekódolási folyamat még nincs optimalizálva, most a 0 magot szenteli az MP3 dekódolásnak, és az 1 -et a videó lejátszásához

10. lépés: Jó játékot

Jó játékot!
Jó játékot!

Most már lejátszhat videót és hangot az ESP32 készülékével, amely számos lehetőséget nyitott meg!

Azt hiszem, később csinálok egy apró szüreti tévét …

Ajánlott: