Table des matières:
- Étape 1: Fonctionnalités et limitations de l'ESP32
- Étape 2: Format vidéo
- Étape 3: Format audio
- Étape 4: Conversion de format
- Étape 5: Préparation du matériel
- Étape 6: Interface SD
- Étape 7: Assemblez-le
- Étape 8: programmer
- Étape 9: Analyse comparative
- Étape 10: Bon jeu
Vidéo: Lire la vidéo avec ESP32 : 10 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-31 10:19
Ces Instructables montrent quelque chose sur la lecture vidéo et audio avec ESP32.
Étape 1: Fonctionnalités et limitations de l'ESP32
Caractéristiques
- 4 bus SPI, 2 bus SPI disponibles pour l'espace utilisateur, ce sont SPI2 et SPI3 ou appelés HSPI et VSPI. Les deux bus SPI peuvent fonctionner au maximum à 80 MHz. Théoriquement, il peut envoyer 320 x 240 pixels de couleur 16 bits vers l'écran LCD SPI à 60 ips, mais il n'a pas encore compté le temps nécessaire à la lecture et au décodage des données vidéo.
- Le bus SD 1 bit/4 bits peut connecter une carte SD en protocole natif
- Sortie audio DAC interne I2S
- plus de 100 Ko de RAM disponibles pour la mémoire tampon vidéo et audio
- Puissance de traitement suffisante pour décoder le JPEG (lire le Motion JPEG) et la compression de données LZW (lire le-g.webp" />
- La version double cœur peut diviser les données de lecture de la carte SD, décoder et pousser vers l'écran LCD SPI en multi-tâches parallèles et améliorer les performances de lecture
Limites
- pas assez de RAM interne pour avoir un double frame buffer pour 320x240 en couleur 16 bits, cela a limité la conception multitâche. Il peut surmonter un peu avec la PSRAM externe bien qu'il soit plus lent que la RAM interne
- pas assez de puissance de traitement pour décoder la vidéo mp4
- toutes les versions ESP32 n'ont pas 2 cœurs, l'échantillon multitâche ne profite que sur la version double cœur
Réf.:
Étape 2: Format vidéo
RVB565
Ou appelé couleur 16 bits est un format de données brutes couramment utilisé sur la communication entre le MCU et l'affichage couleur. Chaque pixel de couleur représenté par une valeur de 16 bits, le premier 5 bits est la valeur rouge, les 6 bits suivants sont la valeur verte, puis la valeur bleue 5 bits. La valeur 16 bits peut créer une variation de couleur de 65536, elle est donc également appelée couleurs 64K. Donc 1 minute de vidéo 320x240@30 fps sera dimensionnée: 16 * 320 * 240 * 30 * 60 = 2211840000 bits = 276480000 octets ou plus de 260 Mo
Il s'agit d'un format de fichier courant sur le Web depuis les années 1990. Il limite la variation de couleur pour chaque écran jusqu'à 256 couleurs et ne répète pas le stockage du pixel de la même couleur que l'image précédente. Cela peut donc réduire considérablement la taille du fichier, surtout lorsque chaque image d'animation ne change pas trop de détails. La compression LZW est conçue pour être décodée par un ordinateur des années 1990, de sorte que l'ESP32 dispose également d'une puissance de traitement suffisante pour la décoder en temps réel.
Motion JPEG
Ou appelé M-JPEG / MJPEG est un format de compression vidéo courant pour le matériel de capture vidéo avec une puissance de traitement limitée. Il s'agit en fait simplement d'une concaténation d'images JPEG fixes. Comparez avec MPEG ou MP4, Motion JPEG n'a pas besoin de technique de prédiction inter-images gourmande en calculs, chaque image est indépendante. Il nécessite donc moins de ressources pour coder et décoder.
Réf.:
en.wikipedia.org/wiki/List_of_monochrome_a…
en.wikipedia.org/wiki/GIF
en.wikipedia.org/wiki/Motion_JPEG
Étape 3: Format audio
PCM
Un format de données brutes pour l'audio numérique. Le DAC ESP32 utilise une profondeur de bits de 16 bits, ce qui signifie que chaque donnée de 16 bits représente un signal analogique échantillonné numériquement. La plupart des vidéos et des morceaux audio utilisent généralement une fréquence d'échantillonnage de 44 100 MHz, ce qui signifie un signal analogique échantillonné à 44 100 par seconde. Ainsi, 1 minute de données brutes PCM audio mono sera dimensionnée: 16 * 44100 * 60 = 42336000 bits = 5292000 octets ou plus de 5 Mo. La taille de l'audio stéréo sera double, soit plus de 10 Mo
MP3
MPEG Layer 3 est un format audio compressé largement utilisé pour la compression de chansons depuis les années 1990. Il peut réduire considérablement la taille du fichier à moins d'un dixième du format PCM brut
Réf.:
en.wikipedia.org/wiki/Pulse-code_modulatio…
en.wikipedia.org/wiki/MP3
Étape 4: Conversion de format
Ce projet utilise FFmpeg pour convertir la vidéo au format lisible ESP32.
Veuillez télécharger et installer FFmpeg sur leur site officiel si ce n'est pas encore fait:
Convertir en audio PCM
ffmpeg -i input.mp4 -f u16be -acodec pcm_u16le -ar 44100 -ac 1 44100_u16le.pcm
Convertir en audio MP3
ffmpeg -i input.mp4 -ar 44100 -ac 1 -q:a 9 44100.mp3
Convertir en 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. RVB
Convertir en-g.webp
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
Convertir en 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
Noter:
Le-g.webp" />
Étape 5: Préparation du matériel
Carte de développement ESP32
Toute carte de développement ESP32 double cœur devrait être ok, cette fois j'utilise un TTGO ESP32-Micro.
Affichage couleur
Tout écran couleur pris en charge par Arduino_GFX devrait être ok, cette fois j'utilise une carte de dérivation ILI9225 avec un emplacement pour carte SD.
Vous pouvez trouver la liste d'affichage des couleurs prise en charge par Arduino_GFX sur Github:
github.com/moononournation/Arduino_GFX
Carte SD
N'importe quelle carte SD devrait être ok, cette fois j'utilise une micro SD SanDisk "à vitesse normale" de 8 Go avec adaptateur SD.
l'audio
Si vous souhaitez utiliser uniquement un casque, connectez simplement les broches du casque à la broche 26 et GND peut écouter l'audio. Ou vous pouvez utiliser un petit amplificateur pour lire de l'audio avec un haut-parleur.
Autres
Certaines planches à pain et fils de planche à pain
Étape 6: Interface SD
La carte de dérivation LCD ILI9225 comprend également des broches de dérivation pour fente SD. Il peut être utilisé comme bus SPI ou bus SD 1 bit. Comme mentionné dans mes instructables précédentes, je préfère utiliser un bus SD 1 bit, donc ce projet sera basé sur un bus SD 1 bit.
Étape 7: Assemblez-le
Les images ci-dessus montrent la plate-forme de test que j'utilise dans ce projet. La planche à pain blanche est imprimée en 3D, vous pouvez la télécharger et l'imprimer sur thingverse:
La connexion réelle dépend du matériel que vous avez en main.
Voici le résumé de la connexion:
ESP32
Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> résistance 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
Réf.:
Étape 8: programmer
IDE Arduino
Téléchargez et installez Arduino IDE si vous ne l'êtes pas encore:
www.arduino.cc/en/main/software
Prise en charge ESP32
Suivez les instructions d'installation pour ajouter le support ESP32 si vous ne le faites pas encore:
github.com/espressif/arduino-esp32
Bibliothèque Arduino_GFX
Téléchargez les dernières bibliothèques Arduino_GFX: (appuyez sur "Cloner ou Télécharger" -> "Télécharger ZIP")
github.com/moononournation/Arduino_GFX
Importez des bibliothèques dans Arduino IDE. (Menu "Sketch" de l'IDE Arduino -> "Inclure la bibliothèque" -> "Ajouter une bibliothèque. ZIP" -> sélectionnez le fichier ZIP téléchargé)
ESP8266Audio
Téléchargez les dernières bibliothèques ESP8266Audio: (appuyez sur "Cloner ou Télécharger" -> "Télécharger ZIP")
github.com/earlephilhower/ESP8266Audio
Importez des bibliothèques dans Arduino IDE. (Menu "Sketch" Arduino IDE -> "Inclure la bibliothèque" -> "Ajouter une bibliothèque. ZIP" -> sélectionnez le fichier ZIP téléchargé)
Exemple de code RGB565_video
Téléchargez le dernier exemple de code RGB565_video: (appuyez sur "Cloner ou Télécharger" -> "Télécharger ZIP")
github.com/moononournation/RGB565_video
Données de la carte SD
Copiez les fichiers convertis sur la carte SD et insérez-les dans la fente pour carte LCD
Compiler et télécharger
- Ouvrez SDMMC_MJPEG_video_PCM_audio_dualSPI_multitask.ino dans Arduino IDE
- Si vous n'utilisez pas ILI9225, modifiez le nouveau code de classe (autour de la ligne 35) pour corriger le nom de la classe
- Appuyez sur le bouton "Télécharger" de l'IDE Arduino
- Si vous n'avez pas réussi à télécharger le programme, essayez de détacher la connexion entre ESP32 GPIO 2 et SD D0/MISO
- Si vous trouvez que l'orientation n'est pas correcte, modifiez la valeur de "rotation" (0-3) dans le nouveau code de classe
- Si le programme fonctionne bien, vous pouvez essayer d'autres exemples en commençant par SDMMC_*
- Si vous n'avez pas d'emplacement pour carte SD ou si FFmpeg n'est pas installé, vous pouvez toujours essayer l'exemple SPIFFS_*
Étape 9: Analyse comparative
Voici le résumé des performances pour différents formats vidéo (220x176) et audio (44100 MHz):
Format | Image par seconde (fps) |
MJPEG + PCM | 30 |
15 | |
RGB565 + PCM | 9 |
MJPEG + MP3 | 24 |
Noter:
- MJPEG + PCM peut atteindre des fps plus élevés mais il est inutile de jouer dans un petit écran supérieur à 30 fps
- RGB565 ne nécessite pas de processus de décodage, mais la taille des données est trop importante et beaucoup de temps est consommé pour charger les données à partir d'une carte SD, un bus SD 4 bits et une carte SD plus rapide peuvent l'améliorer un peu (la supposition peut atteindre environ 12 fps)
- Processus de décodage MP3 pas encore optimisé, il est désormais dédié au core 0 pour le décodage MP3 et au core 1 pour la lecture de vidéo
Étape 10: Bon jeu
Vous pouvez désormais lire de la vidéo et de l'audio avec votre ESP32, cela a débloqué de nombreuses possibilités !
Je pense que je ferai une petite télé vintage plus tard…
Conseillé:
UK Ring Video Doorbell Pro fonctionnant avec un carillon mécanique : 6 étapes (avec photos)
UK Ring Video Doorbell Pro fonctionnant avec un carillon mécanique : ****************************************** ***************Veuillez noter que cette méthode ne fonctionne qu'avec l'alimentation secteur pour le moment. Je mettrai à jour si/quand je trouverai une solution pour les sonnettes utilisant l'alimentation CC. fourniture, vous aurez besoin de t
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi : 15 étapes (avec photos)
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi : je suis @RedPhantom (alias LiquidCrystalDisplay / Itay), un étudiant de 14 ans originaire d'Israël qui étudie à l'école secondaire Max Shein pour les sciences avancées et les mathématiques. Je fais ce projet pour que tout le monde puisse apprendre et partager! Vous avez peut-être pensé
Premiers pas avec ESP32 CAM - Streaming vidéo en utilisant ESP CAM sur Wifi - Projet de caméra de sécurité ESP32 : 8 étapes
Premiers pas avec ESP32 CAM | Streaming vidéo en utilisant ESP CAM sur Wifi | Projet de caméra de sécurité ESP32 : aujourd'hui, nous allons apprendre à utiliser cette nouvelle carte ESP32 CAM et comment nous pouvons la coder et l'utiliser comme caméra de sécurité et obtenir une vidéo en streaming via wifi
Piratage du tuner TV pour lire les photos de la Terre à partir de satellites : 7 étapes (avec photos)
Piratage du tuner TV pour lire les photos de la Terre à partir des satellites : Il y a beaucoup de satellites au-dessus de nos têtes. Saviez-vous qu'en utilisant uniquement votre ordinateur, votre tuner TV et une simple antenne de bricolage, vous pouviez recevoir les transmissions d'eux ? Par exemple, des images de la terre en temps réel. Je vais vous montrer comment. Vous aurez besoin de : - 2 w
Construisez votre propre robot majordome !!! - Tutoriel, photos et vidéo : 58 étapes (avec photos)
Construisez votre propre robot majordome !!! - Tutoriel, photos et vidéo : EDIT : Plus d'informations sur mes projets, consultez mon nouveau site Web : narobo.com Je fais également du conseil pour des projets/produits de robotique, de mécatronique et d'effets spéciaux. Consultez mon site Web - narobo.com pour plus de détails. Vous avez toujours voulu un robot majordome qui vous parle