MediaBridge
#include <icy/webrtc/mediabridge.h>
class MediaBridgeDefined in src/webrtc/include/icy/webrtc/mediabridge.h:69
For video-only, leave audioCodec default (disabled). For audio-only, leave videoCodec default (disabled). For data-channel-only, don't create a MediaBridge at all.
For full control over individual tracks, use createVideoTrack(), createAudioTrack(), WebRtcTrackSender, and WebRtcTrackReceiver directly instead of this class.
The sender and receiver adapter objects are stable for the lifetime of the MediaBridge. attach() and detach() rebind or unbind the underlying WebRTC tracks without invalidating references previously obtained from videoSender(), audioSender(), videoReceiver(), or audioReceiver().
Example - send camera to browser:
MediaBridge bridge; bridge.attach(pc, {.videoCodec = {"H264", "libx264", 1280, 720, 30}});
PacketStream stream; stream.attachSource(capture); stream.attach(encoder, 1, true); stream.attach(&bridge.videoSender(), 5, false); stream.start();
Example - receive from browser and record:
bridge.videoReceiver().emitter += packetSlot(&recorder, &Recorder::onEncodedVideo);
The receiver emits owning encoded packets. Feed those into a decoder or recorder callback; see samples/media-recorder for a complete example.
Public Attributes
| Return | Name | Description |
|---|---|---|
ThreadSignal< void()> | KeyframeRequested | Remote peer requests a keyframe. Connect to encoder to force IDR. |
ThreadSignal< void(unsigned int)> | BitrateEstimate | Remote peer reports estimated bandwidth (bits/sec). |
KeyframeRequested
ThreadSignal< void()> KeyframeRequestedType: ThreadSignal< void()>
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:149
Remote peer requests a keyframe. Connect to encoder to force IDR.
BitrateEstimate
ThreadSignal< void(unsigned int)> BitrateEstimateType: ThreadSignal< void(unsigned int)>
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:152
Remote peer reports estimated bandwidth (bits/sec).
Public Methods
| Return | Name | Description |
|---|---|---|
MediaBridge | Construct a detached bridge with stable sender and receiver adapters. | |
~MediaBridge | Destroy the bridge and release any attached PeerConnection state. | |
MediaBridge | Deleted copy constructor; MediaBridge owns live track and adapter state. | |
MediaBridge & | operator= | Deleted assignment operator. |
void | attach | Create tracks on the PeerConnection and set up handler chains. Only creates tracks for codecs with a non-empty encoder name. |
void | detach | Detach all tracks and adapters. |
void | requestKeyframe | Request an immediate keyframe (IDR) from the remote sender. Sends a PLI (Picture Loss Indication) RTCP message on the video track. No-op if no video track is attached. |
void | requestBitrate | Request that the remote sender reduce to a target bitrate. Sends a TMMBR RTCP message on the video track. |
WebRtcTrackSender & | videoSender | Video send processor. Attach to a PacketStream after a VideoEncoder. Throws if no video track was created. |
WebRtcTrackSender & | audioSender | Audio send processor. Attach to a PacketStream after an AudioEncoder. Throws if no audio track was created. |
WebRtcTrackReceiver & | videoReceiver | Video receive adapter. Attach as a PacketStream source. Only valid after a remote video track arrives. |
WebRtcTrackReceiver & | audioReceiver | Audio receive adapter. Attach as a PacketStream source. Only valid after a remote audio track arrives. |
std::shared_ptr< rtc::Track > | videoTrack const | The underlying libdatachannel video track, or nullptr if none was created. |
std::shared_ptr< rtc::Track > | audioTrack const | The underlying libdatachannel audio track, or nullptr if none was created. |
bool | hasVideo const | True if a video track was created at attach(). |
bool | hasAudio const | True if an audio track was created at attach(). |
bool | attached const | True if attach() has been called and a PeerConnection is held. |
MediaBridge
MediaBridge()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:98
Construct a detached bridge with stable sender and receiver adapters.
~MediaBridge
~MediaBridge()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:100
Destroy the bridge and release any attached PeerConnection state.
MediaBridge
MediaBridge(const MediaBridge &) = deleteDefined in src/webrtc/include/icy/webrtc/mediabridge.h:103
Deleted copy constructor; MediaBridge owns live track and adapter state.
operator=
MediaBridge & operator=(const MediaBridge &) = deleteDefined in src/webrtc/include/icy/webrtc/mediabridge.h:104
Deleted assignment operator.
attach
void attach(std::shared_ptr< rtc::PeerConnection > pc, const Options & opts)Defined in src/webrtc/include/icy/webrtc/mediabridge.h:108
Create tracks on the PeerConnection and set up handler chains. Only creates tracks for codecs with a non-empty encoder name.
detach
void detach()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:112
Detach all tracks and adapters.
requestKeyframe
void requestKeyframe()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:117
Request an immediate keyframe (IDR) from the remote sender. Sends a PLI (Picture Loss Indication) RTCP message on the video track. No-op if no video track is attached.
requestBitrate
void requestBitrate(unsigned int bitrate)Defined in src/webrtc/include/icy/webrtc/mediabridge.h:122
Request that the remote sender reduce to a target bitrate. Sends a TMMBR RTCP message on the video track.
Parameters
| Parameter | Type | Description |
|---|---|---|
bitrate | unsigned int | Target bitrate in bits per second. |
videoSender
WebRtcTrackSender & videoSender()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:130
Video send processor. Attach to a PacketStream after a VideoEncoder. Throws if no video track was created.
audioSender
WebRtcTrackSender & audioSender()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:134
Audio send processor. Attach to a PacketStream after an AudioEncoder. Throws if no audio track was created.
videoReceiver
WebRtcTrackReceiver & videoReceiver()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:138
Video receive adapter. Attach as a PacketStream source. Only valid after a remote video track arrives.
audioReceiver
WebRtcTrackReceiver & audioReceiver()Defined in src/webrtc/include/icy/webrtc/mediabridge.h:142
Audio receive adapter. Attach as a PacketStream source. Only valid after a remote audio track arrives.
videoTrack
const
std::shared_ptr< rtc::Track > videoTrack() constDefined in src/webrtc/include/icy/webrtc/mediabridge.h:159
The underlying libdatachannel video track, or nullptr if none was created.
audioTrack
const
std::shared_ptr< rtc::Track > audioTrack() constDefined in src/webrtc/include/icy/webrtc/mediabridge.h:162
The underlying libdatachannel audio track, or nullptr if none was created.
hasVideo
const
bool hasVideo() constDefined in src/webrtc/include/icy/webrtc/mediabridge.h:165
True if a video track was created at attach().
hasAudio
const
bool hasAudio() constDefined in src/webrtc/include/icy/webrtc/mediabridge.h:168
True if an audio track was created at attach().
attached
const
bool attached() constDefined in src/webrtc/include/icy/webrtc/mediabridge.h:171
True if attach() has been called and a PeerConnection is held.
Private Attributes
| Return | Name | Description |
|---|---|---|
std::shared_ptr< rtc::PeerConnection > | _pc | |
WebRtcTrackSender | _videoSender | |
WebRtcTrackSender | _audioSender | |
TrackHandle | _videoHandle | |
TrackHandle | _audioHandle | |
WebRtcTrackReceiver | _videoReceiver | |
WebRtcTrackReceiver | _audioReceiver | |
std::shared_ptr< rtc::Track > | _videoReceiveTrack | |
std::shared_ptr< rtc::Track > | _audioReceiveTrack | |
std::mutex | _mutex |
_pc
std::shared_ptr< rtc::PeerConnection > _pcDefined in src/webrtc/include/icy/webrtc/mediabridge.h:174
_videoSender
WebRtcTrackSender _videoSenderType: WebRtcTrackSender
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:178
_audioSender
WebRtcTrackSender _audioSenderType: WebRtcTrackSender
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:179
_videoHandle
TrackHandle _videoHandleType: TrackHandle
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:180
_audioHandle
TrackHandle _audioHandleType: TrackHandle
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:181
_videoReceiver
WebRtcTrackReceiver _videoReceiverType: WebRtcTrackReceiver
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:184
_audioReceiver
WebRtcTrackReceiver _audioReceiverType: WebRtcTrackReceiver
Defined in src/webrtc/include/icy/webrtc/mediabridge.h:185
_videoReceiveTrack
std::shared_ptr< rtc::Track > _videoReceiveTrackDefined in src/webrtc/include/icy/webrtc/mediabridge.h:186
_audioReceiveTrack
std::shared_ptr< rtc::Track > _audioReceiveTrackDefined in src/webrtc/include/icy/webrtc/mediabridge.h:187
_mutex
std::mutex _mutex