Оглавление:
- Шаг 1. Функции и ограничения ESP32
- Шаг 2: формат видео
- Шаг 3: аудиоформат
- Шаг 4: преобразование формата
- Шаг 5: Подготовка оборудования
- Шаг 6: интерфейс SD
- Шаг 7. Соберите все вместе
- Шаг 8: программа
- Шаг 9: оценка
- Шаг 10: Удачной игры
Видео: Воспроизведение видео с ESP32: 10 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
Эти инструкции показывают кое-что о воспроизведении видео и аудио с помощью ESP32.
Шаг 1. Функции и ограничения ESP32
Функции
- 4 шины SPI, 2 шины SPI доступны для пользовательского пространства, они SPI2 и SPI3 или называются HSPI и VSPI. Обе шины SPI могут работать максимум на 80 МГц. Теоретически он может передавать 320x240 16-битных цветных пикселей на SPI LCD со скоростью 60 кадров в секунду, но он еще не подсчитал время, необходимое для чтения и декодирования видеоданных.
- 1-битная / 4-битная шина SD может подключать SD-карту в собственном протоколе
- Аудиовыход внутреннего ЦАП I2S
- более 100 КБ ОЗУ доступно для видео и аудио буфера
- Достаточная вычислительная мощность для декодирования JPEG (воспроизведение Motion JPEG) и сжатия данных LZW (воспроизведение анимированного GIF)
- Двухъядерная версия может разделять считанные данные с SD-карты, декодировать и передавать на ЖК-дисплей SPI на параллельные многозадачные операции и повышать производительность воспроизведения.
Ограничения
- недостаточно внутренней 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 МБ.
Анимированный GIF
Это распространенный формат файлов в Интернете с 1990-х годов. Он ограничивает изменение цвета для каждого экрана до 256 цветов и не сохраняет повторно пиксель того же цвета, что и предыдущий кадр. Таким образом, это может значительно уменьшить размер файла, особенно когда каждый кадр анимации не меняет слишком много деталей. Сжатие LZW способно декодировать компьютер 1990-х годов, поэтому 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 использует 16-битную глубину, что означает, что каждые 16-битные данные представляют собой цифровой дискретизированный аналоговый сигнал. Большинство видео и аудио песен обычно используют частоту дискретизации 44100 МГц, что означает 44100 дискретизированных аналоговых сигналов в секунду. Таким образом, 1-минутные необработанные данные моно аудио PCM будут иметь размер: 16 * 44100 * 60 = 42336000 бит = 5292000 байт или более 5 МБ. Размер стереозвука увеличится вдвое, то есть более 10 МБ.
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 input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Конвертировать в MP3 аудио
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q: a 9 44100.mp3
Конвертировать в 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
Преобразовать в анимированный 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
Конвертировать в 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
Примечание:
Анимированный GIF, преобразованный в FFmpeg, может быть дополнительно оптимизирован некоторыми веб-инструментами; вы можете выполнить поиск в оптимизаторе GIF, чтобы найти его
Шаг 5: Подготовка оборудования
Совет разработчиков ESP32
Любая двухъядерная плата разработчика ESP32 должна быть в порядке, на этот раз я использую TTGO ESP32-Micro.
Цветной дисплей
Подойдет любой цветной дисплей, поддерживаемый Arduino_GFX, на этот раз я использую коммутационную плату ILI9225 со слотом для SD-карты.
Вы можете найти список поддерживаемых цветов Arduino_GFX на Github:
github.com/moononournation/Arduino_GFX
SD Card
Любая SD-карта должна быть в порядке, на этот раз я использую карту памяти SanDisk «нормальной скорости» 8 ГБ с адаптером 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 -> резистор 1 кОм -> 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: программа
IDE Arduino
Загрузите и установите Arduino IDE, если вы еще этого не сделали:
www.arduino.cc/en/main/software
Поддержка ESP32
Следуйте инструкциям по установке, чтобы добавить поддержку ESP32, если вы еще этого не сделали:
github.com/espressif/arduino-esp32
Библиотека Arduino_GFX
Загрузите последние библиотеки Arduino_GFX: (нажмите «Клонировать или загрузить» -> «Загрузить ZIP»)
github.com/moononournation/Arduino_GFX
Импортируйте библиотеки в Arduino IDE. (Меню «Скетч» в Arduino IDE -> «Включить библиотеку» -> «Добавить библиотеку. ZIP» -> выбрать загруженный ZIP-файл)
ESP8266Аудио
Загрузите последние библиотеки ESP8266Audio: (нажмите "Клонировать или загрузить" -> "Загрузить ZIP")
github.com/earlephilhower/ESP8266Audio
Импортируйте библиотеки в Arduino IDE. (Меню «Скетч» в Arduino IDE -> «Включить библиотеку» -> «Добавить библиотеку. ZIP» -> выбрать загруженный ZIP-файл)
RGB565_video Пример кода
Загрузите последний пример кода RGB565_video: (нажмите «Клонировать или загрузить» -> «Загрузить ZIP»)
github.com/moononournation/RGB565_video
Данные SD-карты
Скопируйте преобразованные файлы на SD-карту и вставьте в слот для ЖК-карты.
Скомпилировать и загрузить
- Откройте 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 МГц):
Формат | Кадр в секунду (кадров в секунду) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Примечание:
- MJPEG + PCM может достигать более высоких кадров в секунду, но это ненужное воспроизведение на крошечном экране со скоростью более 30 кадров в секунду.
- RGB565 не требует процесса декодирования, но размер данных слишком велик, и много времени, затрачиваемого на загрузку данных с SD, 4-битная шина SD и более быстрая SD-карта могут немного улучшить его (предположение может достигать около 12 кадров в секунду)
- Процесс декодирования MP3 еще не оптимизирован, теперь ядро 0 предназначено для декодирования MP3, а ядро 1 - для воспроизведения видео.
Шаг 10: Удачной игры
Теперь вы можете воспроизводить видео и аудио с помощью ESP32, это открыло множество возможностей!
Думаю, позже сделаю крошечный винтажный телевизор …
Рекомендуемые:
Воспроизведение MP3 Sound FX Wall: 12 шагов (с изображениями)
Воспроизведение MP3 Sound FX Wall: создайте забавную интерактивную звуковую стену, которая воспроизводит MP3-файлы простым прикосновением! Что делать с пустой стеной? Вы могли бы добавить к нему несколько красивых картинок? Или накройте его разноцветным домашним растением. Мы даже видели, как некоторые люди прячут голые стены за книгой
Говорящий Ардуино - Воспроизведение MP3 с помощью Arduino без какого-либо модуля - Воспроизведение файла Mp3 из Arduino с использованием PCM: 6 шагов
Говорящий Ардуино | Воспроизведение MP3 с помощью Arduino без какого-либо модуля | Воспроизведение файла Mp3 из Arduino с использованием PCM: в этой инструкции мы узнаем, как воспроизводить файл MP3 с помощью Arduino без использования какого-либо аудиомодуля, здесь мы будем использовать библиотеку PCM для Arduino, которая воспроизводит 16-битный PCM с частотой 8 кГц, поэтому давайте сделаем это
Bluetooth Speaker Hack - потоковое воспроизведение в домашнем кинотеатре: 8 шагов (с изображениями)
Bluetooth Speaker Hack - Домашний кинотеатр Streaming: в этом руководстве подробно описывается взлом готовой Bluetooth-колонки и мерцающей светодиодной чайной лампочки, чтобы стать потоковым интерфейсом для вашей системы домашнего кинотеатра, сохранив при этом первоначальную функциональность Bluetooth-динамика. Я был
Воспроизведение песен (MP3) с помощью Arduino с использованием ШИМ на динамике или обратном преобразователе: 6 шагов (с изображениями)
Воспроизведение песен (MP3) с помощью Arduino с использованием ШИМ на динамике или обратном преобразователе: Здравствуйте, ребята, это моя первая инструкция, я надеюсь, вам понравится !! По сути, в этом проекте я использовал последовательную связь между моим Arduino и моим ноутбуком, для передачи музыкальных данных с моего ноутбука на Arduino. И используя ТАЙМЕРЫ Arduino t
Воспроизведение видео в обратном направлении с помощью Quicktime Player: 5 шагов
Воспроизведение видео в обратном направлении с помощью Quicktime Player: это самый замечательный трюк века. Это руководство показывает вам простой способ воспроизводить видео в обратном направлении, не загружая изворотливые программы (если у вас нет Quicktime, вам это понадобится). Изображение не имеет ничего общего с делаю с проектом, но мне нужно