Qwen-Audio-Realtime Conexión mediante WebRTC
WebRTC usa pistas de medios para transmitir audio y DataChannel para transmitir eventos del modelo y texto. El cliente web puede usar la API nativa del navegador, mientras que los demás clientes pueden usar bibliotecas compatibles con WebRTC estándar. Model Studio no proporciona un SDK de WebRTC específico.
Este documento proporciona el procedimiento de integración de WebRTC para este modelo y un ejemplo completo del lado del navegador.
Este documento está dirigido a Qwen-Audio-Realtime. Las instrucciones de integración existentes abarcan qwen-audio-3.1-realtime-plus, qwen-audio-3.1-realtime-flash, qwen-audio-3.0-realtime-plus y qwen-audio-3.0-realtime-flash. El modelo del ejemplo es
El navegador envía una Offer SDP al AppServer de negocio. AppServer reenvía la siguiente solicitud con la API Key y devuelve la Answer SDP sin cambios al navegador; las API Keys de larga duración no llegan al frontend.
El siguiente es un ejemplo completo del lado del navegador. Primero implemente la interfaz
AppServer configura el intercambio de SDP para el modelo, la región y el espacio de trabajo objetivo. Los siguientes parámetros se aplican a conexiones Realtime estándar. Para parámetros específicos de la aplicación, siga la mejor práctica correspondiente.
Los detalles completos de región, dirección y autenticación se encuentran en Autenticación e intercambio de SDP. La interfaz del AppServer de negocio la implementa la propia empresa y no forma parte de la API del SDK de Model Studio.
En el entorno web, cree una
Las direcciones son relativas al cliente. Los transceptores WebRTC negocian el envío y la recepción:
Por ejemplo, las conversaciones de voz suelen usar audio bidireccional. La Offer SDP debe incluir la sección de medios de audio
Esta tabla describe las direcciones de medios requeridas por la aplicación; no garantiza que cada combinación pueda negociarse de forma independiente. La configuración depende del modelo objetivo y de las capacidades de negociación del servidor.
Negocie las direcciones necesarias antes de crear la oferta. Para modelos que requieren confirmación de inicialización, reserve capacidades de envío sin adjuntar pistas capturadas. Una vez que el modelo esté listo, utilice
El siguiente ejemplo muestra voz bidireccional. Dos opciones en
Cree un DataChannel antes de crear una Offer para que el SDP incluya la negociación del canal de datos. Consulte Envío y recepción de eventos del canal Data para conocer cómo el cliente y el servidor manejan la creación de canales.
DataChannel se encarga de enviar los eventos de inicialización del modelo, texto y control, y de recibir los resultados, estados y errores del modelo. La pista de medios se encarga de transmitir el audio.
El ejemplo completo crea un canal de eventos del cliente y registra la función de callback del canal del servidor antes de crear una Offer.
Complete la conexión en el siguiente orden:
Escuche
Cuando la conexión y el canal de eventos estén disponibles, inicialice el modelo objetivo según su protocolo. Almacene los eventos de inicialización del servidor y combínelos con el estado del canal para avanzar en el flujo; no asuma un orden fijo de llegada de callbacks.
Por ejemplo, al configurar un modelo con
El siguiente ejemplo muestra el flujo
Cuando el modelo esté listo, adjunte la pista de audio ascendente necesaria. Maneje la salida del modelo mediante la función de callback de la pista remota y analice continuamente los eventos que devuelve DataChannel.
Cuando ya no se necesite la conexión, detenga las pistas de captura locales propiedad de su aplicación, cierre los DataChannels y la
Verifique que el canal esté
Utilice la misma función de enlace para canales creados por el cliente y por el servidor. Esta gestiona el transporte y el análisis JSON;
Siga también estas reglas:
Ámbito de aplicación
Este documento está dirigido a Qwen-Audio-Realtime. Las instrucciones de integración existentes abarcan qwen-audio-3.1-realtime-plus, qwen-audio-3.1-realtime-flash, qwen-audio-3.0-realtime-plus y qwen-audio-3.0-realtime-flash. El modelo del ejemplo es qwen-audio-3.1-realtime-plus.
- Use la API Key y el ID del espacio de trabajo correspondientes a la región y al espacio de trabajo seleccionados.
- Dominio de Pekín:
{WorkspaceId}.cn-beijing.maas.aliyuncs.com; dominio de Singapur:{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com. - Las API Keys de larga duración se almacenan en el servidor y no deben incluirse en aplicaciones móviles ni de navegador. Para obtener instrucciones sobre la generación de API Keys temporales y sus permisos, consulte Generar una API Key temporal.
Autenticación e intercambio de SDP
El navegador envía una Offer SDP al AppServer de negocio. AppServer reenvía la siguiente solicitud con la API Key y devuelve la Answer SDP sin cambios al navegador; las API Keys de larga duración no llegan al frontend.
- Método:
POST - Dirección de Pekín:
https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/webrtc/realtime?model=qwen-audio-3.1-realtime-plus - Dirección de Singapur:
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/webrtc/realtime?model=qwen-audio-3.1-realtime-plus - Encabezados de la solicitud:
Authorization: Bearer <API_KEY>,Content-Type: application/sdp - Cuerpo de la solicitud: cadena Offer SDP.
- Respuesta exitosa: HTTP 200, con la Answer SDP en el cuerpo; si se produce un error, se devuelve un código 4xx.
/api/realtime/sdp hace referencia a una interfaz personalizada del AppServer de negocio, que debe implementar el proceso de reenvío descrito arriba; no es una URL proporcionada por Model Studio.
Flujo de trabajo

- Prepare la clave de API y los parámetros del modelo objetivo en AppServer.
- Crear el objeto de conexión del cliente y registrar devoluciones de llamada.
- Configure las direcciones de medios y los DataChannels sin adjuntar pistas de medios ascendentes.
- Intercambie SDP a través de AppServer y espere a que la conexión y el canal de eventos estén listos.
- Configure el modelo según su protocolo. Adjunte las pistas de medios ascendentes necesarias después de la confirmación.
- Detenga la captura, cierre la conexión y libere los recursos cuando la interacción haya terminado.
- El audio se transmite mediante las pistas de medios de WebRTC; la aplicación debe obtener la pista de audio local, vincular el reproductor remoto y enviar y recibir mensajes de DataChannel según las definiciones de eventos del modelo de destino.
- La autenticación de WebRTC se realiza durante el intercambio de SDP; no se requiere ningún token AOQ. Utilice AppServer como proxy para la autenticación y el SDP a fin de mantener la clave API de largo plazo fuera del código frontend.
-
Una conexión exitosa indica que se ha establecido el canal de transmisión, pero no significa que el modelo haya completado la inicialización. Al usar
qwen-audio-3.1-realtime-plusen esta página, inicie los medios ascendentes necesarios solo después de enviarsession.updatey recibirsession.updated.
Ejemplo completo
El siguiente es un ejemplo completo del lado del navegador. Primero implemente la interfaz /api/realtime/sdp del AppServer de negocio como se describe en Autenticación e intercambio de SDP; después abra esta página HTML desde el mismo origen que el AppServer, con el mismo protocolo, host y puerto. Por ejemplo, tanto la página como /api/realtime/sdp se sirven desde http://localhost:3000. El servidor almacena la API Key y reenvía el SDP; no incluya API Keys de larga duración en la página. Haga clic en “Start” para establecer la conexión y en “End” para liberar los recursos al terminar la interacción. Este ejemplo establece una conexión a la vez; vuelva a cargar la página para iniciar otra sesión.
1. Preparar autenticación y parámetros de conexión
AppServer configura el intercambio de SDP para el modelo, la región y el espacio de trabajo objetivo. Los siguientes parámetros se aplican a conexiones Realtime estándar. Para parámetros específicos de la aplicación, siga la mejor práctica correspondiente.
| Setting | Value |
|---|---|
| Método | POST |
| URL | https://{endpoint}/api/v1/webrtc/realtime?model={model_name} |
Content-Type | application/sdp |
Authorization | Bearer <API_KEY> |
| Cuerpo de la solicitud | Offer SDP |
| Respuesta exitosa | Answer SDP |
2. Inicializar el objeto de conexión y registrar las funciones de callback
En el entorno web, cree una RTCPeerConnection; en otras plataformas, inicialice la biblioteca correspondiente. Antes de establecer la conexión, registre los siguientes controladores:
- Cambios de estado de la conexión: determine si la conexión se estableció correctamente, falló o se desconectó.
- Creación, apertura, mensajes y cierre de DataChannel: transporta los eventos del modelo.
- Pista de medios remota: recibe y reproduce audio, o maneja otros medios admitidos por la aplicación de destino.
txt, por lo que debe manejar la función de callback datachannel.
3. Configurar direcciones de medios y DataChannels
Seleccionar la dirección de audio
Las direcciones son relativas al cliente. Los transceptores WebRTC negocian el envío y la recepción: sendrecv es bidireccional, sendonly solo envía y recvonly solo recibe. Las capacidades disponibles también dependen de la respuesta SDP del servidor y de la compatibilidad del modelo.
| Dirección | Configuración |
|---|---|
| Enviar audio | Negocie el envío de audio y prepare el micrófono o una pista de audio externa. Agregue la pista cuando el modelo esté listo. |
| Recibir audio | Negocie la recepción de audio y configure la reproducción en el callback de recepción de una pista remota. |
m=audio; no elimine esta sección solo porque la aplicación no necesite reproducir audio.
Direcciones de medios para este modelo
| Modelo o aplicación | Enviar audio | Recibir audio | Enviar video | Recibir video |
|---|---|---|---|---|
| Qwen-Audio-Realtime | Active para conversaciones de voz | Active cuando se necesite una respuesta de voz | No se puede activar | No se puede activar |
Preparar medios sin enviarlos
Negocie las direcciones necesarias antes de crear la oferta. Para modelos que requieren confirmación de inicialización, reserve capacidades de envío sin adjuntar pistas capturadas. Una vez que el modelo esté listo, utilice replaceTrack en el remitente correspondiente para iniciar la transmisión. Registre previamente los controladores de recepción de medios.
Configure el envío y la recepción de audio por separado según sea necesario; no combine la activación del micrófono, la reproducción de audio y la inicialización del modelo en una sola operación.
Ejemplo de configuración de medios
El siguiente ejemplo muestra voz bidireccional. Dos opciones en media controlan el envío y la recepción de audio, respectivamente; addTransceiver negocia la dirección de antemano y la pista capturada se almacena primero de forma local hasta que el modelo esté listo, momento en que se adjunta al emisor.
Consulte el código en el ejemplo completo.
Crear canales de eventos
Cree un DataChannel antes de crear una Offer para que el SDP incluya la negociación del canal de datos. Consulte Envío y recepción de eventos del canal Data para conocer cómo el cliente y el servidor manejan la creación de canales.
DataChannel se encarga de enviar los eventos de inicialización del modelo, texto y control, y de recibir los resultados, estados y errores del modelo. La pista de medios se encarga de transmitir el audio.
El ejemplo completo crea un canal de eventos del cliente y registra la función de callback del canal del servidor antes de crear una Offer.
4. Establecer la conexión
Complete la conexión en el siguiente orden:
- Llame a
createOfferysetLocalDescription. - Recopile información de candidatos según los métodos ICE admitidos por el servidor; en este ejemplo, el SDP local se envía después de que termine la recopilación de ICE.
- Envíe el SDP local al AppServer de negocio, que usa la API Key para llamar a la interfaz de intercambio de SDP de Model Studio.
- Verifique el estado HTTP y, si la solicitud es exitosa, llame a
setRemoteDescriptioncon la Answer SDP devuelta. - Espere a que el estado de la conexión indique éxito y confirme que el DataChannel que se usa para enviar eventos del modelo esté abierto.
setRemoteDescription solo indica que se completó el paso de negociación correspondiente; no demuestra directamente que la conexión de medios se haya establecido. Tampoco se pueden enviar eventos del modelo cuando DataChannel no está en estado open.
Código de conexión y funciones de callback de estado
Escuche connectionstatechange para determinar el estado de la conexión y icegatheringstatechange para esperar el SDP local completo. La inicialización del modelo también requiere el estado open de DataChannel y el evento de disponibilidad del modelo; no debe basarse únicamente en la finalización del intercambio de SDP.
El ejemplo completo realiza el intercambio de SDP mediante startSession() y maneja el resultado de la conexión mediante la función de callback del estado de la conexión.
El AppServer de negocio debe reenviar la Offer con la dirección y los encabezados de solicitud de la sección 1; se espera que la API de ejemplo devuelva texto SDP sin formato. No pase directamente a setRemoteDescription contenido que incluya encabezados de respuesta HTTP, registros o contenedores JSON.
5. Intercambiar eventos del modelo y medios
Inicializar el modelo
Cuando la conexión y el canal de eventos estén disponibles, inicialice el modelo objetivo según su protocolo. Almacene los eventos de inicialización del servidor y combínelos con el estado del canal para avanzar en el flujo; no asuma un orden fijo de llegada de callbacks.
Por ejemplo, al configurar un modelo con session.update, construya el evento según su protocolo y espere la confirmación de configuración antes de enviar la entrada. Los parámetros de voz, modalidades de salida, VAD y frecuencia de muestreo deben provenir de la documentación del modelo actual.
session.created indica que se creó la sesión; no debe interpretarse siempre como que la configuración ya se aplicó. Para los modelos que requieren confirmación de la configuración de sesión, espere session.updated.
Las definiciones de los eventos del modelo se encuentran en Eventos del cliente y Eventos del servidor. Maneje la transmisión de medios y los modos disponibles como se describe en esta página.
Ejemplos de eventos del modelo
El audio se transmite mediante la pista de medios y no usa el evento de envío de medios de WebSocket.
session.created → session.update → session.updated para qwen-audio-3.1-realtime-plus. Configure los campos según la referencia de eventos del modelo. Adjunte la pista de audio ascendente solo después de recibir session.updated, que confirma que terminó la configuración.
Consulte el código en el ejemplo completo.
Para el modelo de ejemplo qwen-audio-3.1-realtime-plus, activar la salida de audio permite supervisar el estado de generación de audio del modelo mediante response.audio.done; este evento no indica que el cliente haya terminado de reproducir el audio.
Iniciar transmisión y recepción de medios
Cuando el modelo esté listo, adjunte la pista de audio ascendente necesaria. Maneje la salida del modelo mediante la función de callback de la pista remota y analice continuamente los eventos que devuelve DataChannel.
-
El audio viaja a través de pistas de medios RTP; no se requiere el evento
input_audio_buffer.append. - Los DataChannels transportan eventos de texto, estado, control y error.
startSendingMedia() adjunta la pista ascendente y ontrack procesa los medios recibidos.
6. Finalizar interacción y liberar recursos
Cuando ya no se necesite la conexión, detenga las pistas de captura locales propiedad de su aplicación, cierre los DataChannels y la RTCPeerConnection, libere los reproductores y borre el estado de la aplicación.
Restablezca el estado de disponibilidad del modelo tras una desconexión fallida o inesperada. Inicialice el modelo nuevamente en una nueva conexión en lugar de reutilizar el estado de sesión de la conexión anterior.
En el ejemplo completo, endSession() se encarga de liberar la conexión y los recursos de medios.
Llame a endSession() cuando el usuario haga clic en el botón de finalización o cierre la página.
Enviar y recibir eventos mediante el canal Data
Verifique que el canal esté open antes de llamar a send con un evento serializado. Analice los mensajes entrantes en su callback message, incluidos los eventos en canales creados por el servidor.
Los nombres, campos, parámetros y tiempos de envío de los eventos se ajustan a las definiciones de eventos del cliente del modelo de destino; el método de análisis, los cambios de estado, los resultados y el manejo de errores después de recibir mensajes se ajustan a las definiciones de eventos del servidor del modelo. Los eventos de inicialización se envían según los requisitos del modelo, y los eventos posteriores de texto y control se envían según las necesidades del negocio.
Ejemplo de DataChannel
Utilice la misma función de enlace para canales creados por el cliente y por el servidor. Esta gestiona el transporte y el análisis JSON; handleModelEvent en la sección 5 gestiona la semántica del modelo. Utilice sendModelEvent para la inicialización del modelo, texto o eventos de control únicamente cuando lo permita el protocolo del modelo.
En el ejemplo completo, sendModelEvent() y bindDataChannel() envían y reciben eventos.
En el ejemplo completo, el botón de inicio llama a startSession() y el botón de finalización llama a endSession(). Estas funciones se definen en este ejemplo y no son API integradas de WebRTC.
Definiciones de eventos de Qwen-Audio-Realtime
| Modelo o aplicación | Eventos del cliente (envío) | Eventos del servidor (recepción) |
|---|---|---|
| Qwen-Audio-Realtime | Eventos del cliente | Eventos del servidor |
-
Use el campo
typede los eventos para identificar los eventos del modelo y maneje los identificadores asociados según la referencia de eventos de este modelo. - Las operaciones que requiere el modelo, como la confirmación de inicialización, el envío de la entrada, la cancelación de respuestas y la finalización de tareas, se manejan en el canal Data de acuerdo con el protocolo correspondiente; constituyen la semántica de interacción del modelo y son independientes de la desconexión del transporte.
- Los datos de audio se transmiten por las pistas de medios. Al usar la referencia de eventos del modelo, siga esta página para la encapsulación de medios y los modos de interacción disponibles. No aplique directamente el método de WebSocket para enviar medios.