
Compartir:
Liz Acosta es promotora de desarrolladores en Vonage. Aunque su trayectoria profesional, de estudiante de cine a comercializadora, de ingeniera a defensora de los desarrolladores, puede parecer poco convencional, ¡es bastante típica de las relaciones con los desarrolladores! A Liz le encanta la pizza, las plantas, los carlinos y Python.
Subtítulos en directo, moderación y grabación con Python y Vonage
Tiempo de lectura: 14 minutos
Al final de esta entrada de blog, tendrás una comprensión más profunda del SDK de Python para la Video API de Vonage junto con algunos ejemplos de código que puedes usar como andamiaje para crear experiencias de videoconferencia basadas en navegador con muchas funciones.
Introducción
La pandemia de 2020 aceleró la adopción de la videoconferencia como herramienta estándar de comunicación. Hoy, las videoconferencias por Internet forman parte de la vida cotidiana de empresas, educadores y consumidores. Los desarrolladores pueden utilizar la API de Video de Vonage y SDK de Python para crear aplicaciones de videoconferencias seguras y en tiempo real con funciones de moderación, transcripción y grabación.
Con el tiempo, la tecnología ha evolucionado considerablemente, al igual que las exigencias que se le imponen. Las soluciones que antes parecían de vanguardia ahora se esperan como características básicas. Las plataformas de videoconferencia modernas deben ofrecer audio y vídeo de alta calidad, una conectividad fiable y una comunicación de baja latencia.
Esta entrada de blog explora el SDK de Python para la API de Video de Vonage y demuestra cómo crear funciones de moderación y archivo en una aplicación de videoconferencia. Cada una de las funciones tratadas se demuestra en una aplicación de muestra adjunta. Si eres completamente nuevo en la API de Video, puedes comenzar con este tutorial tutorial sobre la creación de una aplicación de videoconferencia. Si quieres pasar directamente al código, puedes poner en marcha la aplicación de ejemplo siguiendo el archivo README en el repositorio.
En concreto, esta entrada del blog trata de:
Subtitulado en directo
Silenciar a los participantes
Eliminación de participantes
Sesiones de grabación
Visualización de sesiones grabadas
Integrate live interactive video directly into your web, mobile, and desktop applications with the Vonage global video platform.
Comprender Flask y Tunneling
La aplicación de muestra en esta publicación del blog se basa en conceptos técnicos y herramientas fuera de Vonage que pueden ser útiles en otras áreas del desarrollo de software.
¿Qué es una aplicación Python Flask?
La aplicación de ejemplo de esta entrada del blog utiliza Flaskun framework web ligero pero potente para Python. Como framework, permite a los desarrolladores crear rápidamente una aplicación web. Lo hemos elegido para este tutorial por su facilidad de uso y su enfoque minimalista. A diferencia de otros marcos de desarrollo web de Python, nos da sólo lo esencial que necesitamos para crear una sencilla solución de videoconferencia.
¿Qué es la tunelización?
Dado que la aplicación de ejemplo se ejecuta localmente, no es accesible desde la Internet pública. Si su aplicación local no es accesible públicamente, los participantes remotos no podrán conectarse a la sesión de vídeo. Ahí es donde entra en juego la tunelización. La tunelización expone los servidores locales a la Internet pública a través de URL públicas temporales o estáticas. ngrok es una plataforma de software que ofrece este servicio. Puede obtener más información sobre ngrok en nuestro entrada de blog al respecto.
Video API Core Concepts (Conceptos básicos de la Video API)
Los usuarios finales esperan videollamadas fluidas, sin interrupciones y con un rendimiento impecable. Sin embargo, alcanzar este nivel de fiabilidad implica una complejidad considerable bajo la superficie.
La comunicación por Video en tiempo real presenta varios retos técnicos. Las personas que llaman se conectan a través de hardware diverso, operan a través de distintas infraestructuras de conectividad y abarcan múltiples regiones geográficas. Además, las condiciones de la red fluctúan durante las sesiones activas: un smartphone puede pasar de la conectividad Wi-Fi a los datos móviles, los protocolos de seguridad corporativos pueden restringir cierto tráfico del Protocolo de Datagramas de Usuario (UDP) o un ordenador antiguo puede sufrir cuellos de botella en el procesamiento.
La Video API de Vonage permite a los desarrolladores integrar video de alta calidad en tiempo real, mensajería instantánea, pantalla compartida y funciones relacionadas en aplicaciones web y móviles. Para ofrecer esta capacidad, la Video API aprovecha WebRTC como base para la transmisión de flujos de audio y vídeo. Los siguientes Concepts son importantes cuando se trabaja con la Video API:
Sesión: Una sesión es un grupo lógico de conexiones y flujos. Las conexiones de una misma sesión pueden intercambiar mensajes. Una sesión actúa como la sala virtual en la que se comunican los participantes.
Conexión: Un punto final que participa en una sesión y es capaz de enviar y recibir mensajes. Una conexión está conectada y puede recibir mensajes, o está desconectada y no puede recibir mensajes.
Corriente: Un flujo de medios circula entre dos conexiones. Se refiere a los bytes reales que contienen los medios que se intercambian. Los medios pueden consistir sólo en audio, o en audio y Video. También puede crear flujos personalizados y de pantalla compartida.
Ficha: La plataforma Video API utiliza tokens para la autorización, por lo que no tienes que preocuparte de crear usuarios en la plataforma. En esta aplicación de ejemplo, utilizamos tokens para crear participantes en sesiones de vídeo sobre la marcha.
Editorial: Se refiere al cliente que publica un flujo multimedia.
Abonado: Cliente que recibe flujos multimedia.
Señalización: Se refiere al envío de texto y datos entre clientes conectados a una sesión en forma de mensajes. Estos mensajes permiten a los desarrolladores construir un chat de texto básico, enviar instrucciones de un cliente a otro y crear otras experiencias valiosas.
Para profundizar en estos términos y conceptos clave, consulte el Glosario de la Video API o consulte la documentación de la Video API. También puede consultar nuestra introducción a la Video API en YouTube:
¿Cuál es la diferencia entre un SDK del lado del cliente y un SDK del lado del servidor?
La plataforma plataforma Video API permite integrar vídeo interactivo de alta calidad en tiempo real, mensajería, pantalla compartida y mucho más en aplicaciones web y móviles. La plataforma incluye bibliotecas cliente para web, móvil y plataforma de escritorio, así como SDK del lado del servidor.
¿Qué es un SDK?
SDK son las siglas de "kit de desarrollo de software". Un SDK es un paquete instalable de herramientas diseñadas para facilitar a los desarrolladores la implementación de una plataforma o tecnología en particular. El SDK de Python para la Video API facilita a los desarrolladores de Python la integración de Vonage en sus aplicaciones, ya que traduce la API a patrones y estructuras específicos del lenguaje.
Tanto los SDK del lado del cliente como los del lado del servidor proporcionan este tipo de herramientas. La diferencia radica en su ubicación dentro de la arquitectura de una aplicación. Los SDK del lado del cliente ayudan a los desarrolladores a crear interfaces de usuario, experiencias interactivas y funciones de comunicación en tiempo real. Por ello, los SDK del lado del cliente suelen estar escritos para JavaScript y sus marcos y bibliotecas, así como para sistemas operativos móviles y de escritorio.
Por el contrario, un SDK del lado del servidor proporciona herramientas para el desarrollo del backend. Esta es la parte de una aplicación responsable de gestionar las solicitudes, procesar los datos, la lógica empresarial adicional, la seguridad y la autenticación. Como su nombre indica, los SDK del lado del servidor ayudan a los desarrolladores a escribir software que se desplegará en un servidor (normalmente en la nube) y, por tanto, suelen estar escritos para Python, Java, Node.js o PHP.
La siguiente tabla ofrece un resumen de las diferencias entre los SDK del lado del cliente y del lado del servidor:
Del lado del cliente | Del lado del servidor | |
|---|---|---|
Colocar en Arquitectura de Applications |
|
|
Seguridad y autorización |
|
|
Lenguajes de programación |
|
|
En esta publicación del blog, cubriremos el SDK de Python para la Video API de Vonage. Es un SDK del lado del servidor que te permite crear y moderar sesiones, generar tokens y trabajar con archivos. Puedes leer más sobre cómo interactúan las Video API del lado del cliente y del lado del servidor en nuestra documentación.
Creación de una aplicación de videoconferencia con el SDK de Python
La aplicación de ejemplo que aparece en esta entrada del blog utiliza Python y Flask para el backend y JavaScript en el frontend para crear y coordinar una sesión de vídeo. La aplicación es compatible con las siguientes características:
Crear una sesión de Video
Permitir a los presentadores publicar streams
Permitir a los presentadores:
Activar subtítulos en directo
Silenciar o eliminar participantes
Iniciar el archivo de sesiones
Si desea poner en marcha el código, puede seguir el LÉAME del repositorio de aplicaciones de ejemplo repositorio de aplicaciones de ejemplo. La creación de sesiones y la habilitación del chat en tiempo real entre los participantes se tratan en nuestra entrada del blog sobre cómo crear una aplicación de videoconferencia.
Activar los subtítulos en directo
Los subtítulos en directo pueden mejorar la experiencia de usuario de una aplicación y la participación de los usuarios. Los subtítulos mejoran la puntuación de accesibilidad de su aplicación. Las normas de accesibilidad de algunas regiones pueden exigir el uso de subtítulos. Los subtítulos pueden mejorar la comprensión en entornos ruidosos o no controlados, mejorando la experiencia general del usuario.
Puede utilizar la API de subtítulos en directo para transcribir secuencias de audio y generar subtítulos en tiempo real para su aplicación. La API de subtítulos en directo para Video utiliza un servicio de transcripción para proporcionar subtítulos en tiempo real a los participantes en una sesión.
Tenga en cuenta lo siguiente: Live Captions es un producto basado en el uso. El uso se cobra en función del número de secuencias de audio de los participantes (o ID de secuencia) enviadas al servicio de transcripción. Para más información, consulte la página de precios de la API de subtítulos en directo.
Para poder utilizar los subtítulos en directo, la sesión debe crearse con la opción "Media Router y para activar los subtítulos, el participante necesita un token con el rol de "Moderador.
En el SDK de Python, estas opciones se manejan con SessionOptions y TokenOptions respectivamente:
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")
En el código de ejemplootorgamos a presenters la capacidad de habilitar subtítulos generando un token con el rol MODERATOR rol.
Para obtener más información sobre los tokens, los roles de los tokens y las capacidades de cada rol, consulte la documentación.
Los siguientes puntos finales son los que utilizamos para comunicarnos con el backend y enviar una solicitud a la API de subtítulos en directo. El endpoint para iniciar subtítulos utiliza un ID de sesión y un token para crear un objeto CaptionsOption que se pasa a la función start_options a la función La función devuelve un objeto CaptionsData objeto.
@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})El ID de los subtítulos se pasa al frontend y se utiliza para mostrar el audio transcrito en la interfaz de usuario. En la aplicación de ejemplo, los subtítulos aparecerán debajo del vídeo. Tenga en cuenta que los subtítulos pueden tardar un momento en aparecer.

