VP9 זמין עכשיו ב-WebRTC

לפני שנתיים הופעלה תמיכה ב-Chrome בקודק VP9. החל מ-Chrome 48 במחשבים ובמכשירי Android, VP9 ישמש כקודק וידאו אופציונלי לשיחות וידאו באמצעות WebRTC.

למרות ש-VP9 משתמש באותה תוכנית בסיסית שבה השתמשתם ברכיבי הקודק הקודמים, צוות WebM הוסיף שיפורים ל-VP9 כדי לשפר את האיכות מכל בייט של סרטון. למשל, המקודד נותן עדיפות לתכונות התמונה החדות ביותר, והקודק משתמש עכשיו בשינויים אסימטריים כדי שגם הסצנות הכי מאתגרות ייראו חדות וללא בלוקים.

עם VP9, חיבורי אינטרנט שיכולים כרגע להציג 720p ללא אובדן מנות או עיכוב יוכלו לתמוך בשיחת וידאו ב-1080p באותו רוחב פס. VP9 יכול גם להפחית את השימוש בנתונים עבור משתמשים עם חיבורים חלשים או תוכניות נתונים יקרות, ולדרוש במקרים הטובים ביותר רק 40% מקצב העברת הנתונים של VP8.

כדי לראות את ההבדלים בין שיחות VP8 לבין VP9 בצילום המסך של ההקלטות שביצענו עם הגדרות מקודד WebRTC, ניתן לראות חיסכון של 30% בקצב העברת הנתונים:

צילום מסך של סרטון שבו מוצגות שיחות VP8 ו-VP9 WebRTC זו לצד זו

ה-codec של קריאת WebRTC, יחד עם הגדרות מדיה אחרות כמו קצב העברת נתונים, נקבע במשא ומתן בין המתקשר לבין המקבל על ידי החלפת הודעות מטא-נתונים של פרוטוקול סשן (SDP) שמתארות את יכולות המדיה של הלקוח.

תהליך לחיצת היד הזה – של החלפת יכולות המדיה – ידוע כ'הצעה/תשובה'. לדוגמה, יכול להיות שמתקשר ישלח הצעה (הודעת SDP) שמציינת העדפה ל-VP9, עם VP8 כחלופה. אם יש אישור לכך שהמתקשר/ת יכול/ה לטפל ב-VP9, אפשר להמשיך את שיחת הווידאו ב-VP9. אם המתקשר משיב שהוא יכול להשתמש רק ב-VP8, השיחה תמשיך ב-VP8.

כדי לראות את זה בפעולה, עיין בקוד של אפליקציית הווידאו צ'אט הקנונית appr.tc של WebRTC.

בקובץ appcontroller.js, VP9 מוגדר כקודק המועדף, אלא אם מציינים בכתובת ה-URL פרמטר vsc או vrc:

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 במסוף כלי הפיתוח. החלק החשוב ביותר בנוגע לרכיבי קודק הוא שורת ה-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 יופיע ראשון במקום זאת.

מידע נוסף