2년 전 Chrome에서 VP9 코덱 지원을 사용 설정했습니다. 데스크톱 및 Android의 Chrome 48부터 VP9는 WebRTC를 사용하는 영상 통화의 선택적 동영상 코덱이 됩니다.
VP9은 이전 코덱과 동일한 기본 청사진을 사용하지만, WebM팀은 동영상의 각 바이트에서 더욱 뛰어난 품질을 얻기 위해 VP9을 개선해 왔습니다. 예를 들어, 인코더는 가장 선명한 이미지 특징에 우선순위를 부여하고, 코덱은 비대칭 변환을 사용하여 가장 난해한 장면에서도 뚜렷하고 블록이 없는 모습을 유지하도록 지원합니다.
VP9를 사용하면 현재 패킷 손실이나 지연 없이 720p를 제공할 수 있는 인터넷 연결에서 동일한 대역폭으로 1080p 영상 통화를 지원할 수 있습니다. VP9는 연결 상태가 좋지 않거나 비싼 데이터 요금제를 사용하는 사용자의 데이터 사용량도 줄일 수 있으며, 최상의 경우 VP8의 비트 전송률의 40% 만 필요합니다.
아래 스크린샷은 WebRTC 인코더 설정으로 녹화한 동영상으로, VP8 호출과 VP9를 비교하여 비트 전송률을 30% 절약한 것을 보여줍니다.
WebRTC 통화의 코덱은 비트 전송률과 같은 다른 미디어 설정과 함께 클라이언트의 미디어 기능을 설명하는 세션 설명 프로토콜 (SDP) 메타데이터 메시지를 교환하여 호출자와 호출 대상 간에 협상됩니다.
미디어 기능을 교환하는 이 핸드셰이크 프로세스를 제안/응답이라고 합니다. 예를 들어 호출자는 VP8을 대체로 사용하여 VP9를 선호한다고 명시하는 오퍼 (SDP 메시지)를 전송할 수 있습니다. 호출 대상이 VP9를 처리할 수 있다는 응답이 있으면 VP9를 사용하여 영상 통화를 진행할 수 있습니다. 호출 대상이 VP8만 사용할 수 있다는 응답으로 응답하면 호출은 VP8로 진행됩니다.
이를 확인하려면 표준 WebRTC 영상 채팅 애플리케이션 appr.tc의 코드를 살펴보세요.
appcontroller.js에서 URL에 vsc 또는 vrc 매개변수가 지정되지 않는 한 VP9가 기본 코덱으로 설정됩니다.
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 행에 나열된 첫 번째 코덱이고 그 뒤에 Chrome에서도 사용할 수 있는 VP8이 표시됩니다. 예를 들어 appr.tc의 URL 매개변수를 통해 VP8을 기본 코덱으로 설정하면 VP8이 대신 먼저 표시됩니다.
자세히 알아보기
- WebM 프로젝트: VP9 리소스
- webrtc.org: WebRTC 프로젝트의 홈
- g.co/webrtc: 다른 WebRTC 리소스 링크
- webrtc.github.io/samples: 실시간 WebRTC 샘플
- test.webrtc.org: 오픈소스 기기 및 네트워크 테스트 도구 및 버그 신고 프레임워크