Para obtener más información sobre la API Live Captions y ver ejemplos de código para su implementación en el frontend, consulte la documentación.
Moderación de sesiones: Silenciar y retirar a los participantes
Los moderadores pueden tener que controlar el audio de los participantes o el acceso a la sesión para mejorar la experiencia general de la reunión. Por ejemplo, un participante puede olvidarse de silenciar su micrófono, provocando distracciones de audio involuntarias durante una sesión; en el extremo de la moderación, puede ser necesario expulsar a un participante de la sesión por la fuerza. Un participante con privilegios de moderador tiene acceso a estas dos funciones con la Video API.
Silenciar a un participante
En la aplicación de ejemplo, definimos un endpoint de muting que realiza una llamada a la API. La API requiere un ID de sesión y un ID de flujo para tener éxito.
@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."}), 200Además, los participantes con el rol de Moderador pueden silenciar todos los flujos de flujos de una sesión y desactivar silenciar todos los flujos. La implementación de estas funciones está fuera del alcance de esta entrada de blog, pero puede encontrar ejemplos de código en la documentación documentación sobre el silenciamiento de participantes.
Al trabajar con los puntos finales de muting, es importante recordar algunos puntos:
No existe una API para desconectar a un único participante. Esto se debe a que en un caso típico de uso de una sesión de Video, los participantes se des-silenciarían ellos mismos cuando necesiten hablar.
Utilizando
mute_all_streamssilencia todos los flujos actuales, así como todos los flujos futuros publicados en una sesión. Esta función también acepta una lista de ID de flujos para excluir del silenciamiento forzado.Cuando se silencia un flujo como resultado de
mute_streamomute_all_streamsel objetoPublisherenvía un eventomuteForceden cada cliente que publique un flujo silenciado.Ejecutando
disable_mute_all_streamseliminará el silencio forzado de los nuevos flujos publicados - los flujos existentes permanecerán silenciados.

