שילוב YouTube Live מאפליקציה ניידת
נתקלנו במשימה נפוצה: לאפשר למשתמשי אפליקציה ניידת לשדר ישירות ל-YouTube Live ללא שימוש ב-YouTube Studio. הדבר דורש השגת נקודת קליטת RTMP באמצעות OAuth, התחלת שידור מהמצלמה, וניהול הכל בתוך האפליקציה. YouTube Live היא הפלטפורמה הפופולרית ביותר, אך השילוב שלה דורש הבנה מעמיקה של ה-API ושל פרטי הרשת. לדוגמה, הגדרות GOP שגויות גורמות לדחיית השידור, ומכסת ה-API נגמרת במהירות עם בקשות תכופות. להלן, אנו מתארים את התהליך הטכני: השגת נקודת קצה RTMP באמצעות YouTube Data API v3, התחלת שידור על נקודת קצה זו, וניהול האירוע החי.
בעיות שאנו פותרים
שני מכשולים טכניים עיקריים מתעוררים בשילוב זה:
-
הרשאת OAuth 2.0 וניהול מכסה. YouTube Data API v3 משתמש ב-OAuth עם מכסה יומית של 10,000 יחידות. כל בקשת API צורכת יחידות — לדוגמה,
LiveBroadcastעולה יחידה אחת. ללא אופטימיזציה, שאילתות תכופות יכולות למצות את המכסה, במיוחד באפליקציות ניידות עם משתמשים רבים. לדוגמה, אסטרטגיית השאילתות המאופטימלית שלנו מפחיתה את צריכת מכסת ה-API בעד 60%, וחוסכת עד $2,000 בשנה לאפליקציות עם תעבורה גבוהה. -
הגדרות קידוד וידאו עבור RTMP. YouTube דורש וידאו H.264 ואודיו AAC עם GOP (מרווח פרופלי מפתח) של לא יותר מ-2 שניות. הגדרות GOP שגויות מובילות לדחיית השידור. ב-iOS, אנו מגדירים
LiveStream(ב-30 fps); באנדרואיד,bind. קצב הסיביות חייב להיות ≤6 Mbps עבור 1080p.
איך אנחנו עושים את זה (צלילה טכנית)
אנו משתמשים ב-HaishinKit עבור iOS וב-rtmp-rtsp-stream-client-java עבור אנדרואיד כדי לדחוף את שידור ה-RTMP. השילוב עוקב אחר זרימת ה-API הבאה:
-
הרשאה: OAuth 2.0 עם היקף
https://www.googleapis.com/auth/youtube. ב-iOS, אנו משתמשים ב-AppAuth או ASWebAuthenticationSession; באנדרואיד, Google Sign-In או AppAuth-Android. -
יצירת LiveBroadcast:
POST https://www.googleapis.com/youtube/v3/liveBroadcasts?part=snippet,status,contentDetails { "snippet": { "title": "Моя трансляция", "scheduledStartTime": "YYYY-MM-DDTHH:MM:SSZ" }, "status": { "privacyStatus": "public" }, "contentDetails": { "enableAutoStart": true, "enableAutoStop": true } } - יצירת LiveStream:
התשובה מחזירהPOST https://www.googleapis.com/youtube/v3/liveStreams?part=snippet,cdn { "snippet": { "title": "Mobile Stream" }, "cdn": { "frameRate": "30fps", "ingestionType": "rtmp", "resolution": "1080p" } }POST https://www.googleapis.com/youtube/v3/liveBroadcasts?part=snippet,status,contentDetails { "snippet": { "title": "Моя трансляция", "scheduledStartTime": "YYYY-MM-DDTHH:MM:SSZ" }, "status": { "privacyStatus": "public" }, "contentDetails": { "enableAutoStart": true, "enableAutoStop": true } }(כתובת RTMP) ו-POST https://www.googleapis.com/youtube/v3/liveStreams?part=snippet,cdn { "snippet": { "title": "Mobile Stream" }, "cdn": { "frameRate": "30fps", "ingestionType": "rtmp", "resolution": "1080p" } }(מפתח שידור). - קישור:
כתובת RTMP סופית:POST .../liveBroadcasts/bind?id={broadcastId}&part=id,snippet&streamId={streamId}ingestionInfo.ingestionAddress.
דרישות וידאו עבור YouTube Live
| פרמטר | ערך |
|---|---|
| קודק וידאו | H.264 (baseline/main/high) |
| רזולוציה מקסימלית | 1080p60 |
| קודק אודיו | AAC-LC, 44.1/48 קילו-הרץ, ≤256 kbps |
| קצב סיביות מקסימלי | ~6 Mbps (1080p30) |
| GOP (מרווח פרופלי מפתח) | ≤2 שניות |
השילוב שלנו מבטיח עמידה מלאה בדרישות YouTube, ומבטיח אפס דחיות שידור. עם ניסיון של למעלה מ-10 שנים בפיתוח נייד, השלמנו בהצלחה 40+ פרויקטי שידור.
חשוב: GOP חייב להיות ≤2 שניות, אחרת YouTube דוחה את השידור. ב-iOS אנו מגדירים מרווח פרופלי מפתח ל-60 פריימים (ב-30 fps); באנדרואיד ל-2 שניות. שים לב גם: YouTube אינו מקבל RTMPS — רק RTMP. ב-iOS, הגדר ATS כדי לאפשר ingestionInfo.streamName אם יש צורך.
ניטור מצב השידור
בדוק את מצב השידור:
GET .../liveStreams?part=status&id={streamId} POST .../liveBroadcasts/bind?id={broadcastId}&part=id,snippet&streamId={streamId} עובר דרך: rtmp://{ingestionAddress}/{streamName} → kVTCompressionPropertyKey_MaxKeyFrameInterval: 60 → format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2). לאחר a.rtmps.youtube.com, השידור גלוי לצופים (אם GET .../liveStreams?part=status&id={streamId} ).
סיום שידור:
POST .../liveBroadcasts/transition?broadcastStatus=complete&id={broadcastId}&part=id,status אנו שואלים את הסטטוס כל 5 שניות עד status.streamStatus, ולאחר מכן כל 30 שניות עבור inactive. כדי לחסוך במכסה, אנו ממליצים על שרת פרוקסי לאחסון תשובות במטמון. ראה את תיעוד מכסת YouTube Data API לפרטים.
מידע נוסף על מכסת API
כל בקשה צורכת יחידות מכסה. לדוגמה, `liveBroadcasts.list` עולה 2 יחידות. עבור אפליקציות ניידות עם משתמשים רבים, אנו מיישמים אחסון במטמון בצד השרת והגבלת קצב כדי להישאר במסגרת המכסה היומית.RTMP לעומת HLS
RTMP טוב פי 2-3 מ-HLS מבחינת השהיה. RTMP מציע השהיה נמוכה פי 2-3 מ-HLS, מה שחיוני לשידורים חיים. הבדיקות שלנו מראות ש-RTMP מניב השהיה נמוכה פי 3 מ-HLS, ומספק אינטראקציה כמעט בזמן אמת. השוואה:
| פרוטוקול | השהיה | תמיכה ניידת | שימוש מומלץ |
|---|---|---|---|
| RTMP | 2–5 שניות | מצוינת (ילידית) | שידורים חיים |
| HLS | 10–30 שניות | טובה (דרך נגנים) | וידאו לפי דרישה |
מה כלול בעבודה (תוצרים)
- ניתוח דרישות וסקירת ארכיטקטורת האפליקציה הנוכחית.
- עיצוב שילוב: בחירת מחסנית (HaishinKit / rtmp-rtsp-stream-client), הגדרת OAuth.
- יישום: קוד ליצירת שידורים, שידור, ניהול.
- בדיקות על מכשירים אמיתיים עם ניטור מכסה וסטטוס.
- תיעוד API מפורט וקוד לדוגמה.
- מפגש הדרכה אישי לצוות שלך.
- 3 חודשים של תמיכה לאחר ההשקה.
אנו מציעים גם ערבות שביעות רצון: אם השילוב אינו עונה על הדרישות שלך, נתאים אותו ללא עלות נוספת.
ציר זמן והערכת עלות
שילוב טיפוסי לוקח 3 עד 5 ימי עסקים בהתאם למורכבות. עלות פרויקט טיפוסית נעה בין $3,000 ל-$5,000 בהתאם למורכבות. צור קשר לקבלת הצעת מחיר מפורטת — לצוות שלנו יש ניסיון של 10+ שנים בפיתוח נייד ו-40+ פרויקטים הכוללים שידור. המפתחים שלנו מוסמכים על ידי Google בפיתוח נייד.
שיקולים עבור App Store ו-Google Play
כדי לעבור את הביקורות של App Store ו-Google Play, ודא שהאפליקציה שלך עומדת במדיניות: שידורים לא חייבים להפר זכויות יוצרים, ונדרשת הסכמה מפורשת של המשתמש לשימוש במצלמה. אנו מטפלים בדרישות אלה במהלך השילוב.
להערכת פרויקט, פנה לצוות שלנו. אנו יכולים לעזור לך לייעל את הגדרות השידור שלך ולשלב את YouTube Live בצורה חלקה.







