Heim >Backend-Entwicklung >Python-Tutorial >WebRTC-Python-Server: STUN/TURN-Server für Ihre Python-App
Python ist eine vielseitige und zugängliche Programmiersprache, die für ihre klare Syntax und Lesbarkeit bekannt ist
Dies macht es zu einer guten Wahl für die Erstellung von WebRTC-Anwendungen
Wir können einen WebRTC-Server in Python erstellen, indem wir Bibliotheken wie aiortc verwenden
Reine Python-Implementierung:
Aufgebaut auf asyncio :
Medien- und Datenkanäle:
Einfache Integration:
Ausführliche Dokumentation und Beispiele:
Python 3.x installiert:
python3 --version
Grundkenntnisse der asynchronen Programmierung:
Verwendung von Pip zur Installation von Aiortc und anderen Abhängigkeiten.
aiortc ist eine reine Python-Implementierung von webrtc und ORTC. Es verwendet asynchrone Funktionen der Python-Sprache, um die Echtzeitkommunikation abzuwickeln
Installieren Sie die Bibliotheken mit pip wie folgt
pip install aiortc aiohttp
aiorrtc stellt die Kernfunktionalität von WebRTC bereit
aiohttp ist ein asynchrones HTTP-Client/Server-Framework, wir werden dieses Framework für die Signalisierung verwenden
Signalisierung mit WebSockets einrichten
WebRTC benötigt einen Signalisierungsmechanismus, um eine Verbindung herzustellen.
WebRTC tut dies durch den Austausch von SDP- oder Sitzungsbeschreibungen und ICE-Kandidaten zwischen Kollegen
Hierfür können Sie alles verwenden. In diesem Artikel werden wir WebSockets für die bidirektionale Echtzeitkommunikation zwischen Client und Server verwenden
Signalisierungs-Setup (Servercode)
python3 --version
Hier erstellen wir ein RTCPeerConnection-Objekt, um die Verbindung und die Medienströme zu verwalten
Servercodebeispiel (Peer-Verbindung)
pip install aiortc aiohttp
Um die NAT-Durchquerung abzuwickeln und die Konnektivität sicherzustellen, benötigen wir TURN-Server.
In diesem Artikel beschäftigen wir uns mit Metered TURN-Servern. Metered ist ein globaler Anbieter von TURN-Servern
Sie können sich für einen kostenlosen Plan auf Metered TURN-Servern anmelden, der ein monatliches TURN-Serverkontingent von 50 GB bietet. Es sind auch kostenpflichtige Pläne verfügbar
Schritte:
Melden Sie sich bei Metered.ca/stun-turn an und erhalten Sie Ihre TURN-Zugangsdaten
Klicken Sie im Dashboard auf die Schaltfläche „Klicken Sie hier, um Ihre ersten Anmeldeinformationen zu generieren“, um neue TURN-Server-Anmeldeinformationen zu erstellen
Klicken Sie dann auf die Schaltfläche „Anweisungen“, um Ihr ICE-Server-Array zu erhalten.
Sie können den API-Schlüssel auch verwenden, um TURN-Server zu aktivieren
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)
So können wir hier alles integrieren
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-Server: Diese helfen den Client-Geräten, die sich hinter einem NAT befinden, ihre eigene IP-Adresse und Portnummer zu kennen. Weitere Informationen zu STUN-Servern finden Sie unter Stun Server: Was sind Session Traversal Utilities für NAT?
TURN-Server: TURN-Server leiten den Datenverkehr von Peer zu Per weiter, wenn eine direkte Kommunikation aufgrund von NAT- oder Firewall-Regeln nicht möglich ist. Weitere Informationen zu TURN-Servern finden Sie unter: Was ist ein TURN-Server?
Verwendung von Asyncio für die Parallelitätsverwaltung
Best Practices für die Medienstream-Verwaltung
API: TURN-Serververwaltung mit leistungsstarker API. Sie können beispielsweise Anmeldeinformationen über die API hinzufügen/entfernen, Pro Benutzer/Anmeldeinformationen und Benutzermetriken über die API abrufen, Anmeldeinformationen über die API aktivieren/deaktivieren und Nutzungsdaten nach Datum über die API abrufen.
Globales Geo-Location-Targeting: Leitet den Datenverkehr automatisch an die nächstgelegenen Server weiter, für geringstmögliche Latenz und höchste Leistungsqualität. Weniger als 50 ms Latenz überall auf der Welt
Server in allen Regionen der Welt: Toronto, Miami, San Francisco, Amsterdam, London, Frankfurt, Bangalore, Singapur, Sydney, Seoul, Dallas, New York
Geringe Latenz: weniger als 50 ms Latenz, überall auf der Welt.
Kostengünstig: Pay-as-you-go-Preisgestaltung mit verfügbaren Bandbreiten- und Mengenrabatten.
Einfache Verwaltung: Erhalten Sie Nutzungsprotokolle, E-Mails, wenn Konten Grenzwerte erreichen, Abrechnungsunterlagen sowie E-Mail- und Telefonsupport.
Standardkonform: Entspricht RFCs 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 6544, 5928 über UDP, TCP, TLS und DTLS.
Multi-Tenant-Funktion: Erstellen Sie mehrere Anmeldeinformationen und trennen Sie die Nutzung nach Kunden oder verschiedenen Apps. Erhalten Sie Nutzungsprotokolle, Abrechnungsaufzeichnungen und Schwellenwertwarnungen.
Unternehmenszuverlässigkeit: 99,999 % Betriebszeit mit SLA.
Enterprise Scale: Ohne Begrenzung des gleichzeitigen Datenverkehrs oder des Gesamtdatenverkehrs. Gemessene TURN-Server bieten Unternehmensskalierbarkeit
5 GB/Monat kostenlos: Mit dem kostenlosen Plan erhalten Sie jeden Monat 5 GB kostenlose TURN-Servernutzung
Läuft auf Port 80 und 443
Unterstützt TURNS SSL, um Verbindungen durch Deep-Packet-Inspection-Firewalls zu ermöglichen.
Unterstützt sowohl TCP als auch UDP
Kostenloser, unbegrenzter STUN
Das obige ist der detaillierte Inhalt vonWebRTC-Python-Server: STUN/TURN-Server für Ihre Python-App. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!