Skip to main content

Qwen-Audio-Realtime Conexión mediante AOQ

Qwen-Audio-Realtime Conexión mediante AOQ

AOQ transmite los medios de audio y los eventos del modelo en pistas independientes. El SDK se encarga de la captura, codificación, decodificación, transmisión y reproducción de audio; la aplicación envía los eventos del modelo mediante la pista Data y procesa las respuestas. Esta página usa las direcciones de transmisión de medios y el protocolo de eventos de Qwen-Audio-Realtime.

Á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.
  • Almacene la API Key únicamente en el servidor. No la incluya en una aplicación móvil ni en una aplicación de navegador.
  • Al capturar audio con un micrófono, solicite los permisos de micrófono de acuerdo con los requisitos de la plataforma.
  • Descargue el SDK de su plataforma desde Descargas del SDK.

Autenticación y credenciales de conexión

Para obtener un token por adelantado o consultar el flujo completo de autenticación, vea los detalles de autenticación de conexión.
Envíe la siguiente solicitud desde su AppServer. Primero configure la API Key como variable de entorno. Sustituya {WorkspaceId} en el dominio por el ID de su espacio de trabajo. Para otra región, use el dominio correspondiente indicado arriba. clientIp es opcional. Si se omite, el gateway usa la dirección IP desde la que recibe la solicitud.
export ENDPOINT="{WorkspaceId}.cn-beijing.maas.aliyuncs.com"
curl -X POST \
  "https://${ENDPOINT}/api/v1/webrtc/realtime?model=qwen-audio-3.1-realtime-plus" \
  -H "Authorization: Bearer ${DASHSCOPE_API_KEY}" \
  -H "Content-Type: application/json" \
  -H "x-dashscope-rtc-transport: moq" \
  -d '{}'
Para especificar la dirección IP pública del cliente, sustituya -d '{}' en el cuerpo de la solicitud por -d '{"clientIp":"<CLIENT_PUBLIC_IP>"}'.

Campos de la solicitud

Configuración

Valor

Descripción

endpoint

Seleccionar el dominio del endpoint para su caso de uso

Especifique el dominio del endpoint. Para obtener más información, consulte Seleccionar una región, un ámbito de implementación y un endpoint. Si usa Token Plan, establezca WorkspaceId en el dominio del endpoint en token-plan.

Content-Type

application/json

Tipo de medio del mensaje

Authorization

Bearer <YOUR_API_KEY>

Su API Key

x-dashscope-rtc-transport

moq

Seleccionar el protocolo AOQ

clientIp

Dirección IP pública del cliente

Opcional. Si se omite, el servicio usa la dirección IP desde la que el gateway recibe la solicitud. Si se especifica, usa clientIp. El servicio selecciona el mejor endpoint de Relay según la dirección IP del cliente.

Ejemplo de respuesta

{
    "sid": "1d06b55683db49bba67a407902f62d02:1782706970:69aecdc5...",
    "aoqTokenForClient": "ecc1a46015d5496ca4ff7a48281eb739",
    "clientRelayEndpoints": [{"endpoint": "121.199.XX.XX", "port": 8443, "route_index": 0}],
    "clientRelayCertFingerprint": "sha256/99843495...",
    "sidExpiresInSecs": 7200,
    "extraInfo": {"workspaceIdHash": "2021b6f98cea4cff"}
}

Campos de la respuesta

Field

Description

sid

Identificador único de la sesión.

aoqTokenForClient

Token de conexión del cliente. Pase este valor al campo token del SDK.

clientRelayEndpoints

Arreglo de endpoints de Relay. Cada elemento del ejemplo de respuesta contiene los siguientes campos:
endpointDirección del endpoint de Relay.portPuerto del endpoint de Relay.route_indexEl ejemplo de iOS que se muestra a continuación usa el índice del arreglo cuando este campo está ausente.

clientRelayCertFingerprint

Huella del certificado TLS de Relay.

sidExpiresInSecs

Tiempo de vencimiento de la sesión, en segundos.

extraInfo

Información adicional.
workspaceIdHashHash del ID del espacio de trabajo.

Ejemplo de conexión del SDK de cliente AOQ

clientIp es un campo opcional del cuerpo de la solicitud. Si no se especifica, se usa como IP del cliente la dirección IP que envía la solicitud al gateway de Model Studio. Si se especifica, el valor de clientIp tiene prioridad. Haga que su AppServer de negocio obtenga la dirección IP real del cliente y la transmita para obtener el mejor punto de acceso de Relay.
iOS (Swift)
let resp = try JSONDecoder().decode(AllocateResponse.self, from: responseData)

