Съдържание:

Възпроизвеждане на видео с ESP32: 10 стъпки (със снимки)
Възпроизвеждане на видео с ESP32: 10 стъпки (със снимки)

Видео: Възпроизвеждане на видео с ESP32: 10 стъпки (със снимки)

Видео: Възпроизвеждане на видео с ESP32: 10 стъпки (със снимки)
Видео: Ние контролираме адресируеми светодиоди на ESP32, WLED фърмуер, използване в Home Assistant 2024, Ноември
Anonim
Възпроизвеждане на видео с ESP32
Възпроизвеждане на видео с ESP32

Тези инструкции показват нещо за възпроизвеждане на видео и аудио с ESP32.

Стъпка 1: Функции и ограничения на ESP32

Характеристика

  • 4 SPI шина, 2 SPI шина, достъпни за потребителско пространство, те са SPI2 и SPI3 или се наричат HSPI и VSPI. И двете SPI шини могат да работят най -много 80 MHz. Теоретично той може да избутва 320x240 16-битови цветни пиксели към SPI LCD при 60 кадъра в секунда, но все още не е преброил времето, необходимо за четене и декодиране на видео данните.
  • 1-битова / 4-битова SD шина може да свързва SD карта в естествен протокол
  • I2S вътрешен DAC аудио изход
  • над 100 KB RAM налична за видео и аудио буфер
  • Достатъчно справедлива процесорна мощ за декодиране на JPEG (възпроизвеждане на Motion JPEG) и компресиране на данни от LZW (възпроизвеждане на анимиран GIF)
  • Двуядрената версия може да разделя прочетените данни от SD карта, да декодира и да натиска към SPI LCD в паралелни мулти задачи и да повиши производителността на възпроизвеждане

Ограничения

  • няма достатъчно вътрешна RAM, за да има буфер с двойна рамка за 320x240 в 16-битов цвят, това ограничава многозадачния дизайн. Той може да преодолее малко с външен PSRAM, въпреки че е по -бавен от вътрешната RAM
  • няма достатъчно процесорна мощ за декодиране на mp4 видео
  • не всички версии на ESP32 имат 2 ядра, извадката с много задачи се възползва само от двуядрената версия

Сравнение:

Стъпка 2: Видео формат

RGB565

Или наречен 16-битов цвят е необработен формат на данни, който обикновено се използва за комуникация между MCU и цветен дисплей. Всеки цветен пиксел, представен от 16-битова стойност, първата 5-битова е червена стойност, следващата 6-битова е зелена стойност и след това 5-битова синя стойност. 16-битовата стойност може да направи вариация на цветовете 65536, така че тя също се нарича 64K цветове. Така 1 минута 320x240 при 30 кадъра в секунда видео ще бъде оразмерено: 16 * 320 * 240 * 30 * 60 = 2211840000 бита = 276480000 байта или над 260 MB

Анимиран GIF

Това е често срещан файлов формат в мрежата от 90 -те години на миналия век. Той ограничава цветовите вариации за всеки екран до 256 цвята и не повтаря съхраняването на пиксела в същия цвят като предишния кадър. Така че той може значително да намали размера на файла, особено когато всяка анимационна рамка не променя твърде много детайли. Компресията LZW е проектирана така, че да може да бъде декодирана от компютър от 90 -те години на миналия век, така че ESP32 също има достатъчно справедлива процесорна мощ, за да я декодира в реално време.

Motion JPEG

Или наречен M-JPEG / MJPEG е общ формат за компресиране на видео за хардуера за заснемане на видео с ограничена процесорна мощност. Всъщност това е просто конкатенация на неподвижни JPEG кадри. Сравнете с MPEG или MP4, Motion JPEG не се нуждае от изчислително интензивна техника за междукадрово предсказване, всеки кадър е независим. Така че изисква по -малко ресурси за кодиране и декодиране.

Реф.:

en.wikipedia.org/wiki/List_of_monochrome_a…

en.wikipedia.org/wiki/GIF

en.wikipedia.org/wiki/Motion_JPEG

Стъпка 3: Аудио формат

PCM

Формат на необработени данни за цифрово аудио. ESP32 DAC използват 16-битова битова дълбочина, което означава, че всяка 16-битова информация представлява цифров дискретизиран аналогов сигнал. Повечето аудио и видео песни често използват честота на дискретизация при 44100 MHz, което означава 44100 анализиран аналогов сигнал за всяка секунда. И така, 1 минута моно аудио PCM необработени данни ще бъдат оразмерени: 16 * 44100 * 60 = 42336000 бита = 5292000 байта или над 5 MB. Размерът на стерео аудиото ще бъде двоен, т.е. над 10 MB

MP3

MPEG Layer 3 е компресиран аудио формат, широко използван за компресиране на песни от 1990 -те години. Той може драстично да намали размера на файла до под една десета от необработения PCM формат

Реф.:

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

en.wikipedia.org/wiki/MP3

Стъпка 4: Форматиране на преобразуване

Този проект използва FFmpeg, конвертира видеото в ESP32 четим формат.

Моля, изтеглете и инсталирайте FFmpeg на официалния им сайт, ако още не:

Конвертирайте в PCM аудио

ffmpeg -i вход.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm

Конвертирайте в MP3 аудио

ffmpeg -i вход.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3

Конвертирайте в RGB565

ffmpeg -i вход.mp4 -vf "fps = 9, мащаб = -1: 176: флагове = lanczos, изрязване = 220: in_h: (in_w -220)/2: 0" -c: v rawvideo -pix_fmt rgb565be 220_9fps. rgb

Конвертиране в анимиран GIF

