2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:02
Odtwórz wideo z ESP32
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:
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
Interfejs SDInterfejs 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
Złóż to razemZłóż to razemZłóż 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.
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
Reper
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
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…
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 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: 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: 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
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