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 伺服器的全球供應商
您可以在計量 TURN 伺服器上註冊免費計劃,該計劃提供每月 50 GB 的 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 伺服器:什麼是 NAT 的會話遍歷實用程式?
TURN 伺服器: 當因 NAT 或防火牆規則而無法進行直接通訊時,TURN 伺服器會在對等點之間中繼流量。要了解有關 TURN 伺服器的更多信息,請訪問:什麼是 TURN 伺服器?
使用 asyncio 進行同時管理
媒體串流管理最佳實務
API: 使用強大的 API 進行 TURN 伺服器管理。您可以執行以下操作:透過 API 新增/刪除憑證、透過 API 檢索每個使用者/憑證和使用者指標、透過 API 啟用/停用憑證、透過 API 按日期檢索使用資料。
全球地理位置定位:自動將流量定向到最近的伺服器,以實現盡可能低的延遲和最高的品質效能。全球任何地方的延遲均低於 50 毫秒
全球所有地區的伺服器:多倫多、邁阿密、舊金山、阿姆斯特丹、倫敦、法蘭克福、班加羅爾、新加坡、雪梨、首爾、達拉斯、紐約
低延遲: 低於 50 毫秒的延遲,在世界任何地方。
經濟高效:即用即付定價,並提供頻寬和批量折扣。
輕鬆管理: 取得使用日誌、帳戶達到門檻限制時的電子郵件、帳單記錄以及電子郵件和電話支援。
符合標準: 符合 UDP、TCP、TLS 和 DTLS 的 RFC 5389、5769、5780、5766、6062、6156、5245、5768、6336、925336、92536、92536、92536。
多租用戶: 建立多個憑證並依客戶或不同應用程式分開使用。取得使用日誌、計費記錄和閾值警報。
企業可靠性: SLA 正常運作時間達 99.999%。
企業規模: 併發流量或總流量不限制。計量 TURN 伺服器提供企業可擴充性
每月 5 GB 免費: 透過免費方案每月獲得 5 GB 免費 TURN 伺服器使用量
在連接埠 80 和 443 上運作
支援 TURNS SSL 以允許透過深度封包偵測防火牆進行連線。
同時支援 TCP 和 UDP
免費無限制 STUN
以上是WebRTC python 伺服器:Python 應用程式的 STUN/TURN 伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!