이제 WebRTC에서 VP9을 사용할 수 있습니다.

2년 전 Chrome은 VP9 코덱을 지원합니다. 데스크톱 및 Android용 Chrome 48부터 VP9이 WebRTC를 사용하는 영상 통화용 동영상 코덱(선택사항)이 됩니다.

VP9은 이전 코덱과 동일한 기본 청사진을 사용하지만 WebM팀에서는 동영상의 각 바이트에서 더 많은 품질을 얻기 위해 VP9을 개선했습니다. 예를 들어 인코더는 가장 선명한 이미지 특징을 우선시하고, 이제 코덱은 비대칭 변환을 사용하여 가장 까다로운 장면도 선명하고 블록이 없어 보이도록 합니다.

VP9을 사용하면 현재 패킷 손실이나 지연 없이 720p를 제공할 수 있는 인터넷 연결이 동일한 대역폭에서 1080p 영상 통화를 지원할 수 있습니다. 또한 VP9은 연결 상태가 좋지 않거나 데이터 요금이 비싼 사용자의 데이터 사용량을 줄여 최상의 경우 VP8의 40% 비트 전송률만 필요로 합니다.

WebRTC 인코더 설정을 사용해 만든 아래의 스크린샷을 통해 VP8 호출을 VP9과 비교해 비트 전송률이 30% 절감되는 것을 확인할 수 있습니다.

VP8 및 VP9 WebRTC 호출을 나란히 보여주는 동영상 스크린샷

비트 전송률과 같은 기타 미디어 설정과 함께 WebRTC 통화의 코덱은 클라이언트의 미디어 기능을 설명하는 SD (Session Description Protocol) 메타데이터 메시지를 교환함으로써 발신자와 수신자 간에 협상됩니다.

미디어 기능을 교환하는 이러한 핸드셰이크 프로세스를 제안/답변이라고 합니다. 예를 들어 발신자가 VP9에 대한 선호도를 언급하는 제안 (SDP 메시지)을 보내고 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는 상세하며 사람이 읽을 수 있도록 설계되지 않았지만, 호출이 완료되면 DevTools 콘솔에서 appr.tc에 사용되는 SDP를 확인할 수 있습니다. 코덱과 관련하여 중요한 부분은 m 행입니다.

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

최신 버전의 Chrome에서 기본 설정으로 appr.tc를 사용하면 VP9이 SDP m 라인에 나열된 첫 번째 코덱이며 그 뒤에 VP8이 나열되며 Chrome에서도 사용할 수 있습니다. VP8을 기본 코덱으로 설정하면 (예: appr.tc의 URL 매개변수를 통해) VP8이 대신 먼저 표시됩니다.

자세히 알아보기