blob: 32fb0557b23172800f8f703585d8d5d01b64f8d1 [file] [view]
# Remoting Codec Instructions
Instructions for working in `//remoting/codec`.
## Architecture Overview
The `codec` directory contains the audio and video encoding/decoding logic.
Chrome Remote Desktop has migrated to WebRTC-based video encoding; much of the
non-WebRTC code in this directory is obsolete and scheduled for deletion.
### Video Codecs
#### Current Implementation (WebRTC-based)
CRD implements custom wrappers around WebRTC encoders, optimized for low-latency
desktop streaming.
* **Base Interface:** `WebrtcVideoEncoder`
* **Active Encoders:**
* `WebrtcVideoEncoderVpx`: Handles VP8 and VP9 encoding.
* `WebrtcVideoEncoderAv1`: Handles AV1 encoding. This is the default codec
used for CRD sessions.
* **Experimental / Unsupported:**
* `WebrtcVideoEncoderGpu`: Hardware-accelerated encoding. It is compiled
on Windows and Linux, but is not currently supported for general usage.
### Audio Codecs
* **Opus:** CRD exclusively uses Opus for audio streaming.
* **Implementation:** WebRTC is currently used for Opus encoding and decoding.
### Utilities
* `ScopedVpxCodec`: A helper for managing the lifetime of `vpx_codec_ctx`.
## Key Files to Read
* `remoting/codec/webrtc_video_encoder.h`: The primary video encoding
interface.
* `remoting/codec/webrtc_video_encoder_aom.h`: Provides the AV1 encoder which
is the default and most commonly used video encoder implementation.
* `remoting/codec/webrtc_video_encoder_vpx.h`: Provides the VP8 and VP9
encoders which are used for fallback or compatibility.