Streamlit-WebRTCアプリケーションのデプロイ完全ガイド:リアルタイム音声ビデオアプリを簡単に公開する方法

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でのデプロイ(推奨)

  1. コードをGitHubリポジトリにプッシュします。
  2. Streamlit Community Cloudにログインし、リポジトリを接続します。
  3. 必要な環境変数(例:TURNサーバーの認証情報)を追加します。
  4. システムがアプリケーションを自動的にデプロイし、HTTPS経由でアクセスできるようになります。

その他のクラウドプラットフォームでのデプロイ

AWS、GCP、Azureなどのプラットフォームでデプロイする場合:

  1. HTTPS証明書を構成します。
  2. アプリケーションでSTUNサーバーを設定します。
  3. 必要に応じてTURNサーバーを構成します。
  4. WebRTCの接続性をテストします。

よくある問題と解決策

カメラ/マイクにアクセスできない

  • 本番環境でHTTPSを使用していることを確認してください。
  • ブラウザの権限設定を確認してください。
  • デバイスのハードウェアが正常に動作していることを確認してください。

接続に失敗する

  • TURNサーバーを使用してみてください。
  • ファイアウォールの設定を確認してください。
  • ネットワーク接続の状態を確認してください。

パフォーマンスの問題

  • media_stream_constraintsでビデオの解像度を下げます。
  • フレーム処理のコールバック関数を最適化します。
  • async_processing=Trueを有効にすることを検討してください。

セキュリティと最適化のアドバイス

セキュリティのベストプラクティス

  • クライアントコードでTURNの認証情報を公開しないでください。
  • 環境変数を使用して機密情報を保存します。
  • 必要に応じて認証を実装します。
  • リソース集約型の操作にはレート制限を検討してください。

パフォーマンスの最適化

  • アプリケーションのパフォーマンスメトリクスとユーザーエクスペリエンスを監視します。
  • 有料TURNサービスを使用する場合、使用状況を監視してコストを最適化します。
  • 高トラフィックアプリケーションではロードバランシングを検討してください。
  • ユーザーフィードバックを収集して継続的に改善します。

タグ: Streamlit WebRTC Python デプロイメント リアルタイム通信

5月18日 03:05 投稿