【ITニュース解説】Live Streaming to Amazon IVS on an ESP32 Microcontroller with Embedded Sensor Metadata
2025年09月19日に「Dev.to」が公開したITニュース「Live Streaming to Amazon IVS on an ESP32 Microcontroller with Embedded Sensor Metadata」について初心者にもわかりやすく解説しています。
ITニュース概要
新型ESP32-P4ボードは高性能CPUとH.264エンコーダーを搭載し、従来の課題を解決し高品質なライブストリーミングを実現した。Amazon IVSと連携させ、フルHD映像のリアルタイム配信に加え、センサーデータを映像内に埋め込む技術も開発した。
ITニュース解説
従来の組み込みデバイスにおけるライブストリーミングは、その品質と性能に大きな制約があった。例えば、一般的なESP32-CAMボードでは、320x240のような低解像度で、毎秒5〜15フレームという低いフレームレートのMJPEG画像をRTSPプロトコルで配信するのがやっとだった。これは、従来のマイクロコントローラが、現代のビデオコーデックを使った本格的な映像処理に必要なCPUパワーやメモリを十分に持っていなかったためである。高品質な映像配信には、より複雑な圧縮技術や高速なデータ処理が求められ、既存のデバイスでは対応が難しかった。
しかし、Espressif社が「ESP32-P4-Function-EV-Board」をリリースしたことで、この状況は一変した。この新しいボードは、デュアルコア400MHzのRISC-Vプロセッサと32MBのPSRAMを搭載しており、これが大きな進化の基盤となっている。そして最も重要な革新は、1080P解像度で毎秒30フレームのストリーミングを可能にするハードウェアH.264エンコーダを内蔵している点だ。これにより、ソフトウェアだけで映像を圧縮するのではなく、専用のハードウェアが高速かつ効率的に映像を処理できるようになり、これまでの組み込みデバイスでは実現不可能だった高画質のライブストリーミングが現実のものとなった。このボードは、まさにゲームチェンジャーと呼べる存在である。
このESP32-P4-Function-EV-Boardは、単なるマイクロコントローラという枠を超えた、完全なマルチメディア開発プラットフォームとして設計されている。その見た目は、より高性能な小型コンピュータであるRaspberry Piを思わせるほど、従来の小型なESP32ボードよりも一回り大きい。これは、内蔵された高性能なコンポーネントを収めるためには当然のサイズアップと言える。具体的なスペックを見ると、デュアルコア400MHz RISC-Vプロセッサと32MB PSRAMに加え、先述のハードウェアH.264ビデオエンコーダにより1920x1080のフルHDビデオを毎秒25フレームで扱うことができる。また、MIPI-CSIカメラインターフェース(2MPカメラが付属)やMIPI-DSIディスプレイ出力(7インチ1024x600タッチスクリーンが付属)を備え、高画質な映像入出力が可能だ。通信面では、ESP32-C6モジュールを介したWi-Fi 6とBluetooth 5 LE、さらに10/100 Ethernetポートによる有線ネットワーク接続にも対応し、安定したデータ通信を実現する。加えて、デュアルUSB 2.0ポート、プロフェッショナルなオーディオシステム(コーデック、マイク、3Wアンプ内蔵)、40ピンのGPIOヘッダーによるセンサーや周辺機器の拡張性、MicroSDカードスロットによるストレージ拡張、そしてUSB Serial/JTAGデバッグ機能まで備えている。これにより、従来のESP32では複数のボードやコンポーネントを組み合わせる必要があったような、プロフェッショナルグレードのビデオ、オーディオ、接続機能をこれ一つで実現できるようになった。付属の2MPカメラの色の表現については、若干の改善の余地があるものの、その高い解像度と低遅延の性能は非常に優れている。
しかし、いくら優れたハードウェアがあっても、その性能を最大限に引き出し、エンコードされたH.264ストリームを適切な宛先に送信するためのソフトウェアライブラリがなければ意味がない。この点もEspressif社は抜かりなく、「esp-webrtc-solution」ライブラリを提供している。このライブラリは、この新しいハードウェアの能力を活かし、映像ストリームを効率的に処理し、配信するための重要な役割を担っている。筆者は、この新しいボードとライブラリを使って、Amazonが提供するマネージドライブストリーミングサービスである「Amazon IVS(Interactive Video Service)」のリアルタイムステージへの配信を試みた。
Amazon IVSのリアルタイムステージは、WebRTC-HTTP Ingestion Protocol (WHIP) をサポートしているため、筆者は最初、提供されているWHIPデモサンプルソリューションから開発を始めた。しかし、この取り組みの中で、コアライブラリにいくつかの技術的な課題があることが判明した。特に大きな問題は、通信セッションの設定情報を記述するプロトコルであるSDP(Session Description Protocol)のネゴシエーション中に、リダイレクトが適切に処理されない点だった。このため、IVSステージへのSDPリクエストを行う際に、参加者トークンがリクエストから取り除かれてしまい、結果として「400 Bad Request」エラーが発生するという状況に直面した。筆者は、これらの課題を解決するために修正を加え、いくつかの追加機能と共にプルリクエスト(ソフトウェア開発におけるコード変更の提案)を提出した。これらの改善は、幸いにもコアライブラリに全て統合され、Amazon IVSとのスムーズな連携が可能になった。これにより、付属カメラの色味はまだ完璧ではないものの、ESP32-P4からAmazon IVSへの高解像度かつ低遅延のストリーミングが実現したのである。
ボードがAmazon IVSに映像を配信できるようになった次のステップとして、筆者はESP32-P4が持つ豊富なGPIO(汎用入出力)ピンに注目した。マイクロコントローラは元々センサーデータを読み取るために作られているため、この機能を活用しない手はないと考えたのだ。Amazon IVSのリアルタイムステージがSupplemental Enhancement Information (SEI) をサポートしていることを知り、センサーデータ、あるいは他の任意のデータをSEIとしてビデオストリームに埋め込んで配信する仕組みを考案した。SEIは、H.264ビデオストリームに付加情報を埋め込むための技術であり、これにより映像と同時に、その映像に関連する様々なデータを送ることが可能になる。この機能の実装には、ビデオフレームを操作してSEI NALユニット(H.264ストリームの基本的なデータ構造)を挿入するための、コアライブラリへのフック(プログラムの特定箇所に処理を追加するための仕組み)が必要だった。筆者は友人と協力してこのフックを実装し、SEIパブリッシングシステムを構築した。冒頭の写真でボードにDHT-11温湿度センサーが接続されているのは、このセンサーデータをSEIとして配信するデモンストレーションのためである。この機能により、単に映像を配信するだけでなく、その映像が撮影されている環境の温度や湿度といったコンテキスト情報も同時に視聴者に提供できるようになった。
この革新的なプロジェクトは、「ivs-esp-whip-demo」としてGitHubで公開されており、誰でもそのドキュメントを参照して試すことができる。詳細なドキュメントは、このシステムを実際に動かす上で役立つ情報を提供している。もし、このプロジェクトに興味を持ち、実際に試してみたいと考えるならば、GitHubリポジトリをチェックすることが推奨される。質問がある場合は、コメント欄で質問し、実行上の問題や改善のアイデアがあれば、リポジトリにイシューを提出することで、開発者コミュニティに参加し、貢献することも可能だ。このような技術の進歩は、IoT(Internet of Things)とライブストリーミングの分野に新たな可能性をもたらし、さまざまな応用が期待される。