איך שיפור ביצועי הסרטונים ב-YouTube באמצעות Media Capabilities API

חוויית צפייה חלקה בסרטונים בכל המכשירים.

François Beaufort
François Beaufort

בניסוי עם Media Capabilities API, YouTube נהנתה מעלייה של 7.1% MTBR עם ירידה של 0.4% בלבד ברזולוציה הממוצעת של סרטונים שהוצגו.

הבעיה

בדרך כלל, לאתרי מדיה יש כמה גרסאות של כל סרטון שהם יכולים להציג למשתמשים, בקידוד בקצב פריימים, רזולוציות וקודקים שונים. עד לאחרונה, מפתחי אתרים היו צריכים להסתמך רק על isTypeSupported() או על canPlayType() כדי לקבוע אם אפשר להפעיל כל וריאציה בדפדפן של משתמש מסוים. למרות שהאפשרות הזו אמרה למפתח אם אפשר להפעיל מדיה בכלל, אבל היא לא סיפקה אינדיקציה לגבי איכות ההפעלה, למשל אם יש נפילות פריימים או אם הסוללה של המכשיר מתרוקנת. בלי המידע הזה, המפתחים היו צריכים ליצור היוריסטיקה משלהם או להניח שמכשיר יכול להפעיל שילוב של קודק/רזולוציה, הוא היה יכול לעשות את זה בצורה חלקה ויעילה. אצל משתמשים בעלי מכשירים פחות מתקדמים, לרוב החוויה הייתה גרועה.

הפתרון

ה-API של Media Capabilities מאפשר לאתרים לקבל מידע נוסף על הביצועים של פענוח הקוד של הווידאו של הלקוח, ולקבל החלטה מושכלת לגבי הקודק והרזולוציה שיש להעביר למשתמש. באופן ספציפי, ה-API מספק למפתח הערכה לגבי החלקלקות והיעילות האנרגטית של שילוב קודק מסוים ורזולוציה. כך המפתח יכול להימנע מתרחישים שבהם סביר להניח שללקוח תהיה חוויית הפעלה לא טובה.

ב-Chrome, Media Capabilities API משתמש במדדים מהפעלות קודמות כדי לחזות אם הפעלות עתידיות באותו קודק ובאותה רזולוציה יפוענחו בצורה חלקה.

מקרה לדוגמה: YouTube

מערכת YouTube השתמשה ב-API Media Capabilities כדי למנוע מהאלגוריתם של קצב העברת הנתונים המותאם אישית לבחור רזולוציות שלא מתאימות למכשיר.

משתמשים שהיו חלק מקבוצת הניסוי הבחינו באופן קולקטיבי בסינון נתונים בתדירות נמוכה יותר (הזמן הממוצע בין זרועות הבקרה, או MTBR, עלה ב-7.1%), והרזולוציה הממוצעת, שנמדדה לפי גובה הסרטון, הוצגה לקבוצה המצטברת רק ב-0.4%. העלייה המשמעותית ב-MTBR עם ירידה קטנה מקבילה ברזולוציה הממוצעת מצביעה על כך שהשינוי הזה שיפר באופן משמעותי את האיכות של קבוצת משנה קטנה של משתמשים שחוויית השימוש שלהם הייתה גרועה.

הטמעת ממשק API של יכולות מדיה באתר

בדוגמה הרשמית אפשר לראות איך פועל ה-Decoding Info API.