WebRTC module

WebRtcTrackReceiver

[PacketStreamAdapter]({#ref classicy_1_1PacketStreamAdapter #}) that receives depacketized frames from a single remote libdatachannel Track and emits them as VideoPacket or AudioPacket into a [PacketStream]({#ref classicy_1_1PacketStream #}).

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.

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.

Private Attributes

ReturnNameDescription
Synchronizer_dispatch
std::mutex_mutex
std::deque< std::unique_ptr< IPacket > >_pending
std::shared_ptr< DispatchState >_state
uint64_t_generation

_dispatch

Synchronizer _dispatch

_mutex

std::mutex _mutex

_pending

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

_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()