Maison >développement back-end >Tutoriel Python >Serveur python WebRTC : serveurs STUN/TURN pour votre application python
Python est un langage de programmation polyvalent et accessible, connu pour sa syntaxe claire et sa lisibilité
Cela en fait un bon choix pour créer des applications Webrtc
Nous pouvons créer un serveur WebRTC en python en utilisant des bibliothèques telles que aiortc
Implémentation Python pur :
Construit sur asyncio :
Canaux médias et données :
Facilité d'intégration :
Documentation complète et exemples :
Python 3.x installé :
python3 --version
Connaissance de base de la programmation asynchrone :
utiliser pip pour installer aiortc et d'autres dépendances
aiortc est une implémentation purement python de webrtcand ORTC. Il utilise les fonctionnalités asynchrones du langage Python pour gérer la communication en temps réel
Installez les bibliothèques en utilisant pip comme ça
pip install aiortc aiohttp
aiorrtc fournit la fonctionnalité WebRTC de base
aiohttp est un framework client/serveur HTTP asynchrone, nous allons utiliser ce framework pour la signalisation
Configuration de la signalisation avec WebSockets
WebRTC a besoin d'un mécanisme de signalisation afin d'établir une connexion.
WebRTC fait cela en échangeant des descriptions SDP ou de session et des candidats ICE entre pairs
Pour cela, vous pouvez utiliser n'importe quoi. Dans cet article, nous allons utiliser WebSockets pour une communication bidirectionnelle en temps réel entre client et serveur
Configuration de la signalisation (code serveur)
python3 --version
Ici, nous allons créer un objet RTCPeerConnection pour gérer la connexion et les flux multimédias
Exemple de code de serveur (Connexion Peer)
pip install aiortc aiohttp
Pour gérer la traversée NAT et assurer la connectivité, nous avons besoin de serveurs TURN.
Dans cet article, nous allons utiliser les serveurs Metered TURN. Metered est un fournisseur mondial de serveur TURN
Vous pouvez souscrire à un forfait gratuit sur les serveurs TURN mesurés qui offre un quota de serveur TURN mensuel de 50 Go et des forfaits payants sont également disponibles
Étapes :
Inscrivez-vous sur Metered.ca/stun-turn et obtenez vos identifiants TURN
Sur le tableau de bord, cliquez sur Cliquez ici pour générer votre premier identifiant pour créer un nouvel identifiant de serveur TURN
Cliquez ensuite sur le bouton Instructions pour obtenir votre baie de serveurs ICE.
Vous pouvez également utiliser la clé API pour activer les serveurs 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)
Voici comment on peut tout intégrer ici
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
Serveurs STUN : Ceux-ci aident les appareils clients qui se trouvent derrière un NAT à connaître leur propre adresse IP et leur numéro de port. Pour en savoir plus sur les serveurs STUN, consultez Stun Server : Qu'est-ce que Session Traversal Utilities for NAT ?
Serveurs TURN : Les serveurs TURN relaient le trafic d'un homologue à l'autre lorsque la communication directe n'est pas possible en raison de règles NAT ou de pare-feu. Pour en savoir plus sur les serveurs TURN, consultez : Qu'est-ce qu'un serveur TURN ?
Utiliser asyncio pour la gestion de la concurrence
Bonnes pratiques de gestion des flux multimédias
API : TURN gestion du serveur avec une API puissante. Vous pouvez faire des choses comme ajouter/supprimer des informations d'identification via l'API, récupérer par utilisateur/informations d'identification et métriques utilisateur via l'API, activer/désactiver les informations d'identification via l'API, récupérer les données d'utilisation par date via l'API.
Ciblage de géolocalisation globale : Dirige automatiquement le trafic vers les serveurs les plus proches, pour une latence la plus faible possible et des performances de la plus haute qualité. moins de 50 ms de latence partout dans le monde
Serveurs dans toutes les régions du monde : Toronto, Miami, San Francisco, Amsterdam, Londres, Francfort, Bangalore, Singapour, Sydney, Séoul, Dallas, New York
Faible latence : moins de 50 ms de latence, partout dans le monde.
Rentable : tarification à l'utilisation avec réductions sur la bande passante et le volume disponibles.
Administration facile : Obtenez des journaux d'utilisation, des e-mails lorsque les comptes atteignent les limites de seuil, des enregistrements de facturation et une assistance par e-mail et par téléphone.
Conforme aux normes : Conforme aux RFC 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 6544, 5928 sur UDP, TCP, TLS et DTLS.
Multi‑Tenancy : Créez plusieurs informations d'identification et séparez l'utilisation par client ou par différentes applications. Obtenez des journaux d'utilisation, des enregistrements de facturation et des alertes de seuil.
Fiabilité d'entreprise : 99,999 % de disponibilité avec SLA.
Échelle d'entreprise : Sans limite sur le trafic simultané ou le trafic total. Les serveurs TURN mesurés offrent une évolutivité d'entreprise
5 Go/mois gratuits : Obtenez 5 Go chaque mois d'utilisation gratuite du serveur TURN avec le forfait gratuit
Fonctionne sur les ports 80 et 443
Prend en charge TURNS SSL pour autoriser les connexions via des pare-feu d'inspection approfondie des paquets.
Prend en charge TCP et UDP
STUN gratuit et illimité
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!