Skip to main content

Qwen-Omni-Realtime Conexión mediante AOQ

Qwen-Omni-Realtime Conexión mediante AOQ

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

Ámbito de aplicación

Este documento está dirigido a Qwen-Omni-Realtime. La documentación de integración existente abarca qwen3.8-omni-flash-realtime, qwen3.5-omni-plus-realtime y qwen3.5-omni-flash-realtime. El modelo del ejemplo es qwen3.8-omni-flash-realtime.
  • 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 o video con una cámara, solicite los permisos necesarios según 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=qwen3.8-omni-flash-realtime" \
  -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.
  • El SDK de AOQ gestiona la captura, procesamiento, transmisión, recepción y reproducción de medios. Su aplicación debe enviar y recibir mensajes de datos conforme a las definiciones de eventos del modelo objetivo.
  • Una conexión exitosa indica que se estableció el canal de transmisió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 qwen3.8-omni-flash-realtime de esta página, envíe session.update y espere session.updated antes de iniciar 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 direcciones 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
envía audiopublica la pista Audio, establece el codificador de audio y configura la captura integrada o externaconversación de voz
recibe audiose suscribe a la pista Audio, establece el decodificador de audio y configura el reproductor o la reproducción externarespuesta de voz
envía videopublica la pista Video y configura la cámara o la entrada de video externa y los parámetros de codificaciónenvía video a modelos que admiten entrada visual
recibe videoeste modelo no admite salida de videono configure la suscripción de video
Las pistas de datos son independientes de estas cuatro direcciones: publique una pista de datos para enviar eventos del modelo y suscríbase para recibir respuestas. La entrada y salida de texto también requieren pistas de datos.

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 integración, consulte Qwen-Omni-Realtime.
Modelo o aplicaciónEnviar audioRecibir audioEnviar videoRecibir video
Qwen-Omni-Realtimeactive cuando se necesite entrada de vozactive cuando se necesite una respuesta de vozactive cuando se necesite entrada visualno 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, startAudioPlayer o startVideoCapture según sea necesario. Para entradas y salidas personalizadas, consulte Funciones avanzadas a continuación. El cliente envía las pistas de publishTracks y recibe las de subscribeTracks:
ScenariopublishTrackssubscribeTracks
conversación de vozAudio, DataAudio, Data
conversación de voz con entrada visualAudio, Video, 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)
engine.enableSendMediaStream(.video, 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)
Active .video solo cuando se requiera entrada de video. Transmita audio y video en sus pistas de medios, y eventos del modelo y texto en pistas de datos. Por ejemplo, Omni sobre AOQ no requiere input_audio_buffer.append ni input_image_buffer.append para volver a enviar los mismos medios. Gestione el audio descendente con el reproductor configurado o con 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-Omni-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 y video se transmiten mediante las pistas de medios. Al consultar la documentación de eventos del modelo, la encapsulación de medios y los modos de interacción disponibles siguen los métodos de conexión descritos aquí y no adoptan directamente el método de transmisión de medios de WebSocket.

Funciones avanzadas

CapacidadCaso de usoDocumentación
Controlar la transmisión de audio y video por separadoEsperar a que el modelo esté listo, pausar los medios en enlace ascendente o habilitar el video según sea necesarioGestión de la transmisión de medios
Dispositivos de audio y procesamientoCodificación, decodificación, altavoces, mezcla de archivos y devoluciones de llamada de tramas de audioFunciones comunes de audio
Entrada de audio externaUtilizar una fuente de audio proporcionada por la aplicaciónCaptura de audio personalizada
Salida de audio externaProcesar o reproducir audio de salida en su aplicaciónReproducción de audio personalizada
Captura y entrada de videoUtilizar una cámara o imágenes proporcionadas por la aplicaciónFunciones de video comunes, Entrada de video personalizada
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

El siguiente ejemplo se aplica a qwen3.8-omni-flash-realtime. El audio y el video se transmiten mediante las pistas de medios; no se usan los eventos de envío de medios de WebSocket.
{
  "type": "session.update",
  "session": {
    "modalities": [
      "text",
      "audio"
    ],
    "voice": "Tina",
    "turn_detection": {
      "type": "server_vad"
    }
  }
}

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