Packages
membrane_rtc_engine
0.5.1
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Membrane RTC Engine and its client library
Current section
Files
Jump to
Current section
Files
priv/static/membraneWebRTCNode.d.ts
import { SerializedMediaEvent } from "./mediaEvent";
/**
* Interface describing Peer.
*/
export interface Peer {
/**
* Peer's id. It is assigned by user in custom logic that use backend API.
*/
id: string;
/**
* Any information that was provided in {@link join}.
*/
metadata: any;
}
/**
* Config passed to {@link MembraneWebRTC}.
*/
export interface MembraneWebRTCNodeConfig {
callbacks: NodeCallbacks;
rtcConfig?: RTCConfiguration;
}
/**
* Track's context i.e. all data that can be usful when operating on track.
*/
export interface TrackContext {
track: MediaStreamTrack | null;
/**
* Stream this track belongs to.
*/
stream: MediaStream | null;
/**
* Track id. It is generated by RTC engine and takes form `peer_id:<random_uuidv4>`.
* It is WebRTC agnostic i.e. it does not contain `mid` or `stream id`.
*/
trackId: string;
/**
* Flag indicating whether track is a simulcast one or not.
*/
isSimulcast: boolean;
/**
* Any info that was passed in {@link addTrack}.
*/
metadata: any;
}
/**
* Callbacks that has to be implemented by user.
*/
export interface NodeCallbacks {
/**
* Called each time MembraneWebRTC need to send some data to the server.
*/
onSendMediaEvent: (mediaEvent: SerializedMediaEvent) => void;
/**
* Called when peer was accepted. Triggered by {@link join}
*/
onJoinSuccess?: (peerId: string, peersInRoom: [Peer]) => void;
/**
* Called when peer was not accepted. Triggered by {@link join}
* @param metadata - Passthru for client application to communicate further actions to frontend
*/
onJoinError?: (metadata: any) => void;
/**
* Called when data in a new track arrives.
*
* This callback is always called after {@link onTrackAdded}.
* It informs user that data related to the given track arrives and can be played or displayed.
*/
onTrackReady?: (ctx: TrackContext) => void;
/**
* Called each time the peer which was already in the room, adds new track. Fields track and stream will be set to null.
* These fields will be set to non-null value in {@link onTrackReady}
*/
onTrackAdded?: (ctx: TrackContext) => void;
/**
* Called when some track will no longer be sent.
*
* It will also be called before {@link onPeerLeft} for each track of this peer.
*/
onTrackRemoved?: (ctx: TrackContext) => void;
/**
* Called each time peer has its track metadata updated.
*/
onTrackUpdated?: (ctx: TrackContext) => void;
/**
* Called each time new peer joins the room.
*/
onPeerJoined?: (peer: Peer) => void;
/**
* Called each time peer leaves the room.
*/
onPeerLeft?: (peer: Peer) => void;
/**
* Called each time peer has its metadata updated.
*/
onPeerUpdated?: (peer: Peer) => void;
/**
* Called in case of errors related to multimedia session e.g. ICE connection.
*/
onConnectionError?: (message: string) => void;
/**
* Called when priority of video tracks have changed.
* @param enabledTracks - list of tracks which will be sent to client from SFU
* @param disabledTracks - list of tracks which will not be sent to client from SFU
*/
onTracksPriorityChanged?: (enabledTracks: TrackContext[], disabledTracks: TrackContext[]) => void;
}
/**
* Main class that is responsible for connecting to the RTC Engine, sending and receiving media.
*/
export declare class MembraneWebRTCNode {
private localTracksWithStreams;
private trackIdToTrack;
private connection?;
private trackIdToMetadata;
private idToPeer;
private localPeer;
private localTrackIdToTrack;
private midToTrackId;
private rtcConfig;
private readonly callbacks;
constructor(config: MembraneWebRTCNodeConfig);
/**
* Tries to join to the RTC Engine. If user is accepted then {@link onJoinSuccess}
* will be called. In other case {@link onJoinError} is invoked.
*
* @param peerMetadata - Any information that other peers will receive in {@link onPeerJoined}
* after accepting this peer
*
* @example
* ```ts
* let webrtc = new MembraneWebRTC(...)
* webrtc.join({displayName: "Bob"})
* ```
*/
join: (peerMetadata: any) => void;
/**
* Feeds media event received from RTC Engine to {@link MembraneWebRTC}.
* This function should be called whenever some media event from RTC Engine
* was received and can result in {@link MembraneWebRTC} generating some other
* media events.
*
* @param mediaEvent - String data received over custom signalling layer.
*
* @example
* This example assumes pheonix channels as signalling layer.
* As phoenix channels require objects, RTC Engine encapsulates binary data into
* map with one field that is converted to object with one field on the TS side.
* ```ts
* webrtcChannel.on("mediaEvent", (event) => webrtc.receiveMediaEvent(event.data));
* ```
*/
receiveMediaEvent: (mediaEvent: SerializedMediaEvent) => void;
private handleMediaEvent;
/**
* Adds track that will be sent to the RTC Engine.
* @param track - Audio or video track e.g. from your microphone or camera.
* @param stream - Stream that this track belongs to.
* @param trackMetadata - Any information about this track that other peers will
* receive in {@link onPeerJoined}. E.g. this can source of the track - wheather it's
* screensharing, webcam or some other media device.
* @returns {string} Returns id of added track
* @example
* ```ts
* let localStream: MediaStream = new MediaStream();
* try {
* localAudioStream = await navigator.mediaDevices.getUserMedia(
* AUDIO_CONSTRAINTS
* );
* localAudioStream
* .getTracks()
* .forEach((track) => localStream.addTrack(track));
* } catch (error) {
* console.error("Couldn't get microphone permission:", error);
* }
*
* try {
* localVideoStream = await navigator.mediaDevices.getUserMedia(
* VIDEO_CONSTRAINTS
* );
* localVideoStream
* .getTracks()
* .forEach((track) => localStream.addTrack(track));
* } catch (error) {
* console.error("Couldn't get camera permission:", error);
* }
*
* localStream
* .getTracks()
* .forEach((track) => webrtc.addTrack(track, localStream));
* ```
*/
addTrack(track: MediaStreamTrack, stream: MediaStream, trackMetadata?: any, isSimulcast?: boolean): string;
private addTrackToConnection;
/**
* Replaces a track that is being sent to the RTC Engine.
* @param track - Audio or video track.
* @param {string} trackId - Id of audio or video track to replace.
* @param {MediaStreamTrack} newTrack
* @param {any} [newMetadata] - Optional track metadata to apply to the new track. If no
* track metadata is passed, the old track metadata is retained.
* @returns {Promise<boolean>} success
* @example
* ```ts
* // setup camera
* let localStream: MediaStream = new MediaStream();
* try {
* localVideoStream = await navigator.mediaDevices.getUserMedia(
* VIDEO_CONSTRAINTS
* );
* localVideoStream
* .getTracks()
* .forEach((track) => localStream.addTrack(track));
* } catch (error) {
* console.error("Couldn't get camera permission:", error);
* }
* let oldTrackId;
* localStream
* .getTracks()
* .forEach((track) => trackId = webrtc.addTrack(track, localStream));
*
* // change camera
* const oldTrack = localStream.getVideoTracks()[0];
* let videoDeviceId = "abcd-1234";
* navigator.mediaDevices.getUserMedia({
* video: {
* ...(VIDEO_CONSTRAINTS as {}),
* deviceId: {
* exact: videoDeviceId,
* },
* }
* })
* .then((stream) => {
* let videoTrack = stream.getVideoTracks()[0];
* webrtc.replaceTrack(oldTrackId, videoTrack);
* })
* .catch((error) => {
* console.error('Error switching camera', error);
* })
* ```
*/
replaceTrack(trackId: string, newTrack: MediaStreamTrack, newTrackMetadata?: any): Promise<boolean>;
/**
* Remove a track from connection that was being sent to the RTC Engine.
* @param {string} trackId - Id of audio or video track to remove.
* @example
* ```ts
* // setup camera
* let localStream: MediaStream = new MediaStream();
* try {
* localVideoStream = await navigator.mediaDevices.getUserMedia(
* VIDEO_CONSTRAINTS
* );
* localVideoStream
* .getTracks()
* .forEach((track) => localStream.addTrack(track));
* } catch (error) {
* console.error("Couldn't get camera permission:", error);
* }
*
* let trackId
* localStream
* .getTracks()
* .forEach((track) => trackId = webrtc.addTrack(track, localStream));
*
* // remove track
* webrtc.removeTrack(trackId)
* ```
*/
removeTrack(trackId: string): void;
/**
* Prioritizes a track in connection to be always sent to browser.
* @param {string} trackId - Id of video track to prioritize.
*/
prioritizeTrack(trackId: string): void;
/**
* Unprioritizes a track.
* @param {string} trackId - Id of video track to unprioritize.
*/
unprioritizeTrack(trackId: string): void;
/**
* This function allows to adjust resolution and number of video tracks sent by an SFU to a client.
*
* @param {number} bigScreens - number of screens with big size
* (if simulcast is used this will limit number of tracks sent with highest quality).
* @param {number} smallScreens - number of screens with small size
* (if simulcast is used this will limit number of tracks sent with lowest quality).
* @param {number} mediumScreens - number of screens with medium size
* (if simulcast is used this will limit number of tracks sent with medium quality).
* @param {boolean} allSameSize - flag that indicates whether all screens should use the same quality
*/
setPreferedVideoSizes(bigScreens: number, smallScreens: number, mediumScreens?: number, allSameSize?: boolean): void;
private findSender;
/**
* Updates the metadata for the current peer.
* @param peerMetadata - Data about this peer that other peers will receive upon joining.
*
* If the metadata is different from what is already tracked in the room, the optional
* callback `onPeerUpdated` will be triggered for other peers in the room.
*/
updatePeerMetadata: (peerMetadata: any) => void;
/**
* Updates the metadata for a specific track.
* @param trackId - trackId (generated in addTrack) of audio or video track.
* @param trackMetadata - Data about this track that other peers will receive upon joining.
*
* If the metadata is different from what is already tracked in the room, the optional
* callback `onTrackUpdated` will be triggered for other peers in the room.
*/
updateTrackMetadata: (trackId: string, trackMetadata: any) => void;
private getMidToTrackId;
/**
* Leaves the room. This function should be called when user leaves the room
* in a clean way e.g. by clicking a dedicated, custom button `disconnect`.
* As a result there will be generated one more media event that should be
* sent to the RTC Engine. Thanks to it each other peer will be notified
* that peer left in {@link onPeerLeft},
*/
leave: () => void;
/**
* Cleans up {@link MembraneWebRTC} instance.
*/
cleanUp: () => void;
private getTrackId;
private sendMediaEvent;
private onAnswer;
private addTransceiversIfNeeded;
private createAndSendOffer;
private getTrackIdToMetadata;
private onOfferData;
private onRemoteCandidate;
private onLocalCandidate;
private onTrack;
private setTurns;
private addPeer;
private getPeerId;
private getPeerIdFromTrackId;
private getLocalTrackIdToMatadata;
}
//# sourceMappingURL=membraneWebRTCNode.d.ts.map