let config = AoqConnectConfig()
config.token = resp.aoqTokenForClient
config.sid = resp.sid
config.certFingerprint = resp.clientRelayCertFingerprint
config.relayEndpoints = resp.clientRelayEndpoints.enumerated().map { index, item in
    let ep = AoqRelayEndpoint()
    // Fall back to the array index when route_index is missing
    ep.routeIndex = item.routeIndex ?? index
    ep.endpoint = item.endpoint
    ep.port = item.port
    return ep
}
config.workspaceIdHash = resp.extraInfo?.workspaceIdHash ?? ""

let audioTrack = AoqTrackParam()
audioTrack.trackType = .audio
let dataTrack = AoqTrackParam()
dataTrack.trackType = .data
config.publishTracks = [audioTrack, dataTrack]
config.subscribeTracks = [audioTrack, dataTrack]

engine.connect(config)

Flujo de trabajo

Secuencia de conexión de AOQ
  1. Obtenga las credenciales de conexión mediante AppServer.
  2. Cree el motor del SDK y registre las funciones de callback.
  3. Configure las pistas de medios y Data, y desactive la transmisión ascendente de medios.
  4. Establezca la conexión de AOQ y espere a que se conecte.
  5. Configure el modelo de acuerdo con su protocolo. Tras recibir la confirmación, active los medios ascendentes necesarios.
  6. Desconéctese y libere los recursos cuando termine la interacción.
  • Los datos de medios de audio los administra AOQ SDK, que se encarga de su captura, procesamiento, envío, recepción y reproducción; el invocador debe transmitir y recibir Data de acuerdo con las definiciones de eventos del modelo de destino.
  • Una conexión exitosa indica que se ha establecido el canal de comunicación con el modelo. El cliente debe activar los medios ascendentes necesarios solo después de que termine la inicialización del modelo. Para el modelo de ejemplo qwen-audio-3.1-realtime-plus que se presenta aquí, envíe session.update, espere session.updated y después inicie la transmisión de medios.

1. Obtener credenciales de conexión

El cliente solicita las credenciales a su AppServer. AppServer llama al endpoint de conexión Realtime de este modelo e incluye la API Key y x-dashscope-rtc-transport: moq en la solicitud al gateway. Para consultar el endpoint completo, la solicitud y las descripciones de los campos, consulte Autenticación mediante token. Asigne la respuesta a AoqConnectConfig:
Respuesta de la puerta de enlaceConfiguración del SDK
aoqTokenForClienttoken
sidsid
clientRelayCertFingerprintcertFingerprint
clientRelayEndpointsrelayEndpoints, convierta cada punto de acceso de acuerdo con la estructura
extraInfo contiene workspaceIdHashworkspaceIdHash
Obtenga credenciales nuevas para cada conexión nueva. La posibilidad de reutilizar una sesión o iniciar otra tarea dentro de la misma conexión depende del protocolo del modelo de destino.

2. Inicializar el SDK y registrar devoluciones de llamada

Cree el motor y registre las funciones de callback para el estado de la conexión, los mensajes Data y los errores. El siguiente ejemplo usa Swift en iOS:
let createConfig = AoqCreateConfig()
createConfig.workDir = workDir
createConfig.enableDumpAudio = false
engine = AoqClientEngine.createEngine(createConfig, delegate: self)
Implemente AoqEngineDelegate; mantenga el estado de la conexión en onConnectionStatusChange; analice los eventos del modelo de destino en onDataMsg; y maneje los errores del SDK en onError. Los eventos de error que devuelve el modelo también deben manejarse por separado dentro de la lógica de procesamiento de mensajes Data. Para consultar la interfaz del SDK y las descripciones de errores, consulte SDK por plataforma y Referencia de funciones.

3. Configurar el SDK

Seleccionar la dirección de medios

Las direcciones se definen con respecto al cliente. Configure únicamente las modalidades de entrada y salida que necesita su aplicación. No agregue pistas para direcciones que no se utilicen.
DirecciónConfiguraciónUso típico
enviar audiopublique la pista Audio, establezca el codificador de audio y configure la captura integrada o externaconversación de voz
recibir audiosuscríbase a la pista Audio, establezca el decodificador de audio y configure el reproductor o la reproducción externarespuesta de voz
La pista Data es independiente de la dirección del audio: publique la pista Data para enviar eventos del modelo y suscríbase a ella para recibir respuestas. La entrada o salida de solo texto también requiere la pista Data.

Direcciones de medios para este modelo

