ホームページ >バックエンド開発 >Python チュートリアル >WebRTC Python サーバー: Python アプリの STUN/TURN サーバー
Python は、その明確な構文と読みやすさで知られる、多用途でアクセスしやすいプログラミング言語です
これは、webrtc アプリケーションの構築に適した選択肢になります
aiortc などのライブラリを使用して、Python で WebRTC サーバーを構築できます
純粋な Python 実装:
asyncio :
上に構築メディアおよびデータ チャネル:
統合の容易さ:
広範なドキュメントと例:
Python 3.x がインストールされています:
python3 --version
非同期プログラミングの基礎知識:
pip を使用して aiortc およびその他の依存関係をインストールします
aiortc は、webrtcand ORTC の純粋な Python 実装です。 Python 言語の非同期機能を使用してリアルタイム通信を処理します
次のように pip を使用してライブラリをインストールします
pip install aiortc aiohttp
aiorrtc はコア WebRTC 機能を提供します
aiohttp は非同期 HTTP クライアント/サーバー フレームワークです。このフレームワークをシグナリングに使用します
WebSocket によるシグナリングのセットアップ
WebRTC は接続を確立するためにシグナリング メカニズムを必要とします。
WebRTC は、ピア間で SDP またはセッションの説明と ICE 候補を交換することでこれを行います
これには何でも使えます。この記事では、クライアントとサーバー間のリアルタイムの双方向通信に WebSocket を使用します
シグナリングセットアップ (サーバーコード)
python3 --version
ここでは、接続とメディア ストリームを管理するための RTCPeerConnection オブジェクトを作成します
サーバーコード例 (ピア接続)
pip install aiortc aiohttp
NAT トラバーサルを処理し、接続を確保するには、TURN サーバーが必要です。
この記事では、従量制の TURN サーバーを使用します。 Metered は TURN サーバーのグローバルプロバイダー
月間 50 GB の TURN サーバー割り当てを提供する従量制 TURN サーバーの無料プランにサインアップできます。また、有料プランも利用できます
手順:
Metered.ca/stun-turn にサインアップし、TURN 認証情報を取得します
ダッシュボードで [ここをクリックして最初の認証情報を生成する] ボタンをクリックして、新しい TURN サーバー認証情報を作成します
次に、[手順] ボタンをクリックして ICE サーバー アレイを取得します。
API キーを使用して TURN サーバーを有効にすることもできます
import asyncio from aiohttp import web import json async def index(request): with open('index.html', 'r') as f: content = f.read() return web.Response(text=content, content_type='text/html') async def websocket_handler(request): ws = web.WebSocketResponse() await ws.prepare(request) # Handle incoming WebSocket messages here return ws app = web.Application() app.router.add_get('/', index) app.router.add_get('/ws', websocket_handler) web.run_app(app)
ここですべてを統合する方法は次のとおりです
from aiortc import RTCPeerConnection, RTCSessionDescription pcs = set() # Keep track of peer connections async def websocket_handler(request): ws = web.WebSocketResponse() await ws.prepare(request) pc = RTCPeerConnection() pcs.add(pc) @pc.on("datachannel") def on_datachannel(channel): @channel.on("message") async def on_message(message): # Handle incoming messages pass async for msg in ws: if msg.type == web.WSMsgType.TEXT: data = json.loads(msg.data) if data["type"] == "offer": await pc.setRemoteDescription(RTCSessionDescription( sdp=data["sdp"], type=data["type"])) answer = await pc.createAnswer() await pc.setLocalDescription(answer) await ws.send_json({ "type": pc.localDescription.type, "sdp": pc.localDescription.sdp }) elif data["type"] == "candidate": candidate = data["candidate"] await pc.addIceCandidate(candidate) elif msg.type == web.WSMsgType.ERROR: print(f'WebSocket connection closed with exception {ws.exception()}') pcs.discard(pc) return ws
STUN サーバー: これらは、NAT の背後にあるクライアント デバイスが自身の IP アドレスとポート番号を認識するのに役立ちます。 STUN サーバーの詳細については、Stun Server: NAT のセッション トラバーサル ユーティリティとは何ですか?
にアクセスしてください。TURN サーバー: TURN サーバーは、NAT またはファイアウォール ルールにより直接通信が不可能な場合、ピアからピアへトラフィックを中継します。 TURN サーバーの詳細については、TURN サーバーとは何ですか?
同時実行管理に asyncio を使用する
メディア ストリーム管理のベスト プラクティス
API: 強力な API でサーバー管理を実現します。 API を介して認証情報の追加/削除、API を介してユーザーごとの認証情報とユーザー指標を取得、API を介して認証情報を有効/無効にする、API を介して日付ごとの使用状況データを取得するなどの操作を行うことができます。
グローバル地理位置ターゲティング: トラフィックを最も近いサーバーに自動的に送信し、遅延を最小限に抑え、最高品質のパフォーマンスを実現します。世界中のどこでも遅延が 50 ミリ秒未満
世界のすべての地域のサーバー: トロント、マイアミ、サンフランシスコ、アムステルダム、ロンドン、フランクフルト、バンガロール、シンガポール、シドニー、ソウル、ダラス、ニューヨーク
低遅延: 世界中のどこでも遅延が 50 ミリ秒未満です。
費用対効果の高い: 帯域幅とボリュームの割引が可能な従量課金制の料金設定です。
簡単な管理: 使用状況ログ、アカウントがしきい値制限に達したときのメール、請求記録、メールと電話のサポートを取得します。
準拠規格: UDP、TCP、TLS、および DTLS で RFC 5389、5769、5780、5766、6062、6156、5245、5768、6336、6544、5928 に準拠します。
マルチテナンシー: 複数の認証情報を作成し、顧客ごとまたは異なるアプリごとに使用を分離します。使用状況ログ、請求記録、およびしきい値アラートを取得します。
エンタープライズの信頼性: SLA による 99.999% の稼働時間。
エンタープライズ規模: 同時トラフィックまたは合計トラフィックに制限はありません。従量制の TURN サーバーはエンタープライズ スケーラビリティを提供します
5 GB/月 無料: 無料プランでは毎月 5 GB の TURN サーバーを無料で利用できます
ポート 80 および 443 で実行
ディープ パケット インスペクション ファイアウォールを介した接続を許可する TURNS SSL をサポートします。
TCP と UDP の両方をサポート
無料無制限スタン
以上がWebRTC Python サーバー: Python アプリの STUN/TURN サーバーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。