ESPAÇO PUBLICITÁRIO DISPONÍVEL · FALE CONOSCO

Como os desenvolvedores integram a Streaming API da D-ID para criar avatares conversacionais interativos em tempo real

365Finds Editorial
11.430 artigos Wiki catalogados

Use o 365 Wiki com sua IA

Copie o prompt abaixo, cole na IA que você já usa e faça sua pergunta.

Baixar o Skill completo

Experimente primeiro com o prompt. Se você usa o 365 Wiki com frequência, instale o Skill completo do 365Wiki para não precisar colá-lo novamente. Se não usa uma IA específica, as versões web do Gemini ou Microsoft Copilot também servem.

Construir uma IA visual conversacional em tempo real exige solucionar um gargalo fundamental de engenharia: a latência. Os pipelines tradicionais de geração de vídeo sintético operam de forma assíncrona em modo de lote (batch), exigindo de vários segundos a minutos para renderizar, codificar e entregar um arquivo de vídeo MP4. Para casos de uso interativos — como representantes de vendas com IA, assistentes virtuais de saúde, avatares de suporte ao cliente e tutores digitais interativos —, um atraso de múltiplos segundos quebra o fluxo conversacional e prejudica o engajamento do usuário.

A D-ID supera esse desafio por meio de sua infraestrutura de streaming em tempo real, que combina algoritmos de geração de vídeo de baixa latência com transporte de dados via WebRTC e LiveKit. Em vez de gerar arquivos de vídeo completos em disco, o mecanismo de streaming da D-ID renderiza quadros de vídeo do avatar com sincronização labial dinamicamente e os transmite diretamente aos navegadores clientes com tempo de resposta inferior a um segundo. Embora as implementações iniciais dependessem dos endpoints legados de streaming Talks e Clips (/talks/streams), a arquitetura moderna da D-ID gira em torno do framework D-ID Agents e do @d-id/client-sdk oficial.

Este guia percorre todo o pipeline arquitetural para integrar a API de streaming da D-ID a Modelos de Linguagem de Grande Porte (LLMs), incluindo a configuração de agentes no backend, negociação de sessão WebRTC, vinculação de streams de mídia no frontend, padrões de interação conversacional, otimização de latência e gerenciamento do ciclo de vida de créditos.


Visão geral da arquitetura: O pipeline do avatar conversacional

Uma aplicação de avatar interativo em tempo real opera como um loop coordenado que engloba entrada do usuário, raciocínio de linguagem, síntese de fala, animação facial e entrega de mídia ponto a ponto:

+-------------+      Audio / Text      +-------------------+
|             | ---------------------> | Application Logic |
| User Client |                        | (STT / LLM / RAG) |
|  (Browser)  | <--------------------- +-------------------+
|             |     WebRTC Video / Audio         |
|             | <---------------------------+    | Text / Audio Chunks
+-------------+                             |    v
                                       +-------------------+
                                       | D-ID Streaming    |
                                       | Engine & Agents   |
                                       +-------------------+

Os desenvolvedores geralmente adotam um de dois paradigmas de integração, dependendo dos requisitos de infraestrutura:

  1. Fluxo de trabalho com D-ID Agent gerenciado: A D-ID gerencia internamente o prompt de sistema do LLM, a base de conhecimento externa (Geração Aumentada por Recuperação / RAG) e o provedor de voz Text-to-Speech (TTS). A aplicação cliente conecta-se diretamente ao agente utilizando o @d-id/client-sdk e envia os prompts do usuário via agentManager.chat().
  2. Fluxo de trabalho de orquestração em backend personalizado: O backend do desenvolvedor mantém controle total sobre o estado conversacional, autenticação de usuários, ferramentas proprietárias, bancos de dados vetoriais e chamadas de LLM (por exemplo, OpenAI GPT-4o, Anthropic Claude ou modelos auto-hospedados). Em seguida, o backend transmite o texto gerado ou o áudio sintético para a D-ID via agentManager.speak() ou endpoints REST de streaming para animar o avatar.

Passo 1: Provisionamento e configuração do Agent via API REST

Antes de iniciar uma transmissão em tempo real, os desenvolvedores configuram a persona do avatar, as características de voz e a camada de inteligência. Embora os agentes possam ser criados por meio da interface do D-ID Studio, as aplicações de produção normalmente automatizam esse provisionamento via API REST.

Criando um Agent

Envie uma requisição POST para https://api.d-id.com/agents autenticada com sua chave de API da D-ID:

curl -X POST "https://api.d-id.com/agents" \
  -H "Authorization: Basic <YOUR_BASE64_ENCODED_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "presenter": {
      "type": "clip",
      "presenter_id": "v2_public_Amber@0zSz8kflCN",
      "voice": {
        "type": "microsoft",
        "voice_id": "en-US-JennyMultilingualV2Neural"
      }
    },
    "llm": {
      "type": "openai",
      "provider": "openai",
      "model": "gpt-4o",
      "instructions": "You are an AI customer success specialist for an enterprise SaaS platform. Keep responses under two sentences, maintain an empathetic and professional tone, and guide users to relevant product features."
    }
  }'

Principais parâmetros de configuração

Objeto de configuraçãoParâmetroDescrição
presentertypeTipo de renderização do avatar: talk (baseado em fotos V2), clip (apresentadores de estúdio pré-renderizados V3) ou expressive (avatares V4 baseados em LiveKit).
presenterpresenter_id ou source_urlO identificador de um apresentador padrão da D-ID ou uma URL HTTPS publicamente acessível de imagem para avatares fotográficos personalizados.
presenter.voicetypeMecanismo do provedor de voz, normalmente microsoft (Azure Neural) ou elevenlabs.
presenter.voicevoice_idIdentificador específico do modelo de voz correspondente ao catálogo do provedor (por exemplo, en-US-JennyMultilingualV2Neural).
llmtype e provideropenai para conclusões nativas gerenciadas ou custom para roteamento externo pelo backend.
llminstructionsInstruções de sistema que definem a persona, restrições e limites conversacionais do avatar.

A API retorna uma resposta JSON contendo o agentId exclusivo. Armazene esse identificador no banco de dados da sua aplicação.

Protegendo credenciais do cliente

Aplicações web e móveis em produção nunca devem expor as chaves de API primárias da D-ID no código do lado do cliente. Em vez disso, gere uma Client Key com escopo definido por meio do seu backend:

curl -X POST "https://api.d-id.com/agents/<AGENT_ID>/client-key" \
  -H "Authorization: Basic <YOUR_BASE64_ENCODED_API_KEY>" \
  -H "Content-Type: application/json"

No painel do D-ID Studio, restrinja essa chave de cliente aos seus domínios de produção usando a configuração Allowed Domains para evitar uso não autorizado.


Passo 2: Estabelecendo o stream WebRTC de baixa latência

A interação em tempo real requer uma conexão ponto a ponto (peer connection) WebRTC entre o navegador cliente e o cluster de renderização da D-ID. A D-ID oferece dois caminhos de integração: o SDK automatizado @d-id/client-sdk (altamente recomendado) e a sinalização WebRTC direta baseada em REST.

Método A: Integração do cliente via @d-id/client-sdk (Recomendado)

O SDK oficial @d-id/client-sdk abstrai a negociação de sessão, a troca de ofertas/respostas do Session Description Protocol (SDP) e a coleta de candidatos do Interactive Connectivity Establishment (ICE) em uma interface JavaScript simplificada.

1. Instalar o SDK

npm install @d-id/client-sdk

2. Inicializar o AgentManager e vincular as faixas de mídia

import * as did from "@d-id/client-sdk";

// Elementos do DOM
const videoElement = document.getElementById("avatar-video");
const statusElement = document.getElementById("connection-status");
const chatInputElement = document.getElementById("chat-input");
const sendButton = document.getElementById("send-btn");

let agentManager = null;

async function initializeAvatar() {
  const agentId = "agt_xxxxxxxxxxxxxxxx";
  const clientKey = "YOUR_CLIENT_KEY";

  agentManager = await did.createAgentManager(agentId, {
    auth: {
      type: "key",
      clientKey: clientKey
    },
    callbacks: {
      // Stream de mídia anexado recebido do peer WebRTC da D-ID
      onSrcObjectReady(mediaStream) {
        videoElement.srcObject = mediaStream;
        videoElement.play().catch((err) => console.error("Video autoplay error:", err));
      },
      // Rastrear transições de conexão: connecting, connected, disconnected, closed
      onConnectionStateChange(state) {
        statusElement.textContent = `Status: ${state}`;
        console.log("WebRTC Connection State:", state);
      },
      // Lidar com turnos conversacionais recebidos
      onNewMessage(messages) {
        const latest = messages[messages.length - 1];
        console.log(`[${latest.role}]: ${latest.content}`);
      },
      // Monitorar ciclo de vida da fala do avatar
      onVideoStatusChange(status) {
        console.log("Avatar Video Status:", status); // ex.: "playing", "idle"
      },
      onError(error, errorData) {
        console.error("D-ID Agent Error:", error, errorData);
      }
    }
  });

  // Conectar sessão WebRTC
  await agentManager.connect();
}

initializeAvatar().catch(console.error);

Método B: Handshake manual de sinalização WebRTC (Nos bastidores)

Para ambientes sem interface gráfica (headless), clientes fora do navegador (como aplicativos móveis nativos ou dispositivos embarcados) ou sistemas legados, os desenvolvedores podem executar o handshake WebRTC diretamente usando os endpoints REST da D-ID:

  1. Inicializar sessão de stream: Envie uma requisição POST para https://api.d-id.com/agents/{agentId}/streams (ou o endpoint legado /talks/streams). A D-ID retorna:

    • id: O ID exclusivo da sessão de streaming.
    • session_id: Identificador de rastreamento da sessão.
    • offer: Uma oferta SDP gerada pelo servidor de mídia WebRTC da D-ID.
    • ice_servers: Uma lista de credenciais de servidores STUN e TURN necessárias para a travessia de NAT.
  2. Inicializar RTCPeerConnection local: O cliente cria uma instância de RTCPeerConnection configurada com os ice_servers da D-ID:

    const pc = new RTCPeerConnection({ iceServers: response.ice_servers });
    
  3. Definir descrição remota e criar resposta local:

    await pc.setRemoteDescription(new RTCSessionDescription(response.offer));
    const answer = await pc.createAnswer();
    await pc.setLocalDescription(answer);
    
    // Enviar a resposta SDP de volta para a D-ID
    await fetch(`https://api.d-id.com/agents/${agentId}/streams/${response.id}/sdp`, {
      method: "POST",
      headers: {
        "Authorization": `Basic ${API_KEY}`,
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        answer: answer,
        session_id: response.session_id
      })
    });
    
  4. Trocar candidatos ICE: Monitore o evento onicecandidate na conexão peer do cliente e encaminhe cada candidato para o endpoint ICE da D-ID:

    pc.onicecandidate = (event) => {
      if (event.candidate) {
        fetch(`https://api.d-id.com/agents/${agentId}/streams/${response.id}/ice`, {
          method: "POST",
          headers: {
            "Authorization": `Basic ${API_KEY}`,
            "Content-Type": "application/json"
          },
          body: JSON.stringify({
            candidate: event.candidate.candidate,
            sdpMid: event.candidate.sdpMid,
            sdpMLineIndex: event.candidate.sdpMLineIndex,
            session_id: response.session_id
          })
        });
      }
    };
    
  5. Receber faixa de mídia: Quando a faixa de mídia chegar, vincule o stream remoto ao DOM:

    pc.ontrack = (event) => {
      videoElement.srcObject = event.streams[0];
    };
    

Passo 3: Interação conversacional: chat() vs. speak()

Com a sessão WebRTC ativa, os desenvolvedores acionam as animações do avatar usando dois métodos principais fornecidos pelo SDK.

Padrão 1: Turnos conversacionais autônomos (chat)

Se o agente estiver configurado com lógica de LLM integrada, envie mensagens de texto diretamente para a conversa do agente:

// Usuário envia um prompt via interface
async function handleUserSubmit(userText) {
  if (!agentManager) return;

  // Envia mensagem do usuário ao agente; o agente consulta o LLM, gera fala e transmite o vídeo
  await agentManager.chat(userText);
}

O agente da D-ID gerencia o rastreamento do turno do usuário, a inferência do LLM, a geração de TTS e a síntese de vídeo automaticamente, disparando callbacks onNewMessage à medida que tokens e mensagens são processados.

Padrão 2: Orquestração de backend personalizado (speak)

Quando a lógica da aplicação exige fluxos de trabalho proprietários — como consultas RAG multirrodada em bancos de dados corporativos, agentes LangChain com chamada de ferramentas ou endpoints de LLM personalizados —, os desenvolvedores utilizam o método speak(). Isso permite que o backend gere respostas de forma independente e instrua o avatar a falar conteúdos específicos.

Enviando entrada de texto

// Instruir o avatar a falar texto arbitrário usando a voz TTS configurada no agente
await agentManager.speak({
  type: "text",
  input: "Welcome back, Sarah. I have pulled your quarterly analytics report."
});

Enviando áudio pré-sintetizado

Para aplicações que utilizam mecanismos de voz especializados (como vozes clonadas personalizadas ou modelos proprietários de fala), os desenvolvedores podem fornecer diretamente uma URL HTTPS de áudio publicamente acessível:

// O avatar anima a boca e expressões faciais em sincronia com o áudio fornecido
await agentManager.speak({
  type: "audio",
  audio_url: "https://storage.yourdomain.com/audio/response_chunk_01.mp3"
});

Otimização de latência em produção e estratégias de desempenho

Na IA conversacional interativa, a tolerância humana à latência é extremamente baixa; pausas na conversa superiores a 1.000 a 1.500 milissegundos soam artificiais. Alcançar um diálogo fluido exige otimizar cada fase do pipeline.

1. Pré-aquecimento da conexão

O estabelecimento da conexão WebRTC (troca de SDP, descoberta de candidatos STUN/TURN e verificações de conectividade ICE) geralmente leva entre 800 ms e 2.500 ms, dependendo das condições da rede.

2. Fragmentação de streaming para respostas longas de LLM

Aguardar que um LLM gere um parágrafo completo de várias frases antes de chamar speak() introduz uma latência considerável (tempo até o primeiro token somado ao tempo de conclusão total).

Para minimizar a sensação de atraso:

3. Tratamento de interrupções (Barge-In)

Uma conversa natural exige que os usuários possam interromper o avatar no meio da fala. Na moderna arquitetura de streaming da D-ID, os recursos de interrupção são suportados nativamente por meio de controles de fluxo fluídos:

// Tratar voz do usuário detectada enquanto o avatar está falando
function onUserSpeechDetected() {
  if (agentManager) {
    // Interromper a reprodução de fala atual e retornar o avatar ao estado ocioso de escuta
    agentManager.interrupt();
  }
}

Quando um evento de interrupção é disparado, a D-ID trunca a fila de fala ativa no servidor e interrompe a transmissão de vídeo, garantindo que o avatar não continue falando sobre a voz do usuário.

4. Avatares expressivos (V4) com LiveKit

Para aplicações que priorizam uma presença natural, os V4 Expressive Avatars da D-ID utilizam o transporte LiveKit em vez do WebRTC ponto a ponto padrão. Os avatares expressivos mantêm movimentos contínuos de espera (piscadas sutis de olhos, micromovimentos de cabeça e ritmos respiratórios) entre os turnos de conversa, eliminando o efeito de imagem congelada comum em motores de avatares anteriores.


Gerenciamento do ciclo de vida de recursos e cobrança

A implantação de avatares de vídeo em tempo real em escala exige adesão estrita às regras de encerramento de sessão e controle de créditos.

1. Encerramento gracioso de sessão

Sessões WebRTC não finalizadas continuam consumindo recursos do servidor e podem levar ao esgotamento inesperado de créditos. Sempre implemente manipuladores de desconexão explícitos na desmontagem de componentes e eventos de descarregamento de janela:

// Limpar sessão no descarregamento da janela
window.addEventListener("beforeunload", () => {
  if (agentManager) {
    agentManager.disconnect().catch(console.error);
  }
});

// Limpeza em aplicações de página única (desmontagem no React / Vue / Svelte)
function cleanupAvatarSession() {
  if (agentManager) {
    agentManager.disconnect();
    agentManager = null;
  }
}

Para implementações REST, envie uma requisição DELETE para https://api.d-id.com/agents/{agentId}/streams/{streamId} após a finalização da sessão.

2. Consumo de créditos e regra de arredondamento de 15 segundos

A D-ID deduz o uso de geração de vídeo diretamente do saldo unificado de minutos da sua conta (compartilhado entre o Creative Reality™ Studio e a API).

3. Limites de inatividade e proteção contra abandono

Para proteger contra sessões órfãs quando os usuários deixam abas do navegador abertas, implemente um temporizador de inatividade. Se nenhuma interação do usuário ocorrer por 90 a 120 segundos, avise o usuário ou encerre automaticamente a conexão WebRTC usando agentManager.disconnect().


Resumo do checklist de integração

FaseAção principalFerramenta / Endpoint recomendado
ProvisionamentoCriar agente com voz, persona e instruções de LLMPOST /agents
SegurançaEmitir credenciais de cliente restritas com lista de permissões de domínioPOST /agents/{agentId}/client-key
ConexãoEstabelecer sessão peer WebRTC e vincular stream de <video>@d-id/client-sdk (agentManager.connect())
InteraçãoEnviar prompt conversacional ou chunks de texto de LLM externoagentManager.chat() ou agentManager.speak()
Otimização de UXHabilitar interrupção pelo usuário (barge-in) e pré-aquecimento de conexãoagentManager.interrupt() em atividade de microfone
Ciclo de vidaFechar streams WebRTC ao sair da página ou por inatividadeagentManager.disconnect() / DELETE /streams/{id}

Ao combinar o mecanismo de streaming em tempo real da D-ID com a orquestração estruturada de prompts de LLM e o gerenciamento de ciclo de vida WebRTC no cliente, as equipes de desenvolvimento podem implantar avatares de IA conversacionais responsivos e naturais, entregando desempenho de nível corporativo em plataformas web e móveis.