La siguiente tabla enumera las direcciones de medios para este modelo. Consulte el Ámbito de aplicación para conocer el alcance del modelo; para otros métodos de conexión, consulte Qwen-Audio-Realtime.
Modelo o aplicaciónEnviar audioRecibir audioEnviar videoRecibir video
Qwen-Audio-RealtimeActive para conversaciones de vozActive cuando se necesite una respuesta de vozNo se puede activarNo se puede activar

Configurar parámetros de medios y pistas

Configure por separado el audio ascendente y descendente: use setAudioEncoderConfig para el audio ascendente y setAudioDecoderConfig para el audio descendente. Estos parámetros controlan la transmisión de red; el gateway convierte el audio al formato que requiere el modelo. Configure la codificación de transporte y el formato de audio de los eventos del modelo según los requisitos del SDK y del modelo de destino, respectivamente. Inicie startAudioCapture o startAudioPlayer según la dirección. La entrada y la salida personalizadas se describen en la sección de funciones avanzadas que aparece más adelante. El cliente envía las pistas de publishTracks y recibe las de subscribeTracks:
ScenariopublishTrackssubscribeTracks
conversación de vozAudio, DataAudio, Data
Desactive los medios ascendentes antes de conectarse para evitar que la entrada llegue al modelo antes de que esté listo:
engine.enableSendMediaStream(.audio, enable: false)
La captura, la publicación de pistas y la autorización de envío son operaciones independientes. Desactivar la transmisión no detiene la captura local ni afecta los eventos Data. Activar la transmisión no crea pistas que no se hayan agregado.

4. Establecer la conexión

Introduzca las credenciales y la configuración de pistas en AoqConnectConfig y después llame a:
engine.connect(connectConfig)
Espere a que onConnectionStatusChange devuelva .connected y después continúe con el proceso de inicialización del modelo. El retorno de la llamada a connect no significa que la conexión se haya establecido correctamente.

5. Intercambiar eventos del modelo y medios

Enviar y analizar eventos del modelo

El cliente envía eventos mediante la pista Data. El siguiente fragmento usa Swift en iOS; para consultar otras interfaces, consulte Referencia del SDK de iOS:
// Build eventJSON according to the target model client event protocol.
let msg = AoqDataMsg()
msg.data = eventJSON.data(using: .utf8)!
engine.send(msg)
Analice la respuesta en onDataMsg. Este modelo identifica los tipos de eventos mediante el campo type. Los campos completos, los parámetros y las condiciones de finalización deben ajustarse a la documentación del modelo de destino.

Habilitar medios después de que el modelo esté listo

Cuando el modelo, la sesión o la tarea actuales cumplan sus condiciones de disponibilidad, active únicamente las direcciones ascendentes configuradas. Para la entrada de voz, llame a:
engine.enableSendMediaStream(.audio, enable: true)
El audio se transmite mediante la pista Audio; los eventos del modelo y el texto se transmiten mediante la pista Data. No use input_audio_buffer.append para volver a enviar el audio. El audio descendente se procesa mediante el reproductor configurado o la lógica de reproducción externa.

6. Finalizar la interacción y liberar recursos

Cuando la conexión ya no sea necesaria, llame desde su aplicación a las interfaces de desconexión y liberación de recursos de AOQ SDK:
engine.disconnect()
AoqClientEngine.destroy()
Tras una desconexión inesperada, borre el estado de disponibilidad de la aplicación y siga Administración del estado de la conexión. Inicialice de nuevo el modelo después de reconectarse.

Enviar y recibir eventos mediante el canal Data

El cliente envía y recibe eventos del modelo mediante la pista Data de AOQ SDK. Durante la conexión, es necesario publicar la pista Data y suscribirse a ella; al enviar, serialice el evento del modelo en AoqDataMsg y llame a la interfaz de envío de Data de la plataforma; al recibir, analice el mensaje en la función de callback onDataMsg. Consulte SDK por plataforma para obtener detalles de las interfaces. 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.
Modelo o aplicaciónEventos del cliente (envío)Eventos del servidor (recepción)
Qwen-Audio-RealtimeEventos del clienteEventos del servidor
Siga también estas reglas:
  • Use el campo type de 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.
  • Antes de terminar, complete el envío de la entrada y la recepción de resultados según la documentación de eventos de este modelo; si se requiere la reproducción completa, libere la conexión solo después de procesar todo el audio en la cola local.
  • 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.

Funciones avanzadas

