בשיחות וידאו במובייל, הבעיות העיקריות הן ניהול מחזור חיים וניהול טוקנים. ללא הגדרה נכונה, תקבלו דליפות משאבים, ניתוקי שיחה ובזבוז רישיונות. הניסיון שלנו עם 30+ פרויקטים המשתמשים ב-Agora SDK הוביל לגישה אמינה.
למה Agora SDK היא הבחירה הטובה ביותר לשיחות וידאו
Agora SDK הוא שירות וידאו ואודיו מנוהל בזמן אמת שמטפל בWebRTC מתחת למכסה המנוע, ברשת התעבורה שלו SD-RTN, ברוחב פס אדפטיבי ובקודקים. בהשוואה ל-WebRTC גולמי: Agora מאיצה את פיתוח שיחות הווידאו פי 12(תיעוד Agora), אך דורשת ניהול טוקנים נכון. אינטגרציה נכונה יכולה להפחית עלויות תשתית בעד 40% באמצעות ניצול SD-RTN, ולחסוך כ-300–500 דולר לחודש עבור צוותים קטנים.
שלבים לאינטגרציה של Agora SDK
- צרו חשבון Agora וצרו פרויקט בקונסולה כדי לקבל App ID.
- צרו טוקן באמצעות Agora Token Builder בשרת האחורי שלכם.
- אתחלו את המנוע פעם אחת בעת השקת האפליקציה (ראו דוגמאות קוד למטה).
- הצטרפו לערוץ עם הטוקן ושם הערוץ.
- הגדירו עיבוד וידאו מקומי ומרוחק.
- טפלו בחידוש טוקן באמצעות delegate callbacks.
- בדקו עם תרחישים שונים (ניתוק רשת, שיחה נכנסת).
הגדרת טוקנים נכונה למניעת שגיאות
Agora עובדת עם מודל App ID + Token. App ID הוא מזהה ציבורי מהקונסולה. Token הוא JWT קצר מועד שהשרת האחורי שלכם יוצר באמצעות Agora Token Builder ומעביר ללקוח בעת הצטרפות לערוץ. שגיאות הייצור הנפוצות ביותר הן tokenExpired (109) ו-invalidToken (110). לטוקן יש TTL מוגבל (מ-24 שעות עד שעה אחת). אנו מיישמים טיפול באמצעות מתודת ה-delegate tokenPrivilegeWillExpire — קבלת טוקן חדש מהשרת האחורי וקריאה ל-renewToken() מבלי לנתק את החיבור.
טעות אופיינית: הטוקן נוצר עם UID 0 בשרת האחורי, אך לאחר joinChannel הלקוח מקבל UID ספציפי מ-Agora — ואז ב-renewToken הבא הוא מעביר טוקן עבור UID שגוי. פתרון: שמרו את ה-UID מ-didJoinChannel והשתמשו בו בעת בקשת טוקן חדש.
| תרחיש | TTL | המלצה |
|---|---|---|
| רגיל | 24 שעות | איזון בין אבטחה לתדירות חידוש |
| עומס גבוה | שעה אחת | מפחית סיכון לפגיעה בטוקן |
אתחול המנוע
אתחלו את המנוע פעם אחת בעת השקת האפליקציה:
let config = AgoraRtcEngineConfig()
config.appId = "YOUR_APP_ID"
agoraKit = AgoraRtcEngineKit.sharedEngine(with: config, delegate: self) val config = RtcEngineConfig()
config.mContext = context
config.mAppId = "YOUR_APP_ID"
config.mEventHandler = handler
rtcEngine = RtcEngine.create(config)אל תיצרו מחדש את המנוע עבור כל שיחה. sharedEngine הוא סינגלטון; קריאה חוזרת אליו עם אותו App ID מחזירה את המופע הקיים. ב-Android, RtcEngine.create() יוצר מופע חדש בכל פעם; עליכם להרוס את הקודם באמצעות RtcEngine.destroy(). אחרת, יופיעו דליפות משאבים מקוריות לאחר 3–5 קריאות. השתמשו ב-LifecycleObserver כדי להרוס אוטומטית את המנוע כשהאקטיביטי מסתיים.
הצטרפות לערוץ וטיפול בווידאו
let option = AgoraRtcChannelMediaOptions()
option.clientRoleType = .broadcaster
option.channelProfile = .communication
agoraKit.joinChannel(
byToken: token,
channelId: channelName,
uid: 0,
mediaOptions: option
)uid: 0 — Agora מקצה את ה-UID בעצמה. אם אתם צריכים קישור משתמש, העבירו מזהה מספרי דטרמיניסטי (UInt32).
וידאו מקומי מעובד באמצעות AgoraRtcVideoCanvas עם setupLocalVideo(). וידאו מרוחק באמצעות setupRemoteVideo() במתודת ה-delegate didJoinedOfUid. חשוב: קראו ל-setupRemoteVideo() ב-main thread, אחרת תתרחש שגיאת EXC_BAD_ACCESS עם הצטרפות/עזיבה מהירה של משתתפים.
func rtcEngine(_ engine: AgoraRtcEngineKit, didJoinedOfUid uid: UInt, elapsed: Int) {
DispatchQueue.main.async {
let canvas = AgoraRtcVideoCanvas()
canvas.uid = uid
canvas.renderMode = .hidden
canvas.view = self.remoteVideoView
self.agoraKit.setupRemoteVideo(canvas)
}
} הגדרות איכות וידאו
Agora מספקת הגדרות מוכנות של AgoraVideoEncoderConfiguration ופרמטרים מותאמים אישית:
let config = AgoraVideoEncoderConfiguration(
size: CGSize(width: 640, height: 360),
frameRate: .fps15,
bitrate: AgoraVideoBitrateStandard,
orientationMode: .adaptative,
mirrorMode: .auto
)
agoraKit.setVideoEncoderConfiguration(config)עבור אפליקציית מובייל, 360p/15fps הוא איזון סביר בין איכות לצריכת סוללה. 720p/30fps לטאבלטים או כשהאיכות קריטית. 1080p אינו מתאים למובייל: הוא צורך הרבה חשמל ומשאבים, וההבדל התפיסתי בין 720p ל-1080p זניח.
| רזולוציה | fps | רוחב פס | עומס סוללה |
|---|---|---|---|
| 360p | 15 | רגיל | נמוך |
| 720p | 30 | רגיל | בינוני |
| 1080p | 30 | גבוה | גבוה |
טיפול בהפרעות ומחזור חיים
ב-iOS, AVAudioSession.routeChangeNotification ו-AVAudioSession.interruptionNotification — Agora SDK מטפל בהם אוטומטית עם AgoraAudioScenario הנכון. תרחיש ה-.meeting הוא אופטימלי לשיחות וידאו: מאפשר AEC, ANS, AGC.
כאשר מתרחשת שיחת מערכת נכנסת, Agora אינה משהה אוטומטית. אנו מיישמים באמצעות CXCallObserver: כאשר CXCall.hasConnected == true — muteLocalAudioStream(true), כשהשיחה מסתיימת — unmute.
ב-Android, ללא ForegroundService, Android 8+ יהרוג את התהליך תוך 5–10 דקות. אנו מתחילים ForegroundService בתחילת שיחה עם התראה. android:foregroundServiceType="camera|microphone" במניפסט הוא חובה מ-Android 14.
מה כלול בעבודה
- ניתוח דרישות: מספר משתתפים, איכות, אינטגרציה עם השרת האחורי, תקציב.
- הגדרת טוקנים: יצירה, שמירה במטמון, טיפול בפגות.
- מימוש UI: קנבסי וידאו, פקדים, רקע וירטואלי.
- מחזור חיים: ForegroundService ב-Android, CXCallObserver ב-iOS.
- בדיקות: 10+ תרחישים (ניתוק רשת, שיחה נכנסת, חיבור מחדש מהיר).
- תיעוד: README, הערות קוד, דיאגרמת זרימת טוקנים.
- גישה לקוד המקור והדרכה לצוות שלכם.
- תמיכה: שבועיים לאחר השחרור, תיקוני באגים.
לוחות זמנים ועלות
אינטגרציה בסיסית (שיחת וידאו 1-on-1 עם שליטה במצלמה, השתקה, היפוך) — 3–5 ימים. עם תמיכה בקבוצות עד 8 משתתפים, ניהול טוקנים ומצב רקע — 1–2 שבועות. העלות נקבעת לאחר ניתוח דרישות. צרו קשר להערכת הפרויקט שלכם — נספק הערכה ומפת דרכים. קבלו ייעוץ על אינטגרציית Agora או הזמינו מימוש שיחות וידאו.
אנחנו שותף מוסמך של Agora עם 5 שנות ניסיון ו-30+ פרויקטים מוצלחים. זמינות ותמיכה מובטחות.







