VP9 พร้อมใช้งานใน WebRTC แล้ว

เมื่อ 2 ปีก่อน Chrome ได้เปิดใช้การรองรับตัวแปลงรหัส VP9 ตั้งแต่ Chrome 48 บนเดสก์ท็อปและ Android เป็นต้นไป VP9 จะเป็นตัวแปลงรหัสวิดีโอที่ไม่บังคับสำหรับวิดีโอคอลที่ใช้ WebRTC

แม้ว่า VP9 จะใช้พิมพ์เขียวพื้นฐานเดียวกับตัวแปลงรหัสรุ่นก่อน แต่ทีม WebM ได้รวมการปรับปรุงไว้ใน VP9 เพื่อให้ได้คุณภาพที่ดีขึ้นจากแต่ละไบต์ของวิดีโอ เช่น ตัวเข้ารหัสจะให้ความสำคัญกับองค์ประกอบรูปภาพที่คมชัดที่สุด และตอนนี้ตัวแปลงรหัสใช้การเปลี่ยนรูปแบบแบบอสมมาตรเพื่อช่วยรักษาให้ฉากที่ซับซ้อนที่สุดดูคมชัดและไม่มีบล็อก

เมื่อใช้ VP9 การเชื่อมต่ออินเทอร์เน็ตที่ปัจจุบันสามารถแสดงผล 720p ได้โดยไม่สูญเสียแพ็กเก็ตหรือเกิดความล่าช้าจะรองรับวิดีโอคอล 1080p ที่แบนด์วิดท์เดียวกัน VP9 ยังช่วยลดปริมาณการใช้อินเทอร์เน็ตสำหรับผู้ใช้ที่มีการเชื่อมต่อไม่ดีหรือแพ็กเกจอินเทอร์เน็ตที่มีราคาแพงได้ด้วย โดยในกรณีที่ดีที่สุดจะใช้บิตเรตเพียง 40% ของ VP8

คุณสามารถดูการเปรียบเทียบการเรียกใช้ VP8 กับ VP9 ได้ในภาพหน้าจอด้านล่างซึ่งเป็นไฟล์บันทึกที่เราสร้างขึ้นด้วยการตั้งค่าโปรแกรมเปลี่ยนไฟล์ WebRTC ซึ่งแสดงการประหยัดบิตเรต 30%

ภาพหน้าจอของวิดีโอที่แสดงการโทรผ่าน WebRTC ของ VP8 และ VP9 ควบคู่กัน

โค้ดสำหรับสาย WebRTC รวมถึงการตั้งค่าสื่ออื่นๆ เช่น อัตราบิต จะได้รับการเจรจาระหว่างผู้โทรและผู้รับสายโดยการแลกเปลี่ยนข้อความข้อมูลเมตาของ Session Description Protocol (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 ใช้ได้จากคอนโซลเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์เมื่อมีการทำสายเรียกเข้า ส่วนสําคัญเกี่ยวกับตัวแปลงรหัสคือบรรทัด m

{
    "sdp": "v=0\r\no=- 9188830394109743399 2 IN IP4 127.0.0.1\r\ns … m=video ...",
    "type": "offer"
}

เมื่อใช้ appr.tc กับการตั้งค่าเริ่มต้นใน Chrome เวอร์ชันล่าสุด คุณจะเห็น VP9 เป็นโค้ดแรกในรายการ SDP บรรทัด m ตามด้วย VP8 ซึ่ง Chrome ใช้ได้เช่นกัน หากคุณตั้งค่า VP8 เป็นโค้ดที่แนะนำ (ผ่านพารามิเตอร์ของ URL ใน appr.tc เป็นต้น) VP8 จะแสดงก่อนแทน

ดูข้อมูลเพิ่มเติม

  • โปรเจ็กต์ WebM: แหล่งข้อมูล VP9
  • webrtc.org: หน้าแรกของโปรเจ็กต์ WebRTC
  • g.co/webrtc: ลิงก์ไปยังแหล่งข้อมูลอื่นๆ ของ WebRTC
  • webrtc.github.io/samples: ตัวอย่าง WebRTC เผยแพร่อยู่
  • test.webrtc.org: เครื่องมือทดสอบอุปกรณ์และเครือข่ายแบบโอเพนซอร์สและเฟรมเวิร์กการรายงานข้อบกพร่อง