Describe cómo conectarse a la API en tiempo real en un navegador mediante WebRTC y JavaScript para habilitar llamadas de audio y video en tiempo real con el modelo qwen3.8-omni-flash-realtime.
WebRTC es adecuado para escenarios de voz de baja latencia basados en navegador. El audio se transmite directamente a través de UDP con cancelación de eco y reducción de ruido integradas. WebRTC solo admite el modo VAD del lado del servidor (
server_vad o semantic_vad). El modo manual no es compatible.Requisitos previos y notas
- Configure una clave de API y establézcala como variable de entorno.
- Utilice un navegador moderno compatible con WebRTC (Chrome, Edge, Firefox, Safari, etc.).
- El navegador debe tener permiso de micrófono. Para videollamadas, también se requiere permiso de cámara.
- Los navegadores no pueden enviar solicitudes de intercambio de SDP directamente al servidor debido a restricciones de CORS. En la demostración, ejecute el comando curl en una terminal para completar la conexión. En producción, esta restricción no aplica cuando la solicitud se procesa a través de un AppServer.
Implementar llamadas de audio/video con IA
El siguiente diagrama de secuencia muestra el flujo completo de llamada de audio/video WebRTC:
Diagrama de secuencia de llamada de audio/video WebRTC

Crear RTCPeerConnection
Invoque el constructor nativo RTCPeerConnection del navegador para crear una instancia de conexión. No es necesario configurar servidores ICE (el servidor gestiona la traversía NAT).
Obtener flujos multimedia locales
Utilice una única llamada a getUserMedia para solicitar audio (obligatorio) y video (opcional). La activación del video depende de la casilla de verificación Habilitar video del usuario.
Tanto el audio como el video se obtienen en una única
getUserMedia llamada, no por separado. La vista previa de video se ejecuta a 30 fps (para una vista previa local fluida); la tasa de fotogramas de envío se reduce a 2 fps mediante Canvas.Agregar pistas multimedia a PeerConnection
Agregar pista de audio:
session.created:
Esto equivale a
enableSendMediaStream(false) en otros SDK. No se debe restaurar el envío hasta que se reciba session.created.Crear DataChannel
Cree un DataChannel denominado oai-events para intercambiar eventos de control de sesión con el servidor de IA.
Generar SDP de oferta
Llame a createOffer() y establezca la descripción local. Espere a que finalice la recopilación de ICE antes de utilizar el SDP de oferta completo.
Espere a
iceGatheringState === "complete" antes de utilizar el SDP. En ese momento, el SDP contiene toda la información de candidatos ICE.Intercambiar SDP (mediante comando curl o AppServer)
Envíe el SDP de oferta al servidor y obtenga el SDP de respuesta. En la demostración, esto se realiza mediante un comando curl:
En producción, procese este paso a través de un AppServer para evitar exponer la clave de API en el front-end. Establezca
{endpoint} en {WorkspaceId}.cn-beijing.maas.aliyuncs.com para China (Beijing) o en {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com para Singapur. Reemplace {WorkspaceId} con su ID de espacio de trabajo y utilice la clave de API correspondiente a la misma región y espacio de trabajo.Establecer SDP de respuesta para establecer la conexión
Establezca el SDP de respuesta devuelto por el servidor como descripción remota para establecer la conexión WebRTC. Normalice el formato SDP antes de configurarlo:
La especificación SDP requiere saltos de línea
\r\n. normalizeSdpForSetRemote gestiona la compatibilidad de saltos de línea procedentes de diferentes orígenes.Configurar sesión de IA (session.update)
Una vez establecida la conexión, el servidor envía un evento session.created a través del DataChannel. Al recibirlo:
- Libere la puerta de enlace multimedia para restaurar el envío de audio y video
- Envíe
session.updatepara configurar los parámetros de la sesión
turn_detection.type puede configurarse como server_vad (detección basada en volumen) o semantic_vad (detección semántica). El modo VAD manual no es compatible con el modo WebRTC.Conversación en tiempo real
Una vez establecida la conexión, el audio y el video se transmiten en tiempo real a través de RTP. Las respuestas de voz remotas de la IA se reciben mediante la devolución de llamada ontrack y se reproducen. Se utiliza MediaRecorder para grabar las respuestas y poder descargarlas.
Recibir y grabar audio remoto:
session.created, response.audio_transcript.done, etc.) se muestran en el panel de eventos con soporte para expandirlos y ver el JSON completo:
Finalizar sesión y liberar recursos
Libere todos los recursos en orden al finalizar una llamada. El orden es importante:
Después de que finalice la sesión, utilice el botón Download remote audio para guardar la grabación de respuesta de la IA en formato WebM.
Notas importantes
- La puerta de enlace multimedia debe liberarse después de session.created: Los datos multimedia enviados antes de que el servidor envíe
session.createdse descartarán. UtilicereplaceTrack(null)para bloquear completamente el envío hasta ese momento. - La reducción de fotogramas de video se implementa mediante Canvas: La vista previa local se ejecuta a 30 fps; solo se envían 2 fps al servidor, controlados por
captureStream(2). Esto conserva el ancho de banda. - Normalización del formato SDP: Asegúrese de que los saltos de línea sean
\r\nantes de establecer el SDP de respuesta. De lo contrario,setRemoteDescriptionpodría fallar. - El video es opcional: Si el usuario no habilita el video, solo se solicita permiso de micrófono; no aparece ninguna solicitud de permiso de cámara.
- El audio remoto se graba automáticamente: MediaRecorder registra el flujo de audio de respuesta de la IA. Un archivo WebM está disponible para su descarga una vez finalizada la sesión.
- WebRTC solo admite VAD del lado del servidor: El modo
manualno es compatible. Utiliceserver_vad(detección de volumen) osemantic_vad(detección semántica).
Descargar la demostración completa
Descargue el código de ejemplo completo: webrtc_demo.html.
Documentos relacionados
- API de WebRTC (MDN)
- RTCPeerConnection (MDN)
- Eventos del cliente del modelo qwen3.8-omni-flash-realtime: Eventos del cliente
- Eventos del servidor del modelo qwen3.8-omni-flash-realtime: Eventos del servidor
- Acceder a un modelo o una aplicación mediante WebRTC