Integrar live streaming a uma plataforma existente costumava demandar semanas de trabalho: configurar servidores de mídia, lidar com transcodificação, montar uma CDN, implementar autenticação... Com a EdTurb, todo esse stack já está pronto. Você só precisa das chamadas de API certas.
Este guia cobre do zero ao primeiro stream funcional. Ao final, você terá uma sala de transmissão criada, tokens de acesso gerados e um botão "Ir ao Vivo" funcionando na sua interface.
Pré-requisitos
- ▸Conta EdTurb com API Key, disponível no dashboard em Configurações → API.
- ▸Node.js 18 ou superior (ou Python 3.10+, PHP 8.1+, Go 1.21+ para outras linguagens).
- ▸Conhecimento básico de requisições HTTP e async/await.
Guarde sua API Key em uma variável de ambiente (EDTURB_API_KEY). Nunca a exponha no frontend ou em repositórios públicos, ela concede acesso completo à sua conta.
Passo 1, Instalação do SDK
Instale o pacote via npm ou yarn:
npm install @edturb/node-sdk
# ou
yarn add @edturb/node-sdkPasso 2, Inicializando o cliente
O EdTurbClient é o ponto de entrada para toda a API. Instancie-o uma vez e reutilize ao longo da aplicação:
import { EdTurbClient } from "@edturb/node-sdk";
const client = new EdTurbClient({
apiKey: process.env.EDTURB_API_KEY,
});
// Opcional: definir região preferencial
// const client = new EdTurbClient({
// apiKey: process.env.EDTURB_API_KEY,
// region: "sa-east-1", // São Paulo
// });Passo 3, Criando uma sala de transmissão
Uma sala (room) é a unidade fundamental da EdTurb. Cada evento ao vivo precisa de uma sala. Ela encapsula as configurações de streaming, a lista de participantes e as permissões.
const room = await client.rooms.create({
name: "aula-introducao-react", // identificador amigável
maxViewers: 5000, // limite de espectadores simultâneos
latencyMode: "low", // "low" | "standard"
recording: {
enabled: true, // gravar automaticamente
storage: "edturb", // ou "s3" com suas credenciais
},
});
console.log(room.id); // "rm_abc123"
console.log(room.ingestUrl); // URL RTMP para o software de streamingReutilizando salas
Salas são persistentes, você pode usar a mesma sala para múltiplos eventos, simplificando o gerenciamento. O estado de "ao vivo" é controlado pelo stream, não pela sala.
Passo 4, Gerando tokens de acesso
Cada participante, streamer ou espectador, precisa de um token JWT assinado pela EdTurb para entrar na sala. Gere esses tokens no seu backend e envie-os ao frontend:
// Token para o streamer (quem transmite)
const streamerToken = await client.auth.createToken({
roomId: room.id,
userId: "user-456", // ID do usuário na sua plataforma
role: "streamer", // pode publicar vídeo e áudio
expiresIn: "2h",
metadata: {
name: "Prof. Carlos Lima",
},
});
// Token para espectadores (quem assiste)
const viewerToken = await client.auth.createToken({
roomId: room.id,
userId: "viewer-789",
role: "viewer", // apenas recebe, não publica
expiresIn: "4h",
});Gere sempre os tokens no servidor, nunca no cliente. O SDK de frontend recebe o token pronto e o usa para autenticar a conexão com a sala.
Passo 5, Conectando o frontend
No lado do browser, use o SDK web para conectar o usuário à sala usando o token gerado:
import { EdTurbClient } from "@edturb/web-sdk";
const client = new EdTurbClient();
const actions = client.getActions();
const store = client.getStore();
// Conectar à sala com o token recebido do backend
await actions.join({
roomId: "<room-id>",
authToken: streamerToken, // ou viewerToken para espectadores
});
// Iniciar transmissão ao vivo (apenas role: "streamer")
await actions.startLive();Passo 6, Monitorando o stream
Use webhooks para receber notificações de eventos importantes sem precisar fazer polling:
// Registrar endpoint de webhook no dashboard ou via API:
await client.webhooks.create({
url: "https://suaplataforma.com/webhooks/edturb",
events: [
"stream.started",
"stream.ended",
"viewer.joined",
"recording.ready",
],
});
// No seu servidor Express/Next.js:
// POST /webhooks/edturb
export async function POST(req) {
const event = await req.json();
if (event.type === "recording.ready") {
const { url, duration } = event.data;
// Salvar URL do VOD no seu banco de dados
}
}Erros comuns e como resolver
- ▸401 Unauthorized: verifique se a API Key está correta e não foi revogada no dashboard.
- ▸Token expirado (403): reduza o expiresIn ou implemente refresh automático antes do vencimento.
- ▸Stream não inicia: confirme que o role do token é 'streamer', tokens 'viewer' não têm permissão de publicar.
- ▸Alta latência inesperada: verifique se latencyMode está como 'low' e se o GOP do encoder está configurado para ≤ 2 segundos.
Próximos passos
- ▸Configure gravação automática com entrega em S3 ou armazenamento EdTurb.
- ▸Adicione reações e chat em tempo real usando o SDK de presença.
- ▸Implemente analytics em tempo real para monitorar viewers, bitrate e latência.
- ▸Explore o modo 'stage' para convidar espectadores a transmitir ao vivo.