לפני שנתיים הוספנו ל-Chrome תמיכה ברכיב ה-Codec VP9. מגרסה 48 של Chrome למחשב ול-Android, VP9 יהיה רכיב Codec אופציונלי לווידאו בשיחות וידאו באמצעות WebRTC.
ב-VP9 נעשה שימוש באותו תוכנית בסיסית כמו בקודקים קודמים, אבל צוות WebM הוסיף ל-VP9 שיפורים כדי לשפר את האיכות של כל ביייט של וידאו. לדוגמה, הקודק מעניק עדיפות לתכונות התמונה החדות ביותר, והוא משתמש עכשיו בטרנספורמציות אסימטריות כדי לשמור על איכות גבוהה גם בסצנות הכי מאתגרות, ללא רעשי רקע או חסימה.
בעזרת VP9, חיבורי אינטרנט שיכולים כרגע להציג 720p ללא אובדן חבילות או עיכוב יוכלו לתמוך בשיחות וידאו ברזולוציית 1080p באותו רוחב פס. בנוסף, VP9 יכול לצמצם את השימוש בנתונים של משתמשים עם חיבורים חלשים או עם חבילות גלישה יקרות, ובמקרים הטובים ביותר הוא דורש רק 40% ממהירות הנתונים של VP8.
כדי לראות את ההשוואה בין שיחות VP8 לבין שיחות VP9, אפשר לעיין בצילום המסך שלמטה. מדובר בהקלטות שיצרנו עם הגדרות המקודד של WebRTC, שמראות חיסכון של 30% ברוחב הפס:
הקודק של שיחת WebRTC, יחד עם הגדרות מדיה אחרות כמו קצב העברת נתונים, נקבע במשא ומתן בין מבצע הקריאה לבין הנמען באמצעות החלפת הודעות מטא-נתונים של פרוטוקול תיאור הסשן (SDP) שמתארות את יכולות המדיה של הלקוח.
תהליך לחיצת היד הזה – החלפת יכולות מדיה – נקרא 'הצעה/תשובה'. לדוגמה, מבצע (הודעה מסוג SDP) יכול לשלוח מבצע (הודעה מסוג SDP) עם העדפה ל-VP9, עם VP8 כחלופה. אם התשובה מאשרת שהצד הנגלה יכול לטפל ב-VP9, שיחת הווידאו יכולה להמשיך באמצעות VP9. אם המשתמש שאליו התקשרתם עונה שהוא יכול להשתמש רק ב-VP8, השיחה תמשיך ב-VP8.
כדי לראות את זה בפעולה, אפשר לעיין בקוד של אפליקציית הווידאו צ'אט הקנונית של WebRTC, appr.tc.
ב-appcontroller.js, הקודק המועדף מוגדר כ-VP9, אלא אם צוין פרמטר vsc או vrc בכתובת ה-URL:
AppController.prototype.loadUrlParams_ = function() {
// ...
var DEFAULT_VIDEO_CODEC = 'VP9';
// …
this.loadingParams_.videoSendCodec = urlParams['vsc'];
// ...
this.loadingParams_.videoRecvCodec = urlParams['vrc'] || DEFAULT_VIDEO_CODEC;
}
ב-sdputils.js, הערך המותאם אישית של הקודק (אם צוין) משמש לאחר מכן למטא-נתונים של ה-SDP:
function maybePreferVideoSendCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'send', params.videoSendCodec);
}
function maybePreferVideoReceiveCodec(sdp, params) {
return maybePreferCodec(sdp, 'video', 'receive', params.videoRecvCodec);
}
הפונקציה maybePreferCodec() שמשמשת כאן מגדירה ערכים לקודק המבוקש בטקסט של המטא-נתונים של ה-SDP. קובץ ה-SDP הוא מפורט ולא מיועד לקריאה על ידי בני אדם, אבל אפשר לראות את קובץ ה-SDP שבו נעשה שימוש על ידי appr.tc במסוף DevTools אחרי ביצוע קריאה. החלק החשוב לגבי קודיקים הוא שורת ה-m:
{
"sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
"type": "offer"
}
כשמשתמשים ב-appr.tc עם הגדרות ברירת המחדל שלו בגרסה עדכנית של Chrome, רואים ש-VP9 הוא הקודק הראשון שמופיע בשורה m של ה-SDP, ואחריו VP8, שגם Chrome יכול להשתמש בו. אם תגדירו את VP8 כקודק המועדף (למשל, באמצעות פרמטרים של כתובת URL ב-appr.tc), VP8 יופיע במקום זאת במקום הראשון.
למידע נוסף
- פרויקט WebM: משאבי VP9
- webrtc.org: האתר של פרויקט WebRTC
- g.co/webrtc: קישורים למשאבים אחרים של WebRTC
- webrtc.github.io/samples: דוגמאות ל-WebRTC בזמן אמת
- test.webrtc.org: כלי קוד פתוח לבדיקת רשתות ומכשירים ומסגרת לדיווח על באגים