
Teilen Sie:
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.
Live-Untertitel, Moderation und Aufzeichnung mit Python und Vonage
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
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 |
|
|
Sicherheit und Autorisierung |
|
|
Programmiersprachen |
|
|
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.

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."}), 200Zusä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_streamswerden 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_streamodermute_all_streamswird, sendet dasPublisherObjekt einmuteForcedEreignis in jedem Client, der einen stummgeschalteten Stream veröffentlicht.Das Ausführen von
disable_mute_all_streamswird die erzwungene Stummschaltung von neu veröffentlichten Streams - bestehende Streams bleiben stumm.

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})
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)}), 500Dieser 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
Bewährte Praktiken für den Einstieg in Vonage Video: Best Practices für die Integration der Vonage Video API in Ihre Applikationen.
Video-Archivierung mit der Vonage Video API und React: Lernen Sie vier Video-Archivierungsmodi mit der Video API von Vonage kennen - einschließlich Experience Composer.
Erste Schritte mit der Vonage Live Captions API in Node.js: Erfahren Sie, wie Sie Ihren Vonage Video-Anrufen mit Hilfe der Live Captions API mit Node.js und einem einfachen Frontend Untertitel in Echtzeit hinzufügen können.
Haben Sie eine Frage oder möchten Sie uns mitteilen, was Sie gerade bauen?
Abonnieren Sie den Entwickler-Newsletter
Folgen Sie uns auf X (früher Twitter) für Updates
Sehen Sie sich die Tutorials auf unserem YouTube-Kanal
Verbinden Sie sich mit uns auf der Vonage Entwickler-Seite auf LinkedIn
Helfen Sie uns, unsere Entwicklererfahrung zu verbessern, indem Sie unser Feedback-Formular „Voice of the Developer“ aus.
Bleiben Sie auf dem Laufenden und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden.
Teilen Sie:
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.