Spisu treści:
- Krok 1: Funkcje i ograniczenia ESP32
- Krok 2: Format wideo
- Krok 3: Format audio
- Krok 4: Konwersja formatu
- Krok 5: Przygotowanie sprzętu
- Krok 6: Interfejs SD
- Krok 7: Złóż to razem
- Krok 8: Program
- Krok 9: Benchmark
- Krok 10: Miłej gry
Wideo: Odtwórz wideo z ESP32: 10 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-31 10:23
Te instrukcje pokazują coś o odtwarzaniu wideo i audio za pomocą ESP32.
Krok 1: Funkcje i ograniczenia ESP32
Cechy
- 4 magistrale SPI, 2 magistrale SPI dostępne dla przestrzeni użytkownika, są to SPI2 i SPI3 lub nazywane HSPI i VSPI. Obie magistrale SPI mogą pracować z maksymalną częstotliwością 80 MHz. Teoretycznie może przesyłać 16-bitowe kolorowe piksele 320x240 do SPI LCD z szybkością 60 fps, ale jeszcze nie policzył narzutu czasowego wymaganego do odczytu i dekodowania danych wideo.
- 1-bitowa / 4-bitowa magistrala SD może łączyć kartę SD w natywnym protokole
- Wewnętrzne wyjście audio DAC I2S
- ponad 100 KB pamięci RAM dostępnej dla bufora wideo i audio
- Wystarczająca moc przetwarzania do dekodowania JPEG (odtwarzania Motion JPEG) i kompresji danych LZW (odtwarzania animowanego GIF)
- Wersja dwurdzeniowa może dzielić odczytane dane z karty SD, dekodować i przesyłać do SPI LCD na równoległe zadania wielozadaniowe i zwiększać wydajność odtwarzania
Ograniczenia
- niewystarczająca ilość wewnętrznej pamięci RAM, aby mieć podwójny bufor ramki dla 320x240 w 16-bitowym kolorze, ograniczało to projekt wielozadaniowy. Może trochę przezwyciężyć z zewnętrznym PSRAM-em, chociaż jest wolniejszy niż wewnętrzna pamięć RAM
- niewystarczająca moc obliczeniowa do dekodowania wideo mp4
- nie wszystkie wersje ESP32 mają 2 rdzenie, próbka wielozadaniowa przynosi korzyści tylko w wersji dwurdzeniowej
Nr ref.:
Krok 2: Format wideo
RGB565
Lub nazywany kolorem 16-bitowym jest formatem nieprzetworzonych danych powszechnie używanym w komunikacji między MCU a kolorowym wyświetlaczem. Każdy piksel koloru reprezentowany przez wartość 16-bitową, pierwszy 5-bit to wartość czerwona, następny 6-bit to wartość zielona, a następnie 5-bitowa wartość niebieska. Wartość 16-bitowa może dać 65536 wariacji kolorów, więc nazywa się ją również kolorami 64K. Więc 1 minuta 320x240@30 fps będzie miała rozmiar: 16 * 320 * 240 * 30 * 60 = 2211840000 bitów = 276480000 bajtów lub ponad 260 MB
Animowany gif
Jest to popularny format plików w sieci od lat 90. XX wieku. Ogranicza zmienność kolorów dla każdego ekranu do 256 kolorów i nie powtarza przechowywania piksela, który ma taki sam kolor jak poprzednia klatka. Może więc znacznie zmniejszyć rozmiar pliku, zwłaszcza gdy każda klatka animacji nie zmienia zbyt wielu szczegółów. Kompresja LZW jest przystosowana do dekodowania przez komputer z lat 90., więc ESP32 ma również wystarczającą moc obliczeniową, aby dekodować ją w czasie rzeczywistym.
Ruch JPEG
Lub nazywany M-JPEG / MJPEG jest popularnym formatem kompresji wideo dla sprzętu do przechwytywania wideo o ograniczonej mocy obliczeniowej. W rzeczywistości jest to po prostu połączenie nieruchomych ramek JPEG. W porównaniu z MPEG lub MP4, Motion JPEG nie ma potrzeby intensywnej obliczeniowo techniki przewidywania międzyramkowego, każda klatka jest niezależna. Więc wymaga mniej zasobów do kodowania i dekodowania.
Nr ref.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Krok 3: Format audio
PCM
Surowy format danych dla dźwięku cyfrowego. ESP32 DAC wykorzystuje 16-bitową głębię, co oznacza, że każde 16-bitowe dane reprezentują cyfrowy próbkowany sygnał analogowy. Większość audio wideo i piosenek zwykle używa częstotliwości próbkowania 44100 MHz, co oznacza 44100 próbkowanego sygnału analogowego na każdą sekundę. Tak więc, 1-minutowe nieprzetworzone dane audio PCM będą miały rozmiar: 16 * 44100 * 60 = 42336000 bitów = 5292000 bajtów lub ponad 5 MB. Wielkość dźwięku stereo będzie podwojona, czyli ponad 10 MB
MP3
MPEG Layer 3 to skompresowany format audio szeroko stosowany do kompresji utworów od lat 90. XX wieku. Może radykalnie zmniejszyć rozmiar pliku do mniej niż jednej dziesiątej nieprzetworzonego formatu PCM
Nr ref.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Krok 4: Konwersja formatu
Ten projekt używa FFmpeg do konwersji wideo do formatu czytelnego dla ESP32.
Pobierz i zainstaluj FFmpeg na ich oficjalnej stronie, jeśli jeszcze nie:
Konwertuj na dźwięk PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Konwertuj na dźwięk MP3
ffmpeg -i wejście.mp4 -ar 44100 -ac 1 -q:a 9 44100.mp3
Konwertuj na 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
Konwertuj na animowany 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
Konwertuj na 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
Notatka:
Animowany-g.webp" />
Krok 5: Przygotowanie sprzętu
Płytka rozwojowa ESP32
Każda dwurdzeniowa płyta deweloperska ESP32 powinna być w porządku, tym razem używam TTGO ESP32-Micro.
Kolorowy wyświetlacz
Każdy kolorowy wyświetlacz obsługujący Arduino_GFX powinien być w porządku, tym razem używam płytki zaciskowej ILI9225 z gniazdem kart SD.
Listę obsługiwanych kolorów Arduino_GFX można znaleźć na Github:
github.com/mononournation/Arduino_GFX
Karta SD
Każda karta SD powinna być w porządku, tym razem używam karty SanDisk "normalnej szybkości" 8 GB micro SD z adapterem SD.
Audio
Jeśli chcesz używać tylko słuchawek, po prostu podłącz piny słuchawek do pinu 26, a GND może słuchać dźwięku. Możesz też użyć małego wzmacniacza do odtwarzania dźwięku z głośnikiem.
Inni
Niektóre płytki stykowe i przewody do płytek stykowych
Krok 6: Interfejs SD
Płytka zaciskowa ILI9225 LCD zawierała również piny zaciskowe gniazda karty SD. Może być używany jako magistrala SPI lub 1-bitowa magistrala SD. Jak wspomniano w moich poprzednich instrukcjach, wolę używać 1-bitowej magistrali SD, więc ten projekt będzie oparty na 1-bitowej magistrali SD.
Krok 7: Złóż to razem
Powyższe zdjęcia przedstawiają platformę testową, której używam w tym projekcie. Biała płytka prototypowa jest wydrukowana w 3D, możesz ją pobrać i wydrukować na stronie thingiverse:
Rzeczywiste połączenie zależy od posiadanego sprzętu.
Oto podsumowanie połączenia:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> rezystor 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
Nr ref.:
Krok 8: Program
IDE Arduino
Pobierz i zainstaluj Arduino IDE, jeśli jeszcze tego nie zrobiłeś:
www.arduino.cc/en/main/software
Obsługa ESP32
Postępuj zgodnie z instrukcjami instalacji, aby dodać obsługę ESP32, jeśli jeszcze tego nie zrobiłeś:
github.com/espressif/arduino-esp32
Biblioteka Arduino_GFX
Pobierz najnowsze biblioteki Arduino_GFX: (naciśnij "Klonuj lub Pobierz" -> "Pobierz ZIP")
github.com/mononournation/Arduino_GFX
Importuj biblioteki w Arduino IDE. (Menu „Szkic” Arduino IDE -> „Dołącz bibliotekę” -> „Dodaj bibliotekę. ZIP” -> wybierz pobrany plik ZIP)
ESP8266Audio
Pobierz najnowsze biblioteki ESP8266Audio: (naciśnij "Klonuj lub Pobierz" -> "Pobierz ZIP")
github.com/earlephilhower/ESP8266Audio
Importuj biblioteki w Arduino IDE. (Menu Arduino IDE „Sketch” -> „Include Library” -> „Add. ZIP Library” -> wybierz pobrany plik ZIP)
Przykładowy kod RGB565_video
Pobierz najnowszy przykładowy kod RGB565_video: (naciśnij „Klonuj lub Pobierz” -> „Pobierz ZIP”)
github.com/mononournation/RGB565_video
Dane karty SD
Skopiuj przekonwertowane pliki na kartę SD i włóż do gniazda karty LCD
Kompiluj i prześlij
- Otwórz SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino w Arduino IDE
- Jeśli nie używasz ILI9225, zmień nowy kod klasy (około linii 35) na poprawną nazwę klasy
- Naciśnij przycisk „Prześlij” Arduino IDE
- Jeśli nie udało się wgrać programu, spróbuj rozłączyć połączenie między ESP32 GPIO 2 a SD D0/MISO
- Jeśli orientacja nie jest prawidłowa, zmień wartość „rotacji” (0-3) w nowym kodzie zajęć
- Jeśli program działa dobrze, możesz wypróbować inną próbkę, zacznij od SDMMC_*
- Jeśli nie masz gniazda na kartę SD lub nie masz zainstalowanego FFmpeg, nadal możesz wypróbować przykład SPIFFS_*
Krok 9: Benchmark
Oto podsumowanie wydajności dla różnych formatów wideo (220x176) i audio (44100 MHz):
Format | Klatki na sekundę (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Notatka:
- MJPEG + PCM może osiągać wyższe fps, ale jest to niepotrzebne granie na malutkim ekranie większym niż 30 fps
- RGB565 nie wymaga procesu dekodowania, ale rozmiar danych jest zbyt duży i dużo czasu zajmuje ładowanie danych z SD, 4-bitowa szyna SD i szybsza karta SD mogą go nieco poprawić (dzikie zgadywanie może osiągnąć około 12 kl/s)
- Proces dekodowania MP3 nie został jeszcze zoptymalizowany, teraz dedykuje rdzeń 0 do dekodowania MP3 i rdzeń 1 do odtwarzania wideo
Krok 10: Miłej gry
Teraz możesz odtwarzać wideo i audio za pomocą swojego ESP32, odblokowało to wiele możliwości!
Myślę, że później zrobię mały telewizor w stylu vintage…
Zalecana:
Big Wheel - platforma wideo Premiere Pro: 7 kroków (ze zdjęciami)
Big Wheel - Premiere Pro Video Deck: Klawiatury są najlepszymi kontrolerami do gier wideo (walcz ze mną, konsolowi chłopi), ale Premiere Pro wymaga poziomu mocy, dla którego 104 przyciski to za mało. Musimy Super Saiyan w nowej formie - potrzebujemy KNOBS.Ten projekt ma duży, duży wpływ
Zbuduj swojego robota do strumieniowego przesyłania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi: 15 kroków (ze zdjęciami)
Zbuduj swojego robota do strumieniowania wideo sterowanego przez Internet za pomocą Arduino i Raspberry Pi: Jestem @RedPhantom (alias LiquidCrystalDisplay / Itay), 14-letni uczeń z Izraela, uczący się w gimnazjum im. Maxa Sheina dla zaawansowanych nauk ścisłych i matematyki. Tworzę ten projekt, aby wszyscy mogli się od niego uczyć i dzielić
Pierwsze kroki z ESP32 CAM - Przesyłanie strumieniowe wideo za pomocą ESP CAM przez Wifi - Projekt kamery bezpieczeństwa ESP32: 8 kroków
Pierwsze kroki z ESP32 CAM | Przesyłanie strumieniowe wideo za pomocą ESP CAM przez Wifi | Projekt kamery bezpieczeństwa ESP32: Dzisiaj dowiemy się, jak korzystać z tej nowej płyty ESP32 CAM i jak możemy ją zakodować i użyć jako kamery bezpieczeństwa i uzyskać strumieniowe wideo przez Wi-Fi
CribSense: bezdotykowa niania wideo oparta na wideo: 9 kroków (ze zdjęciami)
CribSense: bezdotykowa niania wideo oparta na wideo: CribSense to bezdotykowa niania wideo oparta na wideo, którą możesz wykonać samodzielnie bez rozbijania banku. CribSense to implementacja C++ funkcji powiększenia wideo dostrojona do działania na Raspberry Pi 3 Model B. W ciągu weekendu możesz ustawić własne łóżeczko
Pilot wideo dla maluchów do odtwarzacza wideo na PC: 6 kroków
Toddler Video Remote dla PC Video Player: Buduję pilota, który łączy się z komputerem przez USB. Duży pilot pozwala mojemu maluchowi wybierać i odtwarzać filmy na starym komputerze. To stosunkowo prosty projekt. Podstawowym elementem jest klawiatura USB lub bezprzewodowa klawiatura USB. Następnie