Оглавление:

Воспроизведение видео с ESP32: 10 шагов (с изображениями)
Воспроизведение видео с ESP32: 10 шагов (с изображениями)

Видео: Воспроизведение видео с ESP32: 10 шагов (с изображениями)

Видео: Воспроизведение видео с ESP32: 10 шагов (с изображениями)
Видео: ESP32-CAM - Быстрый старт 2024, Ноябрь
Anonim
Воспроизвести видео с ESP32
Воспроизвести видео с ESP32

Эти инструкции показывают кое-что о воспроизведении видео и аудио с помощью 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

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 -> резистор 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-карту и вставьте в слот для ЖК-карты.

Скомпилировать и загрузить

  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 МГц):

Формат Кадр в секунду (кадров в секунду)
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, это открыло множество возможностей!

Думаю, позже сделаю крошечный винтажный телевизор …

Рекомендуемые: