Maison >développement back-end >Tutoriel Python >Serveur python WebRTC : serveurs STUN/TURN pour votre application python

Serveur python WebRTC : serveurs STUN/TURN pour votre application python

Linda Hamilton
Linda Hamiltonoriginal
2024-11-18 00:09:021022parcourir

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

bibliothèque aortique

  • Implémentation Python pur : 

    • La bibliothèque aiortc est une implémentation purement python de WebRTC et ORTC.
    • Cela signifie que vous n'avez pas besoin de dépendre d'une bibliothèque tierce ou de toute autre dépendance
  • Construit sur asyncio  : 

    •  aiortc est construit sur la propre bibliothèque asyncio de Python pour les connexions asynchrones. 
    • Vous permettant ainsi de gérer facilement plusieurs connexions simultanées
  • Canaux médias et données :

    • La bibliothèque prend en charge les canaux vidéo, audio ainsi que les canaux de données, permettant ainsi un large éventail de fonctionnalités de communication en temps réel.
  • Facilité d'intégration :

    • aortc peut être facilement intégré à d'autres bibliothèques Python telles que aiohttp pour le serveur Web ainsi qu'à d'autres bibliothèques tierces telles que socket.io pour la gestion des événements en temps réel
  • Documentation complète et exemples :

    • la bibliothèque aiortc est livrée avec une documentation complète et différents exemples qui peuvent vous aider à démarrer rapidement 

Configuration d'un serveur WebRTC en Python

Pré-requis

  1. Python 3.x installé :

    1. Assurez-vous que Python 3.x est installé sur votre ordinateur ou serveur. Vous pouvez vérifier la version de Python comme ceci  
python3 --version
  1. Connaissance de base de la programmation asynchrone :

    1. Vous avez besoin de connaissances de base sur le fonctionnement de la programmation asynchrone. 
    2. Nous allons utiliser la bibliothèque asynchrone dans cet article, qui est importante pour les connexions et les flux de données simultanés

Installation des bibliothèques nécessaires 

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

Développement du serveur

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

Configuration de la signalisation avec WebSockets

  1. 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
  1. Gestion des connexions entre pairs et des flux multimédias

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

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

  1. Intégration des serveurs TURN dans la configuration ICE 

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 :

  • Obtenir les informations d'identification

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

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

Cliquez ensuite sur le bouton Instructions pour obtenir votre baie de serveurs ICE.

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

Vous pouvez également utiliser la clé API pour activer les serveurs TURN

  • Configurer les serveurs ICE
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. Exemple de code illustrant les streps clés

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

Conseils pratiques de mise en œuvre

Considérations relatives au réseau

  1. Gestion du parcours NAT avec les serveurs Metered.ca STUN/TURN
  • 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 ?

  1. Garantir des connexions fiables et à faible latence
  • Routage géographique automatique : Metered.ca propose un routage géographique automatique 

Optimisation des performances 

  1. Utiliser asyncio pour la gestion de la concurrence

  2. Bonnes pratiques de gestion des flux multimédias

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

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

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

  3. Serveurs dans toutes les régions du monde : Toronto, Miami, San Francisco, Amsterdam, Londres, Francfort, Bangalore, Singapour, Sydney, Séoul, Dallas, New York

  4. Faible latence : moins de 50 ms de latence, partout dans le monde.

  5. Rentable : tarification à l'utilisation avec réductions sur la bande passante et le volume disponibles.

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

  7. Conforme aux normes : Conforme aux RFC 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 6544, 5928 sur UDP, TCP, TLS et DTLS.

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

  9. Fiabilité d'entreprise : 99,999 % de disponibilité avec SLA.

  10. Échelle d'entreprise : Sans limite sur le trafic simultané ou le trafic total. Les serveurs TURN mesurés offrent une évolutivité d'entreprise

  11. 5 Go/mois gratuits : Obtenez 5 Go chaque mois d'utilisation gratuite du serveur TURN avec le forfait gratuit

  12. Fonctionne sur les ports 80 et 443

  13. Prend en charge TURNS SSL pour autoriser les connexions via des pare-feu d'inspection approfondie des paquets.

  14. Prend en charge TCP et UDP

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

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn