[FS_ACAPI] WebRTC Injectable Codecs
This pCR proposes adding detailed technical clauses to 3GPP TR 26.858 regarding support for injectable codecs in libwebrtc. The contribution addresses the need for greater flexibility in codec selection beyond the traditionally fixed set of audio and video codecs supported by libwebrtc.
AudioEncoderFactory classAudioDecoderFactory classCreatePeerConnectionFactory() API during initializationThree-Step Workflow:
1. Implementation or selection of encoder and decoder factories for desired codecs
2. Registration of factories with PeerConnectionFactory
3. Negotiation of codec capabilities during session establishment via SDP offer/answer exchange
Technical Requirements:
- Factories must support SDP mapping functions (e.g., SdpToConfig())
- Must correctly advertise codec capabilities and parameters
- Runtime codec selection based on negotiated SDP attributes and payload types
- Provides fine-grained control over codec selection and interoperability
Basic Approach: Demonstrates usage of built-in codecs (Opus, G.711) through:
- CreateBuiltinAudioEncoderFactory()
- CreateBuiltinAudioDecoderFactory()
Selective Approach: Shows how to specify codec subset using template-based factory creation:
- CreateAudioEncoderFactory<AudioEncoderOpus, AudioEncoderPCM>()
- CreateAudioDecoderFactory<AudioDecoderOpus, AudioDecoderPCM>()
Implementation Steps:
1. Load external codec module via dynamic linking (e.g., libamr_codec_module.so)
2. Lookup factory entry points using dlsym()
3. Create codec factories from external module
4. Optionally combine with built-in codecs
5. Pass combined factories into PeerConnectionFactory
Key Capability: Enables runtime integration of external codecs with flexible combination of built-in codecs for advanced interoperability scenarios
Integration Approaches:
- Built-in only
- External module only
- Hybrid approaches
Configuration: Controlled via GN flags and build scripts in libwebrtc's build system, supporting both static and dynamic linking of codec modules
The document proposes adding these clauses to TR 26.858, either as:
- A separate clause, or
- Under existing clause 5.3.2.3 ("Libwebrtc")