WebRtcTrackReceiver
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
| Return | Name | Description |
|---|---|---|
PacketSignal | emitter |
emitter
PacketSignal emitterPublic Methods
| Return | Name | Description |
|---|---|---|
WebRtcTrackReceiver | Construct an unbound receiver. Call bind() to attach a remote track. | |
void | bind | 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. |
void | configureJitterBuffer | Replace the receive-side jitter-buffer settings. |
JitterBufferConfig | jitterBufferConfig const | Current jitter-buffer settings for this receiver. |
bool | jitterBufferEnabled const | True 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
trackRemote 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() constCurrent jitter-buffer settings for this receiver.
jitterBufferEnabled
const
bool jitterBufferEnabled() constTrue when depacketized receive frames are buffered before emission.
Private Attributes
| Return | Name | Description |
|---|---|---|
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 = 0Private Methods
| Return | Name | Description |
|---|---|---|
void | enqueue | |
void | flushPending |
enqueue
void enqueue(std::unique_ptr< IPacket > packet)flushPending
void flushPending()