Съдържание:
- Стъпка 1: Функции и ограничения на ESP32
- Стъпка 2: Видео формат
- Стъпка 3: Аудио формат
- Стъпка 4: Форматиране на преобразуване
- Стъпка 5: Подготовка на хардуера
- Стъпка 6: SD интерфейс
- Стъпка 7: Сложете го заедно
- Стъпка 8: Програма
- Стъпка 9: Бенчмарк
- Стъпка 10: Честита игра
Видео: Възпроизвеждане на видео с ESP32: 10 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-31 10:17
Тези инструкции показват нещо за възпроизвеждане на видео и аудио с 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 интерфейс
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 карта
Компилиране и качване
- Отворете SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino в Arduino IDE
- Ако не използвате ILI9225, променете новия код на класа (около ред 35), за да коригирате името на класа
- Натиснете бутона за качване на Arduino IDE
- Ако не сте успели да качите програмата, опитайте да прекъснете връзката между ESP32 GPIO 2 и SD D0/MISO
- Ако установите, че ориентацията не е правилна, променете стойността на "въртене" (0-3) в новия код на класа
- Ако програмата работи добре, можете да опитате друг пример за стартиране със SDMMC_*
- Ако нямате слот за 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, той отключи много възможности!
Мисля, че по -късно ще направя малък винтидж телевизор …
Препоръчано:
Звук FX стена за възпроизвеждане на MP3: 12 стъпки (със снимки)
MP3 възпроизвеждане на Sound FX Wall: Създайте забавна и интерактивна звукова стена, която възпроизвежда Mp3 с едно докосване! Какво правите с празна стена? Бихте ли могли да добавите няколко хубави снимки към него? Или го покрийте с цветно стайно растение. Виждали сме дори някои хора да крият голи стени зад книгата
Говорещ Arduino - Възпроизвеждане на MP3 с Arduino без никакъв модул - Възпроизвеждане на Mp3 файл от Arduino с помощта на PCM: 6 стъпки
Говорещ Arduino | Възпроизвеждане на MP3 с Arduino без никакъв модул | Възпроизвеждане на Mp3 файл от Arduino с помощта на PCM: В тази инструкция ще се научим как да възпроизвеждаме mp3 файл с arduino, без да използваме аудио модул, тук ще използваме PCM библиотека за Arduino, която възпроизвежда 16 битов PCM с честота 8 kHZ, така че нека направим това
Възпроизвеждане на песни (MP3) с Arduino Използване на PWM на високоговорител или Flyback трансформатор: 6 стъпки (със снимки)
Пускайте песни (MP3) с Arduino, използвайки PWM на високоговорител или Flyback Transformer: Здравейте момчета, това е първият ми инструктаж, надявам се да ви хареса !! По принцип в този проект използвах серийната комуникация между моя Arduino и моя лаптоп, за предаване на музикални данни от моя лаптоп към Arduino. И използвайки таймерите Arduino t
Най -големите притежания: Хакнах стар телефон за възпроизвеждане на най -голямата музика за задържане .: 13 стъпки (със снимки)
Най -големите притежания: Хакнах стар телефон, за да възпроизвеждам най -голямата музика за задържане .: https: //youtu.be/Ma4QnfQ7DxoWell … Сигурен съм, че не искате телефон, който просто възпроизвежда музика за задържане … Но Има безброй други вълнуващи проекти, които можете да направите с този много елементарен хак на тези лесно достъпни "бюро" телефони
Възпроизвеждане на компактдискове без CD плейър, използване на AI и YouTube: 10 стъпки (със снимки)
Възпроизвеждане на компактдискове без CD плейър, използване на AI и YouTube: Искате ли да пуснете CD, но нямате повече CD плейър? Не сте имали време да копирате компактдисковете си? Изтрихте ги, но файловете не са налични, когато е необходимо? Няма проблем. Нека AI (изкуствен интелект) идентифицира вашия компактдиск и YouTube да го пусне! Написах приложение за Android, което прави