2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 12:57
Възпроизвеждане на видео с 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 на официалния им сайт, ако още не:
Всяка двуядрена платка за разработка на 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 интерфейс
ILI9225 LCD пробивна платка включваше и прекъсващи щифтове за SD crd слот. Може да се използва като SPI шина или 1-битова SD шина. Както бе споменато в предишните ми инструкции, предпочитам да използвам 1-битова SD шина, така че този проект ще се основава на 1-битова SD шина.
Стъпка 7: Сложете го заедно
Сложете го заедноСложете го заедноСложете го заедно
Горните снимки показват тестовата платформа, която използвам в този проект. Белият макет е 3D отпечатан, можете да го изтеглите и отпечатате на thingiverse:
Действителната връзка зависи от хардуера, който имате под ръка.
Импортирайте библиотеки в 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, той отключи много възможности!
Мисля, че по -късно ще направя малък винтидж телевизор …
MP3 възпроизвеждане на Sound FX Wall: Създайте забавна и интерактивна звукова стена, която възпроизвежда Mp3 с едно докосване! Какво правите с празна стена? Бихте ли могли да добавите няколко хубави снимки към него? Или го покрийте с цветно стайно растение. Виждали сме дори някои хора да крият голи стени зад книгата
Говорещ Arduino | Възпроизвеждане на MP3 с Arduino без никакъв модул | Възпроизвеждане на Mp3 файл от Arduino с помощта на PCM: В тази инструкция ще се научим как да възпроизвеждаме mp3 файл с arduino, без да използваме аудио модул, тук ще използваме PCM библиотека за Arduino, която възпроизвежда 16 битов PCM с честота 8 kHZ, така че нека направим това
Пускайте песни (MP3) с Arduino, използвайки PWM на високоговорител или Flyback Transformer: Здравейте момчета, това е първият ми инструктаж, надявам се да ви хареса !! По принцип в този проект използвах серийната комуникация между моя Arduino и моя лаптоп, за предаване на музикални данни от моя лаптоп към Arduino. И използвайки таймерите Arduino t
Най -големите притежания: Хакнах стар телефон, за да възпроизвеждам най -голямата музика за задържане .: https: //youtu.be/Ma4QnfQ7DxoWell … Сигурен съм, че не искате телефон, който просто възпроизвежда музика за задържане … Но Има безброй други вълнуващи проекти, които можете да направите с този много елементарен хак на тези лесно достъпни "бюро" телефони
Възпроизвеждане на компактдискове без CD плейър, използване на AI и YouTube: Искате ли да пуснете CD, но нямате повече CD плейър? Не сте имали време да копирате компактдисковете си? Изтрихте ги, но файловете не са налични, когато е необходимо? Няма проблем. Нека AI (изкуствен интелект) идентифицира вашия компактдиск и YouTube да го пусне! Написах приложение за Android, което прави