MediaBridge
MediaBridge
#include <icy/webrtc/mediabridge.h>class MediaBridgeDefined in src/webrtc/include/icy/webrtc/mediabridge.h:69
Convenience wrapper that creates WebRTC tracks on a PeerConnection and exposes per-track sender/receiver adapters for PacketStream integration.
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.
List of all members
| Name | Kind | Owner |
|---|---|---|
KeyframeRequested | variable | Declared here |
BitrateEstimate | variable | Declared here |
MediaBridge | function | Declared here |
~MediaBridge | function | Declared here |
MediaBridge | function | Declared here |
operator= | function | Declared here |
attach | function | Declared here |
detach | function | Declared here |
requestKeyframe | function | Declared here |
requestBitrate | function | Declared here |
videoSender | function | Declared here |
audioSender | function | Declared here |
videoReceiver | function | Declared here |
audioReceiver | function | Declared here |
videoTrack | function | Declared here |
audioTrack | function | Declared here |
hasVideo | function | Declared here |
hasAudio | function | Declared here |
attached | function | Declared here |
_pc | variable | Declared here |
_videoSender | variable | Declared here |
_audioSender | variable | Declared here |
_videoHandle | variable | Declared here |
_audioHandle | variable | Declared here |
_videoReceiver | variable | Declared here |
_audioReceiver | variable | Declared here |
_videoReceiveTrack | variable | Declared here |
_audioReceiveTrack | variable | Declared here |
_mutex | variable | Declared here |
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()> KeyframeRequestedDefined 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)> BitrateEstimateDefined 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. | |
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.
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
bitrateTarget 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 _videoSenderDefined in src/webrtc/include/icy/webrtc/mediabridge.h:178
_audioSender
WebRtcTrackSender _audioSenderDefined in src/webrtc/include/icy/webrtc/mediabridge.h:179
_videoHandle
TrackHandle _videoHandleDefined in src/webrtc/include/icy/webrtc/mediabridge.h:180
_audioHandle
TrackHandle _audioHandleDefined in src/webrtc/include/icy/webrtc/mediabridge.h:181
_videoReceiver
WebRtcTrackReceiver _videoReceiverDefined in src/webrtc/include/icy/webrtc/mediabridge.h:184
_audioReceiver
WebRtcTrackReceiver _audioReceiverDefined 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