CapacidadCaso de usoDocumentación
Controlar la transmisión de audioesperar a que el modelo esté listo y pausar el audio ascendenteAdministración de la transmisión de flujos de medios
Dispositivos y procesamiento de audiocodificación/decodificación, altavoces, mezcla de archivos y funciones de callback de fotogramas de audioFunciones comunes de audio
entrada de audio externausar una fuente de audio del lado del clientecaptura de audio personalizada
salida de audio externase procesa o reproduce del lado del clientereproducción de audio personalizada
Para consultar las interfaces generales de video de AOQ SDK, consulte Funciones comunes de video (SDK general) y Entrada de video personalizada (SDK general); este modelo no admite entrada ni salida de video. Los controles de transmisión de medios solo afectan los medios. La cancelación de respuestas del modelo y el envío de turnos siguen requiriendo los eventos del modelo de destino.

Ejemplo de configuración de sesión

Los siguientes ejemplos se aplican a qwen-audio-3.1-realtime-plus. El audio se transmite mediante la pista de medios; no use los eventos de transmisión de medios de WebSocket.
{
  "type": "session.update",
  "session": {
    "voice": "longanqian_v3.1"
  }
}

Descarga del SDK AOQ

Las notas de versión que aparecen a continuación describen las funciones generales de AOQ SDK; el ámbito de medios admitidos por este modelo se detalla arriba en Direcciones de medios para este modelo.
VersiónPlataformaDescargaFecha de lanzamientoNotas de la versión
v1.4.0AndroidAoqClientSdk-release.aarlibPluginOpus.zip2026-10-27
  1. Se agregó compatibilidad con video H.264 proporcionado externamente.
  2. Se mejoró el rendimiento.
  3. Se corrigieron problemas de estabilidad conocidos.
iOSAoqClientSdk.framework.zipAoqScreenShare.framework.zipPluginOpus.framework.zip
HarmonyOSAoqClientSdk.harlibPluginOpus.zip
WindowsAoqClientSdk-windows-x64.zip
macOSAoqClientSdk.framework.zipPluginOpus.framework.zip
Electronaoq-electron-sdk-1.4.0-59463182.tgzTambién puede instalarlo mediante npm:npm install aoq-electron-sdk@1.4.0-59463182
Linuxx86_64: AoqClientSdk.ziparm64: AoqClientSdk.zip
v1.3.0Android2026-09-18
  1. Se agregó compatibilidad para compartir pantalla.

  2. Bitcode obsoleto.

  3. Se agregó compatibilidad para cargar remotamente bibliotecas .so.

  4. Se agregó compatibilidad para configurar externamente el valor máximo de los fotogramas codificados.

  5. Se cambió el códec predeterminado a Opus.

  6. Rendimiento mejorado.

  7. Se corrigieron problemas de estabilidad conocidos.

iOS
HarmonyOS
WindowsAoqClientSdk-windows-x64.zip
macOS
Electron
O instálelo con npm: npm install aoq-electron-sdk@1.3.0-58586345
Linux
v1.2.2iOSAoqClientSdk.framework.zip2026-09-09
  1. Se corrigió un problema por el cual una llamada en iOS no podía reanudarse después de una interrupción del sistema o al finalizar una llamada de voz de terceros.

  2. Mejora de la cancelación de eco al inicio de las llamadas en iOS.

v1.2.0Android 2026-08-17
  1. Se agregó compatibilidad con macOS

  2. Se agregó compatibilidad con Windows

  3. Se agregó compatibilidad con Electron

  4. Se agregaron API de Python y C++ para Linux

  5. Se agregó detección de nivel de volumen

  6. Rendimiento mejorado

  7. Se corrigieron problemas de estabilidad conocidos

iOS
HarmonyOS
Windows
macOS
Electron
Alternativamente, instálelo usando npm: npm install aoq-electron-sdk@1.2.0-57407598
Linux
v1.1.0Android 2026-07-31
  1. Compatible con modelos ASR

  2. Compatible con modelos TTS

  3. Compatible con el kit de herramientas de interacción multimodal

  4. Se agregó compatibilidad con la plataforma Linux

  5. Rendimiento mejorado

  6. Se corrigieron problemas de estabilidad conocidos

iOS
HarmonyOS
LinuxAoqClientSdk.zip
v1.0.1Android 2026-07-09
  1. Acceso a modelos y aplicaciones mediante el protocolo AOQ

  2. Parámetros de códec de audio y video

  3. Captura y reproducción de dispositivos de audio y video

  4. Captura de audio externa personalizada

  5. Captura de video externa personalizada

  6. Codificación de video externa personalizada

  7. Control de envío de transmisión de medios

iOS
HarmonyOS
AOQ carga el códec Opus como un complemento de audio. Para usar la codificación o decodificación de Opus, descargue el complemento de Opus y agréguelo a su proyecto.

Referencias de eventos

Tutoriales por escenario