ffmpeg -i вход.mp4 -vf "fps = 15, мащаб = -1: 176: флагове = lanczos, изрязване = 220: in_h: (in_w -220)/2: 0, разделяне [s0] [s1]; [s0] palettegen [p]; [s1] [p] paletteuse "-oop -1 220_15fps.gif

Конвертирайте в Motion JPEG

ffmpeg -i вход.mp4 -vf "fps = 30, мащаб = -1: 176: флагове = lanczos, изрязване = 220: in_h: (in_w -220)/2: 0" -q: v 9 220_30fps.mjpeg

Забележка:

FFmpeg конвертиран анимиран-g.webp" />

Стъпка 5: Подготовка на хардуера

Подготовка на хардуера
Подготовка на хардуера

ESP32 Dev Board

Всяка двуядрена платка за разработка на ESP32 трябва да е наред, този път използвам TTGO ESP32-Micro.

Цветен дисплей

Всеки цветен дисплей, който поддържа Arduino_GFX, трябва да е наред, този път използвам пробивна платка ILI9225 със слот за SD карта.

Можете да намерите списък с цветен дисплей, поддържан от Arduino_GFX, в Github:

github.com/moononournation/Arduino_GFX

SD карта

Всяка SD карта трябва да е наред, този път използвам SanDisk "нормална скорост" 8 GB micro SD с SD адаптер.

Аудио

Ако искате да използвате само слушалки, просто свържете щифтовете за слушалки към щифт 26 и GND може да слуша звука. Или можете да използвате малък усилвател, за да възпроизвеждате аудио с високоговорител.

Други

Някои макети и проводници

Стъпка 6: SD интерфейс

SD интерфейс
SD интерфейс
SD интерфейс
SD интерфейс

ILI9225 LCD пробивна платка включваше и прекъсващи щифтове за SD crd слот. Може да се използва като SPI шина или 1-битова SD шина. Както бе споменато в предишните ми инструкции, предпочитам да използвам 1-битова SD шина, така че този проект ще се основава на 1-битова SD шина.

Стъпка 7: Сложете го заедно

Сложете го заедно
Сложете го заедно
Сложете го заедно
Сложете го заедно
Сложете го заедно
Сложете го заедно

Горните снимки показват тестовата платформа, която използвам в този проект. Белият макет е 3D отпечатан, можете да го изтеглите и отпечатате на thingiverse:

Действителната връзка зависи от хардуера, който имате под ръка.

Ето резюме на връзката:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> 1k резистор -> 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

Реф.:

Стъпка 8: Програма

Програма
Програма

Arduino IDE

Изтеглете и инсталирайте Arduino IDE, ако все още не сте го направили:

www.arduino.cc/en/main/software

Поддръжка на ESP32

Следвайте инструкциите за инсталиране, за да добавите поддръжка за ESP32, ако все още не го правите:

github.com/espressif/arduino-esp32

Библиотека Arduino_GFX

Изтеглете най -новите библиотеки на Arduino_GFX: (натиснете „Clone or Download“-> „Download ZIP“)

github.com/moononournation/Arduino_GFX

Импортирайте библиотеки в Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> изберете изтегления ZIP файл)

ESP8266 Аудио

Изтеглете най -новите ESP8266Audio библиотеки: (натиснете „Clone or Download“-> „Download ZIP“)

github.com/earlephilhower/ESP8266Audio

Импортирайте библиотеки в Arduino IDE. (Arduino IDE "Sketch" Menu -> "Include Library" -> "Add. ZIP Library" -> изберете изтегления ZIP файл)

RGB565_video Примерен код

Изтеглете най -новия примерен код на RGB565_video: (натиснете „Clone or Download“-> „Download ZIP“)

github.com/moononournation/RGB565_video

Данни от SD карта

Копирайте конвертираните файлове на SD карта и ги поставете в слота за LCD карта

Компилиране и качване

  1. Отворете SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino в Arduino IDE
  2. Ако не използвате ILI9225, променете новия код на класа (около ред 35), за да коригирате името на класа
  3. Натиснете бутона за качване на Arduino IDE
  4. Ако не сте успели да качите програмата, опитайте да прекъснете връзката между ESP32 GPIO 2 и SD D0/MISO
  5. Ако установите, че ориентацията не е правилна, променете стойността на "въртене" (0-3) в новия код на класа
  6. Ако програмата работи добре, можете да опитате друг пример за стартиране със SDMMC_*
  7. Ако нямате слот за SD карта или нямате инсталиран FFmpeg, пак можете да опитате пример SPIFFS_*

Стъпка 9: Бенчмарк

Бенчмарк
Бенчмарк

Ето обобщение на производителността за различни видео (220x176) и аудио (44100 MHz) формат:

Формат Кадър в секунда (fps)
MJPEG + PCM 30
15
RGB565 + PCM 9
MJPEG + MP3 24

Забележка:

  • MJPEG + PCM може да достигне по -високи fps, но не е необходимо да играете на малък екран, по -голям от 30 fps
  • RGB565 не изисква процес на декодиране, но размерът на данните е твърде голям и отнема много време при зареждане на данни от SD, 4-битова SD шина и по-бърза SD карта може да я подобри малко (предположението може да достигне около 12 fps)
  • Процесът на декодиране на MP3 все още не е оптимизиран, сега е посветен ядро 0 за MP3 декодиране и ядро 1 за възпроизвеждане на видео

Стъпка 10: Честита игра

Приятно игра!
Приятно игра!

Сега можете да възпроизвеждате видео и аудио с вашия ESP32, той отключи много възможности!

Мисля, че по -късно ще направя малък винтидж телевизор …

Препоръчано: