לפני שנתיים הופעלה ב-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) יכול להציע לגורם הקורא להשתמש ב-VP9, עם VP8 כחלופה. אם התשובה מאשרת שהצד הנגלה יכול לטפל ב-VP9, שיחת הווידאו יכולה להמשיך באמצעות VP9. אם המשתמש שאל למי להתקשר יגיב שהוא יכול להשתמש רק ב-VP8, השיחה תמשיך ב-VP8.
כדי לראות איך זה עובד, אפשר לעיין בקוד של אפליקציית הווידאו צ'אט הקנונית של WebRTC appr.tc.
ב-appcontroller.js, ה-codec המועדף מוגדר כ-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: כלי בדיקה של רשתות ומכשירים בקוד פתוח ומסגרת לדיווח על באגים