Dar de baja a un participante
Puede eliminar a un participante llamando a la disconnect_client API. En la aplicación de ejemplo, definimos un punto final /remove-participant que llama a esta API. La API requiere un ID de sesión y un ID de conexión para tener éxito.
@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,
) Archivar sesiones
Puede haber ocasiones en las que quieras grabar una sesión de Video para verla o procesarla más tarde. Puede hacerlo con los métodos archive del SDK, que incluyen las siguientes funciones:
Iniciar una grabación de archivo
Detener una grabación de archivo
Listado de grabaciones de archivo
Recuperación de información de registro de archivo
Borrar un archivo
En esta entrada del blog y en la aplicación de ejemplo que la acompaña, nos centraremos en iniciar, detener y recuperar una grabación de archivo.
Para poder utilizar los métodos de archivo, es necesario crear una sesión con el modo Routed Media. Sólo se puede crear un archivo para sesiones que tengan al menos un cliente conectado.
En la aplicación de ejemplo, definimos el siguiente endpoint, que crea un objeto CreateArchiveRequest para capturar la configuración del archivo y luego lo pasa a la función start_archive función
@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})Utilizando el ID de archivo resultante, podemos definir un punto final para detener la grabación del archivo:
@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})
Cuando dejas de grabar un archivo, la plataforma de video de Vonage crea un archivo MP4 o, en el caso de archivos de transmisión individuales, un archivo ZIP. Una vez que un archivo está listo, su estado cambia a availabley el método get_archive devuelve la URL del archivo. Este método se utiliza junto con el sondeo en el frontend de la aplicación de ejemplo para definir un punto final que muestra un enlace al archivo.
@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)}), 500Este código de ejemplo demuestra sólo lo básico de la grabación de archivos con la Video API. Para obtener más información sobre las posibilidades de archivado de vídeo, consulte la documentación documentación.
En resumen
El SDK Python de la Video API de Vonage facilita la creación de aplicaciones de video en tiempo real con capacidades avanzadas de moderación y archivo. En esta aplicación de ejemplo, exploramos cómo crear sesiones, administrar los permisos de los participantes, habilitar subtítulos en vivo, moderar a los participantes y grabar sesiones de video para su posterior reproducción.
Estas características son esenciales para las experiencias modernas de videoconferencia, especialmente en aplicaciones que requieren accesibilidad, controles de moderación o persistencia de sesión. Combinando el SDK de Python con Flask y la plataforma Video API, los desarrolladores pueden crear rápidamente prototipos y desplegar flujos de trabajo de comunicación en tiempo real fiables.
Combinando un sencillo backend Flask con un frontend basado en JavaScript, se obtiene una plantilla para una aplicación de videoconferencia operativa. Puede ampliar esta base con características más avanzadas, como controles de moderación, grabación, pantalla compartida o una interfaz de usuario/UX mejorada que se adapte a su caso de uso. Para una iteración más rápida, el Área de juegos de la Video API de Vonage te permite probar diferentes funciones directamente en tu navegador.
Otras lecturas y recursos
Prácticas recomendadas para comenzar con Vonage Video: Mejores prácticas para integrar la API de Video de Vonage en tus aplicaciones.
Archivado de Video con la API de Video de Vonage y React: Aprende cuatro modos de archivo de video con la API de Video de Vonage, incluido Experience Composer.
Primeros pasos con la API de subtítulos en directo de Vonage en Node.js: Aprende a agregar subtítulos en tiempo real a tus llamadas de Vonage Video usando la API de subtítulos en vivo con Node.js y una interfaz simple.
¿Tiene alguna pregunta o quiere compartir lo que está construyendo?
Suscríbase al Boletín para desarrolladores
Síguenos en X (antes Twitter) para estar al día
Ver tutoriales en nuestro canal de YouTube
Conéctese con nosotros en la página Vonage Developer en LinkedIn
Mantente conectado y entérate de las últimas noticias, consejos y eventos para desarrolladores.
Compartir:
Liz Acosta es promotora de desarrolladores en Vonage. Aunque su trayectoria profesional, de estudiante de cine a comercializadora, de ingeniera a defensora de los desarrolladores, puede parecer poco convencional, ¡es bastante típica de las relaciones con los desarrolladores! A Liz le encanta la pizza, las plantas, los carlinos y Python.