فهرست مطالب:

پخش ویدئو با ESP32: 10 مرحله (همراه با تصاویر)
پخش ویدئو با ESP32: 10 مرحله (همراه با تصاویر)

تصویری: پخش ویدئو با ESP32: 10 مرحله (همراه با تصاویر)

تصویری: پخش ویدئو با ESP32: 10 مرحله (همراه با تصاویر)
تصویری: How to setup and use ESP32 Cam with Micro USB WiFi Camera 2024, نوامبر
Anonim
پخش ویدئو با ESP32
پخش ویدئو با ESP32

این دستورالعمل ها چیزی در مورد پخش ویدئو و صدا با ESP32 نشان می دهد.

مرحله 1: ویژگی ها و محدودیت های ESP32

امکانات

  • 4 گذرگاه SPI ، 2 گذرگاه SPI برای فضای کاربر در دسترس است ، آنها SPI2 و SPI3 هستند یا HSPI و VSPI نامیده می شوند. هر دو گذرگاه SPI می توانند حداکثر 80 مگاهرتز کار کنند. از لحاظ تئوری می تواند پیکسل های رنگی 320x240 16 بیتی را با سرعت 60 فریم بر ثانیه به SPI LCD منتقل کند ، اما هنوز زمان سربار مورد نیاز برای خواندن و رمزگشایی داده های ویدئو را محاسبه نکرده است.
  • گذرگاه 1 بیت / 4 بیت SD می تواند کارت SD را در پروتکل اصلی متصل کند
  • خروجی داخلی DAC I2S
  • بیش از 100 کیلوبایت RAM برای بافر تصویری و صوتی موجود است
  • قدرت پردازش کافی برای رمزگشایی JPEG (پخش Motion JPEG) و فشرده سازی داده LZW (پخش-g.webp" />
  • نسخه دو هسته ای می تواند داده های خوانده شده را از کارت SD تقسیم کرده ، رمزگشایی کرده و به LCD 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 مگابایت

این یک قالب فایل رایج در وب از دهه 1990 است. تنوع رنگ را برای هر صفحه تا 256 رنگ محدود می کند و پیکسل را به همان رنگ قاب قبلی ذخیره نمی کند. بنابراین می تواند حجم فایل را بسیار کاهش دهد ، به ویژه هنگامی که هر فریم متحرک جزئیات زیادی را تغییر ندهد. فشرده سازی LZW قادر به رمزگشایی توسط کامپیوترهای دهه 1990 است ، بنابراین ESP32 همچنین دارای قدرت پردازش کافی برای رمزگشایی آن در زمان واقعی است.

حرکت JPEG

یا M-JPEG / MJPEG فرمت فشرده سازی رایج رایانه برای سخت افزار ضبط ویدئو با قدرت پردازش محدود است. این در واقع ترکیبی از فریم های JPEG است. در مقایسه با MPEG یا MP4 ، Motion JPEG بدون نیاز به تکنیک محاسباتی فشرده پیش بینی interframe ، هر فریم مستقل است. بنابراین برای رمزگذاری و رمزگشایی به منابع کمتری نیاز است.

مرجع.:

fa.wikipedia.org/wiki/List_of_monochrome_a…

fa.wikipedia.org/wiki/GIF

fa.wikipedia.org/wiki/Motion_JPEG

مرحله 3: قالب صوتی

PCM

یک فرمت داده خام برای صدای دیجیتال. ESP32 DAC از عمق 16 بیتی استفاده می کند ، به این معنی که هر داده 16 بیتی یک سیگنال آنالوگ نمونه دیجیتال را نشان می دهد. بیشتر صدا های تصویری و آهنگ معمولاً از نرخ نمونه در 44100 مگاهرتز استفاده می کنند ، این بدان معناست که 44100 سیگنال آنالوگ نمونه برداری شده در هر ثانیه است. بنابراین ، داده های خام 1 دقیقه تک صدا PCM اندازه خواهند شد: 16 * 44100 * 60 = 42336000 بیت = 5292000 بایت یا بیش از 5 مگابایت. حجم صدای استریو دو برابر خواهد بود ، یعنی بیش از 10 مگابایت

MP3

MPEG Layer 3 یک فرمت صوتی فشرده است که از دهه 1990 به طور گسترده برای فشرده سازی آهنگ استفاده می شود. این می تواند به طور چشمگیری حجم فایل را به کمتر از یک دهم فرمت PCM خام کاهش دهد

مرجع.:

fa.wikipedia.org/wiki/Pulse-code_modulatio…

fa.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

تبدیل به-g.webp

ffmpeg -i input.mp4 -vf "fps = 15 ، scale = -1: 176: flags = lanczos ، crop = 220: in_h: (in_w -220)/2: 0 ، تقسیم [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

توجه داشته باشید:

FFmpeg متحرک-g.webp" />

مرحله 5: آماده سازی سخت افزار

آماده سازی سخت افزار
آماده سازی سخت افزار

ESP32 Dev Board

هر برد دو هسته ای ESP32 dev باید خوب باشد ، این بار من از TTGO ESP32-Micro استفاده می کنم.

نمایش رنگی

هر صفحه نمایش رنگی که از Arduino_GFX پشتیبانی می کند باید خوب باشد ، این بار من از یک برد شکست ILI9225 با شکاف کارت SD استفاده می کنم.

شما می توانید لیست نمایش رنگ Arduino_GFX را در Github پیدا کنید:

github.com/moononournation/Arduino_GFX

کارت SD

هر کارت SD باید خوب باشد ، این بار من از یک کارت حافظه microSD SanDisk 8 گیگابایتی با آداپتور SD استفاده می کنم.

سمعی

اگر می خواهید فقط از هدفون استفاده کنید ، به سادگی پین های هدفون را به پین 26 وصل کنید و GND می تواند صدا را بشنود. یا می توانید از یک تقویت کننده کوچک برای پخش صدا با بلندگو استفاده کنید.

دیگران

برخی از تخته های نان و سیم های تخته نان

مرحله 6: رابط SD

رابط SD
رابط SD
رابط SD
رابط SD

برد بریکت ILI9225 LCD همچنین شامل پین های برک آوت شکاف SD crd بود. می توان از آن به عنوان گذرگاه SPI یا گذرگاه 1 بیتی SD استفاده کرد. همانطور که در دستورالعمل های قبلی من ذکر شد ، من ترجیح می دهم از گذرگاه 1 بیتی SD استفاده کنم ، بنابراین این پروژه بر روی گذرگاه 1 بیتی SD قرار می گیرد.

مرحله 7: آن را کنار هم قرار دهید

آن را سرهم کن
آن را سرهم کن
آن را سرهم کن
آن را سرهم کن
آن را سرهم کن
آن را سرهم کن

تصاویر بالا سکوی آزمایشی را که در این پروژه استفاده می کنم نشان می دهد. صفحه نان سفید چاپ سه بعدی است ، می توانید آن را در thingiverse بارگیری و چاپ کنید:

اتصال واقعی بستگی به سخت افزاری دارد که در دست دارید.

در اینجا خلاصه اتصال است:

ESP32

Vcc -> LCD Vcc GND -> LCD GND GPIO 2 -> SD D0/MISO -> مقاومت 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

Ref.:

مرحله 8: برنامه

برنامه
برنامه

آردوینو IDE

اگر هنوز Arduino IDE را انجام نداده اید بارگیری و نصب کنید:

www.arduino.cc/fa/main/software

پشتیبانی از ESP32

اگر هنوز این کار را انجام نداده اید ، دستورالعمل های نصب را برای افزودن پشتیبانی ESP32 دنبال کنید:

github.com/espressif/arduino-esp32

کتابخانه Arduino_GFX

بارگیری آخرین کتابخانه های Arduino_GFX: ("Clone or Download" -> "Download ZIP" را فشار دهید)

github.com/moononournation/Arduino_GFX

وارد کردن کتابخانه ها در Arduino IDE. (منوی Arduino IDE "Sketch" -> "Include Library" -> "Add. ZIP Library" -> انتخاب فایل ZIP بارگیری شده)

ESP8266 صدا

بارگیری آخرین کتابخانه های ESP8266Audio: ("Clone or Download" -> "Download ZIP" را فشار دهید)

github.com/earlephilhower/ESP8266Audio

وارد کردن کتابخانه ها در Arduino IDE. (منوی Arduino IDE "Sketch" -> "Include Library" -> "Add. ZIP Library" -> انتخاب فایل ZIP بارگیری شده)

کد نمونه RGB565_video

بارگیری آخرین کد نمونه RGB565_video: ("Clone or Download" -> "Download ZIP" را فشار دهید)

github.com/moononournation/RGB565_video

داده های کارت SD

فایلهای تبدیل شده را به کارت SD کپی کرده و در شکاف کارت LCD قرار دهید

کامپایل و بارگذاری

  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. اگر متوجه شدید که جهت گیری درست نیست ، مقدار "rotation" (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 را برای پخش ویدئو اختصاص داده است

مرحله دهم: بازی خوشحالم

بازی مبارک!
بازی مبارک!

اکنون می توانید ویدئو و صدا را با ESP32 خود پخش کنید ، بسیاری از امکانات را باز کرد!

فکر می کنم بعداً یک تلویزیون کوچک قدیمی بسازم…

توصیه شده: