WebRTC module

WebRTC module

WebRTC media transport via libdatachannel; peer sessions, media bridge, codec negotiation.

webrtc

WebRTC media transport via libdatachannel; peer sessions, media bridge, codec negotiation.

Classes

NameDescription
SignallingInterfaceTransport-agnostic signalling interface for WebRTC session setup.
MediaBridgeConvenience wrapper that creates WebRTC tracks on a PeerConnection and exposes per-track sender/receiver adapters for PacketStream integration.
PeerSessionManages a WebRTC peer connection lifecycle over any signalling transport that implements SignallingInterface.
WebRtcTrackSenderPacketProcessor that sends encoded media to a single libdatachannel Track via sendFrame().
WebRtcTrackReceiverPacketStreamAdapter that receives depacketized frames from a single remote libdatachannel Track and emits them as VideoPacket or AudioPacket into a PacketStream.
CodecNegotiatorMaps RTP codec names to FFmpeg encoders and queries FFmpeg at runtime to determine what codecs are available.
TrackHandleResult of creating a track: the track itself plus its RTP config. Keep the config around - you need it for WebRtcTrackSender.
CodecSpecCanonical description of a codec supported by icey's WebRTC helpers.
NegotiatedCodecResult of codec negotiation between a remote SDP offer and the local FFmpeg codec inventory.

Enumerations

NameDescription
CodecMediaTypeWhether a codec carries audio or video media.
CodecIdStable codec identifiers used across negotiation and track setup.

CodecMediaType

enum CodecMediaType

Whether a codec carries audio or video media.

ValueDescription
VideoVideo RTP payload.
AudioAudio RTP payload.

CodecId

enum CodecId

Stable codec identifiers used across negotiation and track setup.

ValueDescription
UnknownUnrecognized or unsupported codec.
H264H.264 / AVC.
H265H.265 / HEVC.
VP8Google VP8.
VP9Google VP9.
AV1AOMedia AV1.
OpusOpus audio.
PCMUG.711 mu-law audio.
PCMAG.711 A-law audio.
G722G.722 wideband audio.
AACAAC audio.

Functions

ReturnNameDescription
TrackHandlecreateVideoTrackCreate a video send track on a PeerConnection.
TrackHandlecreateAudioTrackCreate an audio send track on a PeerConnection.
std::shared_ptr< rtc::Track >createVideoReceiveTrackCreate a pure receive-side video track on a PeerConnection.
std::shared_ptr< rtc::Track >createAudioReceiveTrackCreate a pure receive-side audio track on a PeerConnection.
boolsetupReceiveTrackSet up the receive-side media handler chain on a remote track.
uint32_tgenerateSsrcGenerate a random SSRC.
const char *stateToStringConvert a PeerSession::State to a lowercase C string for logging.

createVideoTrack

TrackHandle createVideoTrack(std::shared_ptr< rtc::PeerConnection > pc, const av::VideoCodec & codec, uint32_t ssrc, const std::string & cname, const std::string & mid, rtc::Description::Direction direction, unsigned nackBuffer, std::function< void()> onPli, std::function< void(unsigned int)> onRemb, int payloadType)

Create a video send track on a PeerConnection.

Sets up the full outgoing media handler chain: Packetizer → SrReporter → NackResponder → PliHandler → RembHandler

The packetizer is selected based on the codec: H264 → H264RtpPacketizer (Annex-B long start sequence) H265 → H265RtpPacketizer (Annex-B long start sequence) VP8/VP9/other → generic RtpPacketizer

Parameters

  • pc PeerConnection to add the track to.

  • codec Video codec. Must name a supported RTP codec or FFmpeg encoder (e.g. "H264" or "libx264").

  • ssrc RTP SSRC. 0 = auto-generate.

  • cname RTCP CNAME. Empty = "icey".

  • mid MID to use for the track when answering an existing offer.

  • direction Direction to advertise for the negotiated m-line.

  • nackBuffer Max packets stored for NACK retransmission.

  • onPli Callback when remote peer requests a keyframe. Connect to your encoder to force IDR.

  • onRemb Callback when remote peer reports bandwidth estimate. Bitrate in bits/sec.

  • payloadType Explicit RTP payload type to reuse when answering an offer. -1 = use the codec's default/preferred type.

Returns

TrackHandle with the track and its RTP config.


createAudioTrack

TrackHandle createAudioTrack(std::shared_ptr< rtc::PeerConnection > pc, const av::AudioCodec & codec, uint32_t ssrc, const std::string & cname, const std::string & mid, rtc::Description::Direction direction, int payloadType)

Create an audio send track on a PeerConnection.

Sets up the outgoing media handler chain: AudioRtpPacketizer → SrReporter

The packetizer clock rate is selected based on codec: opus → 48kHz, PCMU/PCMA → 8kHz, etc.

Parameters

  • pc PeerConnection to add the track to.

  • codec Audio codec. Must name a supported RTP codec or FFmpeg encoder (e.g. "opus" or "libopus").

  • ssrc RTP SSRC. 0 = auto-generate.

  • cname RTCP CNAME. Empty = "icey".

  • mid MID to use for the track when answering an existing offer.

  • direction Direction to advertise for the negotiated m-line.

  • payloadType Explicit RTP payload type to reuse when answering an offer. -1 = use the codec's default/preferred type.

Returns

TrackHandle with the track and its RTP config.


createVideoReceiveTrack

std::shared_ptr< rtc::Track > createVideoReceiveTrack(std::shared_ptr< rtc::PeerConnection > pc, const av::VideoCodec & codec, const std::string & mid, rtc::Description::Direction direction, int payloadType)

Create a pure receive-side video track on a PeerConnection.

Unlike createVideoTrack(), this does not add a local SSRC or sender packetizer chain. It is for answers that only receive remote media.


createAudioReceiveTrack

std::shared_ptr< rtc::Track > createAudioReceiveTrack(std::shared_ptr< rtc::PeerConnection > pc, const av::AudioCodec & codec, const std::string & mid, rtc::Description::Direction direction, int payloadType)

Create a pure receive-side audio track on a PeerConnection.

Unlike createAudioTrack(), this does not add a local SSRC or sender packetizer chain. It is for answers that only receive remote media.


setupReceiveTrack

bool setupReceiveTrack(std::shared_ptr< rtc::Track > track)

Set up the receive-side media handler chain on a remote track.

Selects the correct depacketizer based on the track's SDP codec: Video: H264RtpDepacketizer, H265RtpDepacketizer, or generic Audio: OpusRtpDepacketizer, PCMURtpDepacketizer, etc.

Also chains an RtcpReceivingSession for receiver reports.

Call this from PeerConnection::onTrack() before binding a WebRtcTrackReceiver.

Parameters

  • track The remote track from onTrack callback.

Returns

True when a supported depacketizer was installed.


generateSsrc

uint32_t generateSsrc()

Generate a random SSRC.


stateToString

const char * stateToString(PeerSession::State state)

Convert a PeerSession::State to a lowercase C string for logging.

Parameters

  • state State value to convert.

Returns

One of: "idle", "outgoing-init", "incoming-init", "negotiating", "active", "ending", "ended".