دو سال پیش کروم پشتیبانی از کدک VP9 را فعال کرد. از Chrome 48 روی دسکتاپ و Android، VP9 یک کدک ویدیویی اختیاری برای تماسهای ویدیویی با استفاده از 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 ، 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 با تنظیمات پیشفرض آن در نسخه اخیر کروم، خواهید دید که VP9 اولین کدک لیست شده در خط SDP m است – به دنبال آن VP8، که کروم نیز میتواند از آن استفاده کند. اگر VP8 را بهعنوان کدک ترجیحی تنظیم کنید (مثلاً از طریق پارامترهای URL در appr.tc )، VP8 در ابتدا فهرست میشود.
بیشتر بدانید
- پروژه WebM : منابع VP9
- webrtc.org : خانه پروژه WebRTC
- g.co/webrtc : پیوندهایی به دیگر منابع WebRTC
- webrtc.github.io/samples : نمونه های WebRTC به صورت زنده
- test.webrtc.org : ابزارهای تست منبع باز دستگاه و شبکه و چارچوب گزارش اشکال