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ı
| Alan | Kullanım |
|---|---|
data.agora.appId | RTC client join için Agora App ID |
data.agora.channelName | RTC channel adı |
data.agora.token | RTC token |
data.agora.uid | RTC numeric UID |
data.agora.role | host, guest veya audience |
data.agora.expiresAt | RTC token bitiş zamanı |
data.rtm.userId | RTM login için string user ID |
data.rtm.token | RTM token |
data.rtm.channelName | RTM channel adı |
data.rtm.expiresAt | RTM 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.
| Rol | Yenileme endpoint'i |
|---|---|
host | POST /api/v1/live-stream/join-as-creator |
guest | POST /api/v1/live-stream/join-as-guest |
audience | POST /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
- Network koparsa önce SDK reconnect event'leri beklenir.
- Token expired veya auth error alınırsa HTTP join endpoint'i tekrar çağrılır.
- Yeni token ile RTC/RTM session yenilenir.
- Socket.IO bağlantısı kopmuşsa tekrar bağlanıp
joinStreamgö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.userIdyerineagora.uidile RTM login yapmak.POST /api/v1/live-stream/createresponse'undan Agora token beklemek.- HTTP join başarılı olmadan Socket.IO
joinStreamile yayın ekranını açmak. - Token
expiresAttakibi yapmadan uzun yayınlarda aynı token ile kalmak. - Ekran kapanırken RTM logout yapmadan sadece RTC leave çağırmak.