Describe cómo integrar el SDK de cliente de AOQ en Android, iOS y HarmonyOS para implementar llamadas de audio y video mediante AOQ y qwen3.8-omni-flash-realtime.
Obtener el SDK
Para el AOQ Client SDK y el complemento de audio Opus, consulte Descarga del SDK. Este ejemplo utiliza Opus y requiere el complemento Opus.
Importar el SDK
Copie los archivos principales del SDK al directorio de dependencias de su proyecto y declare los permisos necesarios en la configuración de su proyecto.
Android
Coloque AoqClientSdk-release.aar en el directorio app/libs/ de su proyecto. Coloque libPluginOpus.so por ABI en app/libs/armeabi-v7a/ y app/libs/arm64-v8a/. En app/build.gradle:
AndroidManifest.xml:
RECORD_AUDIO y CAMERA son permisos de tiempo de ejecución. Su aplicación debe llamar a ActivityCompat.requestPermissions() de Android en tiempo de ejecución para solicitar la autorización del usuario.
iOS (framework)
-
Arrastre
AoqClientSdk.frameworkyPluginOpus.frameworka su proyecto de Xcode. En Target > General > Frameworks, Libraries, and Embedded Content, seleccione Embed & Sign. -
Declarar permisos: en Xcode, seleccione su Target > Info > Custom iOS Target Properties y agregue las siguientes dos descripciones de uso de permisos:
Clave
Valor
NSMicrophoneUsageDescriptionPara llamadas de voz en tiempo real
NSCameraUsageDescriptionPara videollamadas en tiempo real
-
Proyecto Swift:
import AoqClientSdk. Proyecto Objective-C:#import <AoqClientSdk/AoqClientSdk.h>.
HarmonyOS (har)
- Coloque
aoq-client-sdk.haren el directoriolibs/de su proyecto. ColoquelibPluginOpus.sopor ABI enentry/libs/armeabi-v7a/yentry/libs/arm64-v8a/. Declare la dependencia enentry/oh-package.json5. - Agregue permisos en
entry/src/main/module.json5:
- En
EntryAbility, active la autorización en tiempo de ejecución medianteabilityAccessCtrl.createAtManager().requestPermissionsFromUser.
Probar la demostración
Utilice la demostración de Android de Alibaba Cloud Model Studio para verificar rápidamente la conectividad AOQ. Descargue el APK y configure la clave de API y workspaceId para probar modelos seleccionados.
Escanee el siguiente código QR para descargar e instalar la demostración de Android:

Obtener un token del AppServer
Establezca {endpoint} en {WorkspaceId}.cn-beijing.maas.aliyuncs.com para China (Beijing) o {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.
Configure un AppServer según los Pasos de autenticación de AOQ para Qwen-Omni-Realtime. Antes de cada llamada, el cliente solicita credenciales de conexión nuevas a AppServer.
Implementar llamadas de audio/video con IA
Crear motor y configurar callbacks
Llame a la API createEngine para crear una instancia de AoqClientEngine.
iOS:
AoqEngineDelegate para escuchar los callbacks onConnectionStatusChange, onDataMsg, onError y otros.
Android:
Iniciar captura y reproducción de audio/video
Llame a startAudioCapture y startAudioPlayer para iniciar la captura y reproducción de audio local. Llame a startVideoCapture para iniciar la cámara y utilice setLocalView para vincular el destino de renderizado del SDK a su control de vista previa.
En los siguientes ejemplos, el SDK reproduce el audio automáticamente. Para revisar el audio antes de reproducirlo, establezca isExternal en true en la configuración de reproducción que se pasa a startAudioPlayer para desactivar la reproducción automática del SDK y habilite el callback de tramas de audio de reproducción. La aplicación puede copiar y almacenar en búfer el audio PCM del callback y, tras revisarlo, decidir si lo reproduce o lo descarta. Consulte Reproducción de audio personalizada para obtener los detalles de configuración.
iOS:
Para llamadas con altavoz, establece isVoipMode en true tanto para la captura como para la reproducción antes de iniciarlas. Esto activa la cancelación de eco por hardware. Mantén el micrófono activo durante la reproducción para que la detección de actividad de voz (VAD) pueda detectar cuándo habla el usuario e interrumpir la respuesta.
Obtener credenciales de conexión
El cliente solicita las credenciales de conexión a AppServer.
Configurar códecs y establecer conexión
Configure los parámetros del códec y llame a connect.
Nota: qwen3.8-omni-flash-realtime requiere que el cliente comience a enviar datos multimedia solo después de recibir session.updated del servidor. Para evitar el envío accidental de contenido multimedia durante el intervalo entre una llamada connect exitosa y la llegada de session.updated, invoque enableSendMediaStream(trackType, false) para cada pista ascendente antes de llamar a connect. Para obtener detalles sobre los eventos de WebSocket, consulte Eventos del cliente.
iOS:
Configurar sesión de IA
En el callback onConnectionStatusChange(Connected), envíe un mensaje session.update mediante sendDataMsg. Este mensaje contiene parámetros de sesión como modalidades, voz, instrucciones y turn_detection, completando el protocolo de enlace de la sesión. Para obtener detalles sobre los eventos de WebSocket, consulte Eventos del cliente.
iOS:
Habilitar el envío de medios tras recibir session.updated
En el callback onDataMsg, analice los mensajes entrantes. Cuando se reciba session.updated del modelo, llame a enableSendMediaStream(trackType, true) para cada tipo de pista que se haya deshabilitado anteriormente. Para obtener detalles sobre los eventos de WebSocket, consulte Eventos del servidor.
iOS:
-
Comience a enviar flujos multimedia solo después de recibir
session.updated. Es posible que la IA no esté lista para recibir datos antes de este evento. -
Las pistas de audio y video agregadas durante la conexión (canales multimedia AOQ) entregan automáticamente datos al servidor.
- Audio: transmitido directamente a través de la pista de audio; no es necesario enviar eventos
input_audio_buffer.append. - Video: los fotogramas se envían a través de la pista de video; no es necesario enviar eventos
input_image_buffer.append.
- Audio: transmitido directamente a través de la pista de audio; no es necesario enviar eventos
Desconectar y destruir motor
Escenarios comunes
Interrupción
- El SDK está profundamente integrado con Alibaba Cloud Model Studio. Los mensajes de interrupción del modelo interrumpen el turno anterior cuando comienza un nuevo turno.
- El SDK proporciona la interfaz
interruptAudioPlayerpara la interrupción de la reproducción local. Llame a esta API cuando el usuario wants detener la reproducción.
Silenciar / activar sonido
Después de silenciar, el SDK continúa capturando audio pero solo envía tramas silenciosas. La session no se interrumpe.
Cambiar entre cámaras frontal y trasera
Subtítulos de llamada y resultados de ASR
El servidor envía resultados de ASR y respuestas de texto de IA mediante mensajes de datos descendentes. En su aplicación, enrútelos según el campo type en el callback onDataMsg. Para obtener detalles sobre los eventos de WebSocket, consulte Eventos del servidor.
Notas importantes
-
Semántica de singleton:
createEnginees un singleton; las llamadas repetidas devuelven la misma instancia. El motor solo puede recrearse después de llamar adestroy. Para uso en múltiples páginas, gestione el ciclo de vida del motor a nivel de Application o Ability. -
Tipos de vista de previsualización local:
- Android:
SurfaceViewoTextureView. No se admiten otros tipos. - iOS: Cualquier subclase de
UIView. - HarmonyOS: Consulte la documentación del SDK.
- Android:
-
Cambios en la ruta de audio: Eventos como la inserción o extracción de auriculares o la conexión Bluetooth activan
onAudioDeviceRouteChanged. Por lo general, no se requiere manejo en su aplicación. Si su interfaz incluye un alternador de altavoz/auricular, sincronice el estado basándose en este callback. -
Continuación de audio en segundo plano: Para que el audio continúe cuando la llamada pasa a segundo plano,
Info.plistdebe tener habilitadoUIBackgroundModes = audioyAVAudioSessiondebe activarse correctamente en primer plano. El SDK maneja la mayoría de los casos; utilicesetAudioSessionRestriction:para un control detallado.
Código fuente de la demostración para iOS

Documentos relacionados
- API detallada del AOQ Client SDK: Resumen del SDK
- 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