API Guides

Agora RTC and RTM Lifecycle

Join response ile gelen Agora token'larının kullanımı, yenileme ve cleanup sırası

Agora RTC and RTM Lifecycle

Allmine canlı yayın join response'u iki ayrı Agora konfigürasyonu döndürür: data.agora RTC içindir, data.rtm RTM içindir. Bu iki identity aynı amaçla kullanılmamalıdır.

Alanların anlamı

AlanKullanım
data.agora.appIdRTC client join için Agora App ID
data.agora.channelNameRTC channel adı
data.agora.tokenRTC token
data.agora.uidRTC numeric UID
data.agora.rolehost, guest veya audience
data.agora.expiresAtRTC token bitiş zamanı
data.rtm.userIdRTM login için string user ID
data.rtm.tokenRTM token
data.rtm.channelNameRTM channel adı
data.rtm.expiresAtRTM token bitiş zamanı

agora.uid numeriktir ve sadece RTC için kullanılmalıdır. RTM tarafında rtm.userId kullanılmalıdır.

Önerilen başlatma sırası

const joinResponse = await api.joinLiveStream(liveStreamId);
const { agora, rtm } = joinResponse.data;

await rtcClient.join(
  agora.appId,
  agora.channelName,
  agora.token,
  agora.uid,
);

await rtmClient.login({
  uid: rtm.userId,
  token: rtm.token,
});

const rtmChannel = await rtmClient.createChannel(rtm.channelName);
await rtmChannel.join();

RTC ve RTM başarıyla bağlandıktan sonra /live-stream Socket.IO room'una joinStream ile girilmelidir. Socket.IO room yayın içi backend event'leri içindir; Agora media channel'ın yerine geçmez.

Token yenileme

Join response içindeki expiresAt alanları client tarafından takip edilmelidir. Token süresi yaklaşırken en basit yenileme stratejisi aynı role uygun HTTP join endpoint'ini yeniden çağırıp yeni agora ve rtm değerlerini almaktır.

RolYenileme endpoint'i
hostPOST /api/v1/live-stream/join-as-creator
guestPOST /api/v1/live-stream/join-as-guest
audiencePOST /api/v1/live-stream/join

Broadcaster kullanıcılar için backend mevcut broadcaster UID değerini yeniden kullanmaya çalışır. Yine de client RTC SDK'nın token renewal API'sini destekliyorsa yeni token geldikten sonra SDK'nın önerdiği renewal metodunu kullanmalıdır.

Reconnect stratejisi

  1. Network koparsa önce SDK reconnect event'leri beklenir.
  2. Token expired veya auth error alınırsa HTTP join endpoint'i tekrar çağrılır.
  3. Yeni token ile RTC/RTM session yenilenir.
  4. Socket.IO bağlantısı kopmuşsa tekrar bağlanıp joinStream gönderilir.

Reconnect sırasında UI state'i server response'taki data.liveStream.status ile tekrar eşleştirilmelidir. ended, expired, cancelled_by_host veya cancelled_by_guest gibi terminal durumlarda media session kapatılmalıdır.

Cleanup sırası

async function leaveLiveStream() {
  socket.emit("leaveStream", { streamId });

  try {
    await rtmChannel?.leave();
    await rtmClient?.logout();
  } finally {
    await rtcClient?.leave();
  }
}

Cleanup fonksiyonu birden fazla kez çağrılabilir olmalıdır. Ekran kapatıldığında, user logout olduğunda, stream ended event'i geldiğinde ve app background olduğunda aynı cleanup yolu kullanılabilir.

Sık yapılan hatalar

  • rtm.userId yerine agora.uid ile RTM login yapmak.
  • POST /api/v1/live-stream/create response'undan Agora token beklemek.
  • HTTP join başarılı olmadan Socket.IO joinStream ile yayın ekranını açmak.
  • Token expiresAt takibi yapmadan uzun yayınlarda aynı token ile kalmak.
  • Ekran kapanırken RTM logout yapmadan sadece RTC leave çağırmak.

On this page