Heim >Backend-Entwicklung >Python-Tutorial >WebRTC-Python-Server: STUN/TURN-Server für Ihre Python-App

WebRTC-Python-Server: STUN/TURN-Server für Ihre Python-App

Linda Hamilton
Linda HamiltonOriginal
2024-11-18 00:09:021014Durchsuche

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

Aortenbibliothek

  • Reine Python-Implementierung: 

    • Die aiortc-Bibliothek ist eine reine Python-Implementierung von WebRTC und ORTC.
    • Das bedeutet, dass Sie nicht auf Bibliotheken Dritter oder andere Abhängigkeiten angewiesen sind
  • Aufgebaut auf asyncio : 

    • Der aiortc basiert auf Pythons eigener asyncilibrary für asynchrone Verbindungen. 
    • So können Sie problemlos mehrere gleichzeitige Verbindungen verwalten
  • Medien- und Datenkanäle:

    • Die Bibliothek bietet Unterstützung für Video-, Audio- und Datenkanäle und ermöglicht so eine breite Palette von Echtzeit-Kommunikationsfunktionen.
  • Einfache Integration:

    • aiortc kann problemlos in andere Python-Bibliotheken wie aiohttp für Webserver sowie andere Bibliotheken von Drittanbietern wie socket.io für die Ereignisverarbeitung in Echtzeit integriert werden
  • Ausführliche Dokumentation und Beispiele:

    • Die Bibliothek aiortc wird mit einer umfangreichen Dokumentation und verschiedenen Beispielen geliefert, die Ihnen den schnellen Einstieg erleichtern können 

Einrichten eines WebRTC-Servers in Python

Voraussetzungen

  1. Python 3.x installiert:

    1. Stellen Sie sicher, dass Python 3.x auf Ihrem Computer oder Server installiert ist. Sie können die Python-Version so überprüfen  
python3 --version
  1. Grundkenntnisse der asynchronen Programmierung:

    1. Sie benötigen Grundkenntnisse darüber, wie asynchrone Programmierung funktioniert. 
    2. Wir werden in diesem Artikel die asynchrone Bibliothek verwenden, die für gleichzeitige Verbindungen und Datenströme wichtig ist

Notwendige Bibliotheken installieren 

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

Entwicklung des Servers

WebRTC python server: STUN/TURN servers for your python app

Signalisierung mit WebSockets einrichten

  1. 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
  1. Umgang mit Peer-Verbindungen und Medienströmen

Hier erstellen wir ein RTCPeerConnection-Objekt, um die Verbindung und die Medienströme zu verwalten

Servercodebeispiel (Peer-Verbindung)

pip install aiortc aiohttp

WebRTC python server: STUN/TURN servers for your python app

  1. Einbindung von TURN-Servern in die ICE-Konfiguration 

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:

  • Besorgen Sie sich die Anmeldeinformationen

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

WebRTC python server: STUN/TURN servers for your python app

Klicken Sie dann auf die Schaltfläche „Anweisungen“, um Ihr ICE-Server-Array zu erhalten.

WebRTC python server: STUN/TURN servers for your python app

Sie können den API-Schlüssel auch verwenden, um TURN-Server zu aktivieren

  • Konfigurieren Sie die ICE-Server
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)
  1. Codebeispiel zur Veranschaulichung der Tastenkombinationen

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

Praktische Umsetzungstipps

Überlegungen zum Netzwerk

  1. NAT-Traversal mit Metered.ca STUN/TURN-Servern verwalten
  • 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?

  1. Gewährleistung zuverlässiger Verbindungen mit geringer Latenz
  • Automatische geografische Routenführung: Metered.ca verfügt über eine automatische geografische Routenführung 

Leistungsoptimierung 

  1. Verwendung von Asyncio für die Parallelitätsverwaltung

  2. Best Practices für die Medienstream-Verwaltung

WebRTC python server: STUN/TURN servers for your python app

  1. 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.

  2. 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

  3. Server in allen Regionen der Welt: Toronto, Miami, San Francisco, Amsterdam, London, Frankfurt, Bangalore, Singapur, Sydney, Seoul, Dallas, New York

  4. Geringe Latenz: weniger als 50 ms Latenz, überall auf der Welt.

  5. Kostengünstig: Pay-as-you-go-Preisgestaltung mit verfügbaren Bandbreiten- und Mengenrabatten.

  6. Einfache Verwaltung: Erhalten Sie Nutzungsprotokolle, E-Mails, wenn Konten Grenzwerte erreichen, Abrechnungsunterlagen sowie E-Mail- und Telefonsupport.

  7. Standardkonform: Entspricht RFCs 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 6544, 5928 über UDP, TCP, TLS und DTLS.

  8. Multi-Tenant-Funktion: Erstellen Sie mehrere Anmeldeinformationen und trennen Sie die Nutzung nach Kunden oder verschiedenen Apps. Erhalten Sie Nutzungsprotokolle, Abrechnungsaufzeichnungen und Schwellenwertwarnungen.

  9. Unternehmenszuverlässigkeit: 99,999 % Betriebszeit mit SLA.

  10. Enterprise Scale: Ohne Begrenzung des gleichzeitigen Datenverkehrs oder des Gesamtdatenverkehrs. Gemessene TURN-Server bieten Unternehmensskalierbarkeit

  11. 5 GB/Monat kostenlos: Mit dem kostenlosen Plan erhalten Sie jeden Monat 5 GB kostenlose TURN-Servernutzung

  12. Läuft auf Port 80 und 443

  13. Unterstützt TURNS SSL, um Verbindungen durch Deep-Packet-Inspection-Firewalls zu ermöglichen.

  14. Unterstützt sowohl TCP als auch UDP

  15. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn