https://a.storyblok.com/f/270183/1368x665/30a0c8dafd/26jul_vonage-video-api-python-sdk_blog_r2.png

Live-Untertitel, Moderation und Aufzeichnung mit Python und Vonage

Zuletzt aktualisiert am July 9, 2026

Lesedauer: 12 Minuten

Am Ende dieses Blog-Beitrags haben Sie ein tieferes Verständnis des Python SDK für die Vonage Video API sowie einige Beispielcodes, die Sie als Gerüst verwenden können, um funktionsreiche, browserbasierte Videokonferenzen zu erstellen.

Einführung

Die Pandemie von 2020 hat die Einführung von Videokonferenzen als Standardkommunikationsmittel beschleunigt. Heute gehören webbasierte Videokonferenzen für Unternehmen, Bildungseinrichtungen und Verbraucher gleichermaßen zum Alltag. Entwickler können die Vonage Video API und nutzen. Python SDK nutzen, um sichere Echtzeit-Videokonferenzanwendungen mit Moderations-, Transkriptions- und Aufzeichnungsfunktionen zu erstellen.

Im Laufe der Zeit hat sich die Technologie erheblich weiterentwickelt, und damit auch die Anforderungen, die an sie gestellt werden. Lösungen, die einst modern schienen, werden heute als Basisfunktionen erwartet. Von modernen Videokonferenzplattformen wird erwartet, dass sie Audio- und Videoqualität, zuverlässige Verbindungen und eine Kommunikation mit geringer Latenz bieten.

In diesem Blogbeitrag wird das Python SDK für die Vonage Video API und zeigt, wie man Moderations- und Archivierungsfunktionen in eine Videokonferenzanwendung einbaut. Jede der behandelten Funktionen wird in einer begleitenden Beispielanwendung demonstriert. Wenn Sie mit der Video API noch nicht vertraut sind, sollten Sie mit diesem Tutorial über die Erstellung einer Videokonferenzanwendung. Wenn Sie zum eigentlichen Code übergehen möchten, können Sie die Beispielanwendung mit Hilfe der README im Repository.

Dieser Blog-Beitrag behandelt insbesondere folgende Themen:

  • Live-Untertitelung

  • Teilnehmer stummschalten

  • Entfernen von Teilnehmern

  • Aufnahme-Sitzungen

  • Anschauen von aufgezeichneten Sitzungen

A stylized image illustrating all the features the Vonage Video API offers.Integrate live interactive video directly into your web, mobile, and desktop applications with the Vonage global video platform.

Flask und Tunneling verstehen

Die Beispielanwendung in diesem Blog-Beitrag stützt sich auf technische Konzepte und Tools außerhalb von Vonage, die in anderen Bereichen der Softwareentwicklung hilfreich sein können.

Was ist eine Python-Flask-Anwendung?

Die Beispielanwendung in diesem Blogbeitrag verwendet Flaskein leichtgewichtiges und dennoch leistungsstarkes Web-Framework für Python. Als Framework ermöglicht es Entwicklern, schnell eine Webanwendung zu erstellen. Wir haben es für dieses Tutorial wegen seiner Benutzerfreundlichkeit und seines minimalistischen Ansatzes ausgewählt. Im Gegensatz zu anderen Python-Webentwicklungs-Frameworks bietet es uns nur das Wesentliche, das wir für die Erstellung einer einfachen Videokonferenzlösung benötigen.

Was ist Tunnelbau?

Da die Beispielanwendung lokal ausgeführt wird, ist sie nicht über das öffentliche Internet zugänglich. Wenn Ihre lokale Anwendung nicht öffentlich zugänglich ist, können entfernte Teilnehmer keine Verbindung zur Videositzung herstellen. An dieser Stelle kommt das Tunneling ins Spiel. Durch Tunneling werden lokale Server über temporäre oder statische öffentliche URLs dem öffentlichen Internet zugänglich gemacht. ngrok ist eine Softwareplattform, die diesen Dienst anbietet. Mehr über ngrok erfahren Sie in unserem Blog-Beitrag darüber.

Video API Core Concepts

Endbenutzer erwarten nahtlose, ununterbrochene Videoanrufe, die einwandfrei funktionieren. Das Erreichen dieses Zuverlässigkeitsniveaus ist jedoch mit erheblicher Komplexität unter der Oberfläche verbunden.

Videokommunikation in Echtzeit ist mit verschiedenen technischen Herausforderungen verbunden. Die Anrufer verbinden sich über verschiedene Hardware, arbeiten über unterschiedliche Verbindungsinfrastrukturen und überbrücken mehrere geografische Regionen. Darüber hinaus schwanken die Netzwerkbedingungen während aktiver Sitzungen: Ein Smartphone kann von einer Wi-Fi-Verbindung auf mobile Daten umschalten, Sicherheitsprotokolle des Unternehmens können bestimmten UDP-Datenverkehr (User Datagram Protocol) einschränken, oder ein älterer Computer kann Verarbeitungsengpässe aufweisen.

Die Video API von Vonage ermöglicht es Entwicklern, qualitativ hochwertige Echtzeit-Videos, Instant Messaging, Bildschirmfreigabe und ähnliche Funktionen in Web- und Mobilanwendungen zu integrieren. Um diese Funktionen bereitzustellen, nutzt die Video API WebRTC als Grundlage für die Übertragung von Audio- und Videoströmen. Die folgenden Concepts sind für die Arbeit mit der Video API wichtig:

  • Sitzung: Eine Sitzung ist eine logische Gruppe von Verbindungen und Datenströmen. Verbindungen innerhalb der gleichen Sitzung können Nachrichten austauschen. Eine Sitzung fungiert als virtueller Raum, in dem die Teilnehmer kommunizieren.

  • Verbindung: Ein Endpunkt, der an einer Sitzung teilnimmt und in der Lage ist, Nachrichten zu senden und zu empfangen. Eine Verbindung ist entweder verbunden und kann Nachrichten empfangen, oder sie ist nicht verbunden und kann keine Nachrichten empfangen.

  • Stream: Ein Medienstrom fließt zwischen zwei Verbindungen. Dies bezieht sich auf die tatsächlichen Bytes, die Medien enthalten, die ausgetauscht werden. Die Medien können nur aus Audio oder aus Audio und Video bestehen. Sie können auch Bildschirmfreigaben und benutzerdefinierte Streams erstellen.

  • Token: Die Video API-Plattform verwendet Token für die Autorisierung, so dass Sie sich nicht um die Erstellung von Benutzern auf der Plattform kümmern müssen. In dieser Beispielanwendung verwenden wir Token, um Teilnehmer von Videositzungen im Handumdrehen zu erstellen.

  • Herausgeber: Dies bezieht sich auf den Client, der einen Medienstrom veröffentlicht.

  • Abonnent: Ein Client, der Medienströme empfängt.

  • Signalisierung: Dies bezieht sich auf das Senden von Text und Daten zwischen Clients, die mit einer Sitzung verbunden sind, in Form von Nachrichten. Diese Nachrichten ermöglichen es Entwicklern, einfache Textchats zu erstellen, Anweisungen von einem Client zum anderen zu senden und andere wertvolle Erfahrungen zu schaffen.

Einen tieferen Einblick in diese wichtigen Begriffe und Concepts erhalten Sie in dem Video API-Glossar oder schauen Sie in die Video API-Dokumentation. Sie können sich auch unsere Einführung in die Video API auf YouTube ansehen:

Was ist der Unterschied zwischen einem client-seitigen und einem server-seitigen SDK?

Die Video API-Plattform ermöglicht die Einbettung von interaktiven Videos in Echtzeit und hoher Qualität, Messaging, Screen-Sharing und vieles mehr in Web- und Mobilanwendungen. Die Plattform umfasst Client-Bibliotheken für die Web-, Mobil- und Desktop-Plattform sowie serverseitige SDKs.

Was ist ein SDK?

SDK steht für "Software Development Kit". Ein SDK ist ein installierbares Paket von Tools, die es Entwicklern erleichtern sollen, eine bestimmte Plattform oder Technologie zu implementieren. Das Python SDK für die Video API erleichtert Python-Entwicklern die Integration von Vonage in ihre Applikationen, da es die API in sprachenspezifische Muster und Strukturen übersetzt.

Sowohl clientseitige als auch serverseitige SDKs bieten diese Art von Tools. Der Unterschied liegt darin, wo sie innerhalb der Architektur einer Anwendung angesiedelt sind. Client-seitige SDKs helfen Entwicklern bei der Erstellung von Benutzeroberflächen, interaktiven Erlebnissen und Echtzeit-Kommunikationsfunktionen. Aus diesem Grund werden clientseitige SDKs in der Regel für JavaScript und seine Frameworks und Bibliotheken sowie für mobile und Desktop-Betriebssysteme geschrieben.

Umgekehrt bietet ein serverseitiges SDK Werkzeuge für die Backend-Entwicklung. Dies ist der Teil einer Anwendung, der für die Bearbeitung von Anfragen, die Verarbeitung von Daten, zusätzliche Geschäftslogik, Sicherheit und Authentifizierung zuständig ist. Wie der Name schon sagt, helfen serverseitige SDKs Entwicklern beim Schreiben von Software, die auf einem Server (in der Regel in der Cloud) bereitgestellt wird, und werden daher in der Regel für Python, Java, Node.js oder PHP geschrieben.

Die folgende Tabelle gibt einen Überblick über die Unterschiede zwischen client-seitigen und server-seitigen SDKs:

Klientenseite

Server-seitig

Platz in

Anwendungsarchitektur

  • Läuft im Browser oder auf dem Gerät des Nutzers (mobile App)

  • Behandelt UI-Interaktionen, Frontend-Logik und lokale Datenverwaltung

  • Wird direkt auf den Client-Rechnern ausgeführt

  • Läuft auf Backend-Servern

  • Verarbeitet Geschäftslogik, Datenbankoperationen und API-Anfragen

  • Ausgeführt von Server zu Server oder während der Verarbeitung von Serveranfragen

Sicherheit und Autorisierung

  • Höheres Expositionsrisiko

  • Alle in den Client-Code eingebetteten Anmeldeinformationen können überprüft werden

  • sollte niemals sensible Schlüssel oder Geheimnisse speichern

  • Am besten für öffentliche API-Aufrufe oder Vorgänge, die keine Authentifizierung erfordern

  • Berechtigungsprüfungen auf der Client-Seite können umgangen werden, daher ist eine Backend-Validierung unerlässlich.

  • Standardmäßig sicherer

  • Anmeldeinformationen und API-Schlüssel werden serverseitig gespeichert und sind für die Benutzer nicht sichtbar.

  • Kann sensible Vorgänge (Zahlungsverarbeitung, Authentifizierung) sicher umsetzen

  • Autorisierungsprüfungen finden serverseitig statt, wo sie nicht umgangen werden können.

Programmiersprachen

  • JavaScript und seine Frameworks und Bibliotheken

  • Android, iOS

  • Python, Java, Node.js, PHP, Ruby

In diesem Blog-Beitrag werden wir uns mit dem Python SDK für die Vonage Video API. Es handelt sich um ein serverseitiges SDK, mit dem Sie Sitzungen erstellen und moderieren, Token erzeugen und mit der Archivierung arbeiten können. Weitere Informationen über das Zusammenspiel der clientseitigen und der serverseitigen Video APIs finden Sie in unserer Dokumentation.

Erstellen einer Videokonferenz-Anwendung mit dem Python SDK

Die in diesem Blogpost vorgestellte Beispielanwendung verwendet Python und Flask für das Backend und JavaScript für das Frontend, um eine Videositzung zu erstellen und zu koordinieren. Die Anwendung unterstützt die folgenden Funktionen:

  • Erstellen einer Video-Sitzung

  • Ermöglichung der Veröffentlichung von Streams durch Moderatoren

  • Befähigung der Vortragenden zu:

    • Aktivieren von Live-Untertiteln

    • Teilnehmer stummschalten oder entfernen

    • Archivierung des Laufs starten

Wenn Sie den Code zum Laufen bringen wollen, können Sie der README in der Beispiel-App-Repo. Das Erstellen von Sitzungen und das Aktivieren von Echtzeit-Chats zwischen den Teilnehmern wird in unserem Blogbeitrag über Erstellung einer Videokonferenzanwendung.

Aktivieren von Live-Untertiteln

Live-Untertitel können die Benutzerfreundlichkeit einer Anwendung und das Engagement der Benutzer verbessern. Untertitel verbessern die Bewertung der Zugänglichkeit Ihrer Anwendung. Zugänglichkeitsvorschriften in einigen Regionen können die Unterstützung von Untertiteln erfordern. Untertitel können die Verständlichkeit in lauten oder unkontrollierten Umgebungen verbessern und so das allgemeine Benutzererlebnis steigern.

Sie können die Live-Untertitel-API können Sie Audiostreams transkribieren und Echtzeit-Untertitel für Ihre Anwendung generieren. Die Video Live Captions API verwendet einen Transkriptionsdienst, um Echtzeituntertitel für die Teilnehmer einer Sitzung bereitzustellen.

Bitte beachten Sie: Live Captions ist ein nutzungsbasiertes Produkt. Die Nutzung wird auf der Grundlage der Anzahl der an den Transkriptionsdienst gesendeten Audiostreams der Teilnehmer (oder Stream-IDs) berechnet. Weitere Informationen finden Sie auf der die Preisseite der Live Captions API.

Um Live-Untertitel verwenden zu können, muss Ihre Sitzung mit der Option "Media Router" erstellt werden und um die Untertitel zu aktivieren, benötigt ein Teilnehmer ein Token mit der Rolle "Moderator"..

Im Python-SDK werden diese Optionen mit SessionOptions und TokenOptions Objekten behandelt:

session_options = SessionOptions(media_mode=MediaMode.ROUTED)
video_session = vonage_client.video.create_session(options=session_options)
if presenter:
    token_options = TokenOptions(session_id=session_id, role=TokenRole.MODERATOR)
else:
    token_options = TokenOptions(session_id=session_id, role=TokenRole.PUBLISHER)
    
token = vonage_client.video.generate_client_token(token_options).decode("utf-8")

In dem Beispielcodegewähren wir presenters die Fähigkeit, Untertitel zu aktivieren, indem ein Token mit der MODERATOR Rolle.

Weitere Informationen über Token, Token-Rollen und die Fähigkeiten der einzelnen Rollen finden Sie in der Dokumentation.

Die folgenden Endpunkte werden verwendet, um mit dem Backend zu kommunizieren und eine Anfrage an die Live Captions API zu senden. Der Endpunkt zum Starten von Untertiteln verwendet eine Sitzungs-ID und ein Token zum Erstellen eines CaptionsOption Objekt zu erstellen, das dann an die start_options Funktion übergeben wird. Die Funktion gibt ein CaptionsData Objekt zurück.

@app.route("/captions/start", methods=["POST"])
def start_captions():
    """Endpoint to start captions"""
    data = request.get_json()
    print(f"Start captions request data: ==> {data}")
    session_id = data.get("sessionId")
    token_id = data.get("token")

    if not session.get("is_presenter"):
        return jsonify({"error": "Unauthorized"}), 403

    if not session_id or not token_id:
        return jsonify({"error": "sessionId or token is missing"}), 400

    options = CaptionsOptions(
        session_id=session_id,
        token=token_id,
    )

    captions: CaptionsData = vonage_client.video.start_captions(options)

    return jsonify({"caption_id": captions.captions_id})

Die Untertitel-ID wird an das Frontend weitergegeben und zur Anzeige der transkribierten Audiodaten in der Benutzeroberfläche verwendet. In der Beispielanwendung werden die Untertitel unterhalb des Videos angezeigt. Bitte beachten Sie, dass es einen Moment dauern kann, bis die Untertitel angezeigt werden.

A screenshot of the captions as they appear in the UI.

Um mehr über die Live Captions API zu erfahren und Beispielcode für die Frontend-Implementierung zu sehen, lesen Sie die Dokumentation.

Sitzungsmoderation: Stummschalten und Entfernen von Teilnehmern

Moderatoren müssen unter Umständen den Audio- oder Sitzungszugang der Teilnehmer kontrollieren, um das Gesamterlebnis der Sitzung zu verbessern. So kann es beispielsweise vorkommen, dass ein Teilnehmer vergisst, sein Mikrofon stumm zu schalten, was zu unbeabsichtigten Ablenkungen während der Sitzung führt; im Extremfall muss ein Teilnehmer zwangsweise aus der Sitzung entfernt werden. Ein Teilnehmer mit der Rolle des Moderators hat über die Video API Zugriff auf diese beiden Funktionen.

Stummschalten eines Teilnehmers

In der Beispielanwendung definieren wir einen Muting-Endpunkt, der einen Aufruf an die API vornimmt. Die API benötigt eine Sitzungs-ID und eine Stream-ID, um erfolgreich zu sein.

@app.route("/mute-stream", methods=["POST"])
def mute_stream():
    data = request.json
    session_id = data.get("sessionId")
    stream_id = data.get("streamId")

    vonage_client.video.mute_stream(session_id, stream_id)
    return jsonify({"message": f"Stream {stream_id} muted successfully."}), 200

Zusätzlich können Teilnehmer mit der Rolle Moderator alle Streams in einer Sitzung stummschalten und deaktivieren Stummschaltung in allen Streams deaktivieren. Die Implementierung dieser Funktionen würde den Rahmen dieses Blogbeitrags sprengen, aber Sie finden Codebeispiele in der Dokumentation zur Stummschaltung von Teilnehmern.

Bei der Arbeit mit den Muting-Endpunkten ist es wichtig, einige Punkte zu beachten:

  • Es gibt keine API für Aufhebung der Stummschaltung eines einzelnen Teilnehmers. Dies liegt daran, dass in einem typischen Anwendungsfall einer Video-Sitzung die Teilnehmer die Stummschaltung aufheben würden selbst aufheben wenn sie sprechen müssen.

  • Mit mute_all_streams werden alle aktuellen Streams stummgeschaltet, sowie alle zukünftigen Streams, die in einer Sitzung veröffentlicht werden. Diese Funktion akzeptiert auch eine Liste von Stream-IDs, die auszuschließen von der erzwungenen Stummschaltung auszuschließen.

  • Wenn ein Stream stummgeschaltet wird als Ergebnis von entweder mute_stream oder mute_all_streamswird, sendet das Publisher Objekt ein muteForced Ereignis in jedem Client, der einen stummgeschalteten Stream veröffentlicht.

  • Das Ausführen von disable_mute_all_streams wird die erzwungene Stummschaltung von neu veröffentlichten Streams - bestehende Streams bleiben stumm.

A screenshot showing a list of muted participants.

Entfernen eines Teilnehmers

Sie können einen Teilnehmer entfernen, indem Sie die disconnect_client API. In der Beispielanwendung definieren wir einen /remove-participant Endpunkt, der diese API aufruft. Die API benötigt eine Sitzungs-ID und eine Verbindungs-ID, um erfolgreich zu sein.

@app.route("/remove-participant", methods=["POST"])
def remove_participant():
    data = request.json
    session_id = data.get("sessionId")
    connection_id = data.get("connection_id")

    vonage_client.video.disconnect_client(session_id, connection_id)
    return (
        jsonify({"message": f"Participant {connection_id} removed successfully."}),
        200,
    )

Archivierungssitzungen

Es kann vorkommen, dass Sie eine Videositzung aufzeichnen möchten, um sie später anzusehen oder zu bearbeiten. Dies können Sie mit den archive Methoden im SDK, die die folgenden Funktionen umfassen:

  • Starten einer Archivaufzeichnung

  • Anhalten einer Archivaufzeichnung

  • Auflistung von Archivaufnahmen

  • Abrufen von Archivaufzeichnungsinformationen

  • Löschen eines Archivs

In diesem Blogbeitrag und in der beigefügten Beispielanwendung konzentrieren wir uns auf das Starten, Stoppen und Abrufen einer Archivaufzeichnung.

Um die Archivierungsmethoden verwenden zu können, müssen Sie eine Sitzung mit dem Modus Routed Media erstellen. Sie können ein Archiv nur für Sitzungen erstellen, mit denen mindestens ein Client verbunden ist.

In der Beispielanwendung definieren wir den folgenden Endpunkt, der ein CreateArchiveRequest Objekt erstellt, um die Archiveinstellungen zu erfassen, und dieses dann an die start_archive Funktion übergibt:

@app.route("/archive/start", methods=["POST"])
def start_archive():
    """Endpoint to start archiving"""
    data = request.get_json()
    session_id = data.get("sessionId")

    if not session_id:
        return jsonify({"error": "sessionId is required"}), 400
    if not session.get("is_presenter"):
        return jsonify({"error": "Unauthorized"}), 403

    archive_options = CreateArchiveRequest(session_id=session_id)
    archive: Archive = vonage_client.video.start_archive(archive_options)

    archive_id = archive.id

    return jsonify({"archive_id": archive_id, "status": archive.status})

Anhand der daraus resultierenden Archiv-ID können wir dann einen Endpunkt definieren, um die Archivaufzeichnung zu beenden:

@app.route("/archive/<archive_id>/stop", methods=["POST"])
def stop_archive(archive_id):
    """Endpoint to stop archiving"""

    if not archive_id:
        return jsonify({"error": "archiveId is required"}), 400

    archive: Archive = vonage_client.video.stop_archive(archive_id)
    return jsonify({"archive_id": archive.id, "status": archive.status})

A screenshot showing the recording options.

Wenn Sie die Aufzeichnung eines Archivs beenden, erstellt die Vonage Videoplattform eine MP4-Datei oder - im Falle einzelner Stream-Archive - eine ZIP-Datei. Sobald ein Archiv fertig ist, ändert sich sein Status auf availableund die get_archive Methode gibt die URL des Archivs zurück. Diese Methode wird in Verbindung mit dem Polling auf dem Frontend der Beispielanwendung verwendet, um einen Endpunkt zu definieren, der einen Link zum Archiv wiedergibt.

@app.get("/archive/<archive_id>/status")
def archive_status(archive_id):
    """Endpoint to check status of archive"""
    try:
        archive = vonage_client.video.get_archive(archive_id)
        return jsonify(
            {
                "status": archive.status,
                "url": archive.url,
            }
        )
    except Exception as e:
        return jsonify({"error": str(e)}), 500

Dieser Beispielcode veranschaulicht nur die Grundlagen der Archivaufzeichnung mit der Video API. Um mehr über die Möglichkeiten der Videoarchivierung zu erfahren, lesen Sie die Dokumentation.

Zusammenfassung

Das Python-SDK der Vonage Video API erleichtert die Entwicklung von Echtzeit-Videoanwendungen mit erweiterten Moderations- und Archivierungsfunktionen. In dieser Beispielanwendung haben wir untersucht, wie man Sitzungen erstellt, Teilnehmerberechtigungen verwaltet, Live-Untertitel aktiviert, Teilnehmer moderiert und Videositzungen zur späteren Wiedergabe aufzeichnet.

Diese Funktionen sind für moderne Videokonferenzen unverzichtbar, insbesondere bei Anwendungen, die Barrierefreiheit, Moderationskontrollen oder Sitzungspersistenz erfordern. Durch die Kombination des Python-SDK mit Flask und der Video API-Plattform können Entwickler schnell Prototypen erstellen und zuverlässige Echtzeit-Kommunikations-Workflows bereitstellen.

Durch die Kombination eines einfachen Flask-Backends mit einem JavaScript-gesteuerten Frontend erhalten Sie eine Vorlage für eine funktionierende Videokonferenz-App. Sie können diese Grundlage mit fortschrittlicheren Funktionen wie Moderationskontrollen, Aufzeichnung, Bildschirmfreigabe oder verbesserter UI/UX für Ihren Anwendungsfall erweitern. Für eine schnellere Iteration bietet der Vonage Video API Playground die Möglichkeit, verschiedene Funktionen direkt in Ihrem Browser auszuprobieren!

Weitere Lektüre und Ressourcen

Haben Sie eine Frage oder möchten Sie uns mitteilen, was Sie gerade bauen?

Bleiben Sie auf dem Laufenden und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden.

Teilen Sie:

https://a.storyblok.com/f/270183/400x400/2c4345217d/liz-acosta.jpeg
Liz AcostaAdvokat für Entwickler

Liz Acosta ist Developer Advocate bei Vonage. Ihr Karriereweg von der Filmstudentin über die Marketingspezialistin und die Ingenieurin zur Developer Advocate mag zwar unkonventionell erscheinen, ist aber ziemlich typisch für Developer Relations! Liz liebt Pizza, Pflanzen, Möpse und Python.