Este tópico descreve como integrar o SDK do cliente AOQ no Android, iOS e HarmonyOS para implementar chamadas de áudio e vídeo com o AOQ e o modelo qwen3.5-omni-plus-realtime.
Obter o SDK
Para obter o SDK do cliente AOQ e o plug-in de áudio Opus, consulte Baixe o SDK. O codec Opus é fornecido como um plug-in separado. Inclua-o conforme necessário para o seu caso de uso.
Importar o SDK
Copie os arquivos principais do SDK para o diretório de dependências do projeto e declare as permissões necessárias na configuração do projeto.
Android
Coloque o arquivo AoqClientSdk-release.aar no diretório app/libs/ do projeto. Distribua o arquivo libPluginOpus.so por ABI nos diretórios app/libs/armeabi-v7a/ e app/libs/arm64-v8a/. No arquivo app/build.gradle:
AndroidManifest.xml:
RECORD_AUDIO e CAMERA são permissões de tempo de execução. O aplicativo deve chamar o método ActivityCompat.requestPermissions() do Android durante a execução para solicitar autorização ao usuário.
iOS (framework)
-
Arraste os arquivos
AoqClientSdk.frameworkePluginOpus.frameworkpara o projeto no Xcode. Em Target > General > Frameworks, Libraries, and Embedded Content, selecione Embed & Sign. -
Declare as permissões: no Xcode, selecione Target > Info > Custom iOS Target Properties e adicione as duas descrições de uso de permissão a seguir:
Chave
Valor
NSMicrophoneUsageDescriptionPara chamadas de voz em tempo real
NSCameraUsageDescriptionPara chamadas de vídeo em tempo real
-
Projetos Swift:
import AoqClientSdk. Projetos Objective-C:#import <AoqClientSdk/AoqClientSdk.h>.
HarmonyOS (har)
- Coloque o arquivo
aoq-client-sdk.harno diretóriolibs/do projeto. Distribua o arquivolibPluginOpus.sopor ABI nos diretóriosentry/libs/armeabi-v7a/eentry/libs/arm64-v8a/. Declare a dependência no arquivoentry/oh-package.json5. - Adicione as permissões no arquivo
entry/src/main/module.json5:
- No
EntryAbility, acione a autorização em tempo de execução por meio deabilityAccessCtrl.createAtManager().requestPermissionsFromUser.
Testar a demonstração
Use a demonstração para Android do Alibaba Cloud Model Studio para verificar rapidamente a conectividade do AOQ. Baixe o APK e configure a chave de API e o workspaceId para testar modelos selecionados.
Escaneie o código QR a seguir para baixar e instalar a demonstração para Android:

Obter um token do AppServer
Siga a seção sobre AOQ em Token authentication para configurar um AppServer que obtenha tokens. Antes de cada chamada, o cliente deve solicitar um token ao AppServer.
Implementar chamadas de áudio e vídeo com IA
Criar o engine e definir callbacks
Chame a API createEngine para criar uma instância de AoqClientEngine.
iOS:
AoqEngineDelegate para escutar os callbacks onConnectionStatusChange, onDataMsg, onError, entre outros.
Android:
Iniciar captura e reprodução de áudio e vídeo
Chame startAudioCapture e startAudioPlayer para iniciar a captura e a reprodução de áudio local. Chame startVideoCapture para iniciar a câmera e use setLocalView para vincular o alvo de renderização do SDK ao controle de visualização.
iOS:
Obter credenciais de conexão
Configure o AppServer para atuar como proxy da solicitação para o Alibaba Cloud Model Studio. Consulte Token authentication.
Configurar codecs e estabelecer conexão
Defina os parâmetros do codec e chame connect.
Nota: o modelo qwen3.5-omni-plus-realtime exige que o cliente comece a enviar dados de mídia somente após receber session.updated do servidor. Para evitar o envio acidental de mídia no intervalo entre uma chamada connect bem-sucedida e a chegada de session.updated, chame enableSendMediaStream(trackType, false) para cada faixa de upstream antes de chamar connect. Para detalhes sobre eventos WebSocket, consulte Client events.
iOS:
Configurar sessão de IA
No callback onConnectionStatusChange(Connected), envie uma mensagem session.update por meio de sendDataMsg. Essa mensagem contém parâmetros da sessão, como modalidades, voz, instruções e turn_detection, concluindo o handshake da sessão. Para detalhes sobre eventos WebSocket, consulte Client events.
iOS:
Ativar envio de mídia após receber session.updated
No callback onDataMsg, analise as mensagens recebidas. Ao receber session.updated do modelo, chame enableSendMediaStream(trackType, true) para cada tipo de faixa desativado anteriormente. Para detalhes sobre eventos WebSocket, consulte Server events.
iOS:
-
Inicie o envio de fluxos de mídia apenas após receber
session.updated. A IA pode não estar pronta para receber dados antes desse evento. -
As faixas de áudio e vídeo adicionadas durante a conexão (canais de mídia do AOQ) entregam dados automaticamente ao servidor.
- Áudio: transmitido diretamente pela faixa de áudio — não é necessário enviar eventos
input_audio_buffer.append. - Vídeo: os quadros são enviados pela faixa de vídeo — não é necessário enviar eventos
input_image_buffer.append.
- Áudio: transmitido diretamente pela faixa de áudio — não é necessário enviar eventos
Desconectar e destruir o engine
Cenários comuns
Interrupção (Barge-in)
- O SDK tem integração profunda com o Alibaba Cloud Model Studio. As mensagens de interrupção vindas do modelo cancelam o turno anterior quando um novo turno se inicia.
- O SDK fornece a interface
interruptAudioPlayerpara interromper a reprodução local. Chame essa API quando o usuário desejar parar a reprodução.
Silenciar / reativar áudio
Após silenciar, o SDK continua capturando áudio, mas envia apenas quadros silenciosos. A session não é interrompida.
Alternar entre câmeras frontal e traseira
Legendas da chamada e resultados de ASR
O servidor envia resultados de ASR e respostas de texto da IA por meio de mensagens de dados downstream. No aplicativo, direcione-as com base no campo type dentro do callback onDataMsg. Para detalhes sobre eventos WebSocket, consulte Server events.
Observações importantes
-
Semântica de singleton:
createEngineé um singleton — chamadas repetidas retornam a mesma instância. O engine só pode ser recriado após a chamada dedestroy. Para uso em múltiplas páginas, gerencie o ciclo de vida do engine no nível da Application ou do Ability. -
Tipos de visualização para preview local:
- Android:
SurfaceViewouTextureView. Outros tipos não são suportados. - iOS: Qualquer subclasse de
UIView. - HarmonyOS: Consulte a documentação do SDK.
- Android:
-
Alterações na rota de áudio: Eventos como inserção/remoção de fones de ouvido ou conexão Bluetooth acionam
onAudioDeviceRouteChanged. Geralmente, não é necessário nenhum tratamento no aplicativo. Se a UI incluir um alternador entre alto-falante e auricular, sincronize o estado com base nesse callback. -
Continuidade de áudio em segundo plano: Para que o áudio continue quando a chamada for para segundo plano, o arquivo
Info.plistdeve terUIBackgroundModes = audioativado e aAVAudioSessiondeve estar corretamente ativada em primeiro plano. O SDK lida com a maioria dos casos; usesetAudioSessionRestriction:para um controle mais refinado.
Código-fonte da demonstração para iOS

Documentos relacionados
- API detalhada do SDK do cliente AOQ: SDK overview
- Eventos do cliente do modelo qwen3.5-omni-plus-realtime: Client events
- Eventos do servidor do modelo qwen3.5-omni-plus-realtime: Server events