Home
WebRTC module

WebRtcTrackReceiver

PacketStreamAdapter that receives depacketized frames from a single remote libdatachannel Track and emits them as VideoPacket or AudioPacket into a PacketStream.

WebRtcTrackReceiver

#include <icy/webrtc/trackreceiver.h>

Inherits: PacketStreamAdapter

PacketStreamAdapter that receives depacketized frames from a single remote libdatachannel Track and emits them as VideoPacket or AudioPacket into a PacketStream.

Call setupReceiveTrack() on the track first to install the correct depacketizer, then bind this receiver to it.

Usage: pc->onTrack([&](shared_ptrrtc::Track track) { if (setupReceiveTrack(track)) videoReceiver.bind(track); });

videoReceiver.emitter += packetSlot(&recorder, &Recorder::onEncodedVideo);

Emits owning packets - the frame data is copied, so downstream processors can safely queue packets asynchronously.

Emits VideoPacket for video tracks, AudioPacket for audio tracks. Use those packets to drive a decoder, recorder, or custom pipeline. See samples/media-recorder for a complete receive -> decode -> file example.

Public Attributes

ReturnNameDescription
PacketSignalemitter

emitter

PacketSignal emitter

Public Methods

ReturnNameDescription
WebRtcTrackReceiverConstruct an unbound receiver. Call bind() to attach a remote track.
voidbindBind to a remote track. Must be called after setupReceiveTrack() returned true. Installs an onFrame callback that converts each depacketized frame to a VideoPacket or AudioPacket and emits it on the PacketStream. The track type (video/audio) is detected from the SDP description.
voidconfigureJitterBufferReplace the receive-side jitter-buffer settings.
JitterBufferConfigjitterBufferConfig constCurrent jitter-buffer settings for this receiver.
booljitterBufferEnabled constTrue when depacketized receive frames are buffered before emission.

WebRtcTrackReceiver

WebRtcTrackReceiver()

Construct an unbound receiver. Call bind() to attach a remote track.


bind

void bind(std::shared_ptr< rtc::Track > track)

Bind to a remote track. Must be called after setupReceiveTrack() returned true. Installs an onFrame callback that converts each depacketized frame to a VideoPacket or AudioPacket and emits it on the PacketStream. The track type (video/audio) is detected from the SDP description.

Parameters

  • track Remote track from the PeerConnection::onTrack callback.

configureJitterBuffer

void configureJitterBuffer(const JitterBufferConfig & config)

Replace the receive-side jitter-buffer settings.

Reconfiguring resets any buffered media still waiting for release.


jitterBufferConfig

const

JitterBufferConfig jitterBufferConfig() const

Current jitter-buffer settings for this receiver.


jitterBufferEnabled

const

bool jitterBufferEnabled() const

True when depacketized receive frames are buffered before emission.

Private Attributes

ReturnNameDescription
Synchronizer_dispatch
Timer_timer
std::mutex_mutex
std::deque< std::unique_ptr< IPacket > >_pending
std::unique_ptr< detail::ReceiverJitterBuffer >_jitterBuffer
JitterBufferConfig_jitterConfig
std::int64_t_timerTickMs
bool_timerNeedsUpdate
std::shared_ptr< DispatchState >_state
uint64_t_generation

_dispatch

Synchronizer _dispatch

_timer

Timer _timer

_mutex

std::mutex _mutex

_pending

std::deque< std::unique_ptr< IPacket > > _pending

_jitterBuffer

std::unique_ptr< detail::ReceiverJitterBuffer > _jitterBuffer

_jitterConfig

JitterBufferConfig _jitterConfig

_timerTickMs

std::int64_t _timerTickMs = 5

_timerNeedsUpdate

bool _timerNeedsUpdate = false

_state

std::shared_ptr< DispatchState > _state = std::make_shared<DispatchState>()

_generation

uint64_t _generation = 0

Private Methods

ReturnNameDescription
voidenqueue
voidflushPending

enqueue

void enqueue(std::unique_ptr< IPacket > packet)

flushPending

void flushPending()