Streamlit-WebRTCアプリケーションのデプロイ完全ガイド:リアルタイム音声ビデオアプリを簡単に公開する方法
Streamlit-WebRTCは、開発者がリアルタイムの音声およびビデオストリームアプリケーションを迅速に構築できる強力なツールです。本ガイドでは、環境の準備から本番環境へのデプロイまでの全プロセスを解説し、あなたのリアルタイムアプリケーションをスムーズに公開する手助けをします。
準備:環境のセットアップとインストール
Streamlit-WebRTCのインストール
まず、Pythonが環境にインストールされていることを確認し、pipコマンドを使用してStreamlitとStreamlit-WebRTCをインストールします。
pip install streamlit streamlit-webrtc
プロジェクトコードの取得
以下のコマンドでリポジトリをクローンします。
git clone https://gitcode.com/gh_mirrors/st/streamlit-webrtc
cd streamlit-webrtc
デプロイの核心要件
Streamlit-WebRTCアプリケーションをデプロイする際には、以下の3つの重要な要件を満たす必要があります。
1. HTTPSの設定
WebRTC APIは、安全なコンテキストで実行する必要があります。そのため、本番環境ではHTTPSを使用する必要があります。開発環境のlocalhostではこの制限はありませんが、リモートサーバーにデプロイする場合はHTTPSを構成する必要があります。
Streamlit Community Cloudを使用することを推奨します。これは自動的にHTTPSサポートを提供します。その他のデプロイ方法では、ssl-proxyなどのツールを使用してHTTPSを実現できます。
# アプリケーションがhttp://localhost:8501で実行されていると仮定
streamlit run your_app.py
# ssl-proxyを使用してHTTPSに転送
./ssl-proxy -from 0.0.0.0:8000 -to 127.0.0.1:8501
2. STUNサーバーの設定
異なるネットワーク環境間で接続を確立するために、STUNサーバーを設定する必要があります。デフォルトでは、Googleが提供する無料のSTUNサーバーが推奨されます。
# WebRTCストリームを初期化し、GoogleのSTUNサーバーを指定
webrtc_streamer(
key="unique_stream_id",
rtc_config={
"ice_servers": [{"urls": ["stun:stun.l.google.com:19302"]}]
}
)
中国のネットワーク環境では、より良い接続パフォーマンスを得るために他のSTUNサーバーを使用する必要がある場合があります。
3. TURNサーバーの設定
一部のネットワーク環境(例:企業のファイアウォールの内側)では、STUNサーバーだけでは接続を確立できない場合があります。そのような場合、TURNサーバーを設定する必要があります。
Twilio Network Traversal Serviceの使用(推奨)
Twilioは、安定したSTUN/TURNサービスを提供しており、本番環境に適しています。
import os
from twilio.rest import Client
# 環境変数からTwilioの認証情報を取得
twilio_account_sid = os.environ['TWILIO_ACCOUNT_SID']
twilio_auth_token = os.environ['TWILIO_AUTH_TOKEN']
# Twilioクライアントを初期化
twilio_client = Client(twilio_account_sid, twilio_auth_token)
# ICEサーバー用のトークンを生成
ice_token = twilio_client.tokens.create()
# WebRTCストリームを設定し、TwilioのICEサーバー情報を使用
webrtc_streamer(
key="secure_stream",
rtc_config={
"ice_servers": ice_token.ice_servers
}
)
その他のTURNサーバーオプション
- Open Relay Project:無料のTURNサーバーを提供しますが、安定性が不十分な場合があります。
- セルフホスト型TURNサーバー:技術力のあるチーム向けで、関連するデプロイメントガイドを参照してください。
デプロイ手順
Streamlit Community Cloudでのデプロイ(推奨)
- コードをGitHubリポジトリにプッシュします。
- Streamlit Community Cloudにログインし、リポジトリを接続します。
- 必要な環境変数(例:TURNサーバーの認証情報)を追加します。
- システムがアプリケーションを自動的にデプロイし、HTTPS経由でアクセスできるようになります。
その他のクラウドプラットフォームでのデプロイ
AWS、GCP、Azureなどのプラットフォームでデプロイする場合:
- HTTPS証明書を構成します。
- アプリケーションでSTUNサーバーを設定します。
- 必要に応じてTURNサーバーを構成します。
- WebRTCの接続性をテストします。
よくある問題と解決策
カメラ/マイクにアクセスできない
- 本番環境でHTTPSを使用していることを確認してください。
- ブラウザの権限設定を確認してください。
- デバイスのハードウェアが正常に動作していることを確認してください。
接続に失敗する
- TURNサーバーを使用してみてください。
- ファイアウォールの設定を確認してください。
- ネットワーク接続の状態を確認してください。
パフォーマンスの問題
media_stream_constraintsでビデオの解像度を下げます。- フレーム処理のコールバック関数を最適化します。
async_processing=Trueを有効にすることを検討してください。
セキュリティと最適化のアドバイス
セキュリティのベストプラクティス
- クライアントコードでTURNの認証情報を公開しないでください。
- 環境変数を使用して機密情報を保存します。
- 必要に応じて認証を実装します。
- リソース集約型の操作にはレート制限を検討してください。
パフォーマンスの最適化
- アプリケーションのパフォーマンスメトリクスとユーザーエクスペリエンスを監視します。
- 有料TURNサービスを使用する場合、使用状況を監視してコストを最適化します。
- 高トラフィックアプリケーションではロードバランシングを検討してください。
- ユーザーフィードバックを収集して継続的に改善します。