1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-25 05:23:13 +03:00

Merge pull request #1929 from matrix-org/robertlong/datachannels

Add WebRTC DataChannels to MatrixCall
This commit is contained in:
Robert Long
2021-09-15 14:25:13 -07:00
committed by GitHub

View File

@@ -128,7 +128,9 @@ export enum CallEvent {
AssertedIdentityChanged = 'asserted_identity_changed',
LengthChanged = 'length_changed'
LengthChanged = 'length_changed',
DataChannel = 'datachannel',
}
export enum CallErrorCode {
@@ -342,6 +344,18 @@ export class MatrixCall extends EventEmitter {
await this.placeCall(true, true);
}
/**
* Create a datachannel using this call's peer connection.
* @param label A human readable label for this datachannel
* @param options An object providing configuration options for the data channel.
*/
public createDataChannel(label: string, options: RTCDataChannelInit) {
const dataChannel = this.peerConn.createDataChannel(label, options);
this.emit(CallEvent.DataChannel, dataChannel);
logger.debug("created data channel");
return dataChannel;
}
public getOpponentMember(): RoomMember {
return this.opponentMember;
}
@@ -1495,6 +1509,10 @@ export class MatrixCall extends EventEmitter {
stream.addEventListener("removetrack", () => this.deleteFeedByStream(stream));
};
private onDataChannel = (ev: RTCDataChannelEvent): void => {
this.emit(CallEvent.DataChannel, ev.channel);
};
/**
* This method removes all video/rtx codecs from screensharing video
* transceivers. This is necessary since they can cause problems. Without
@@ -1866,6 +1884,7 @@ export class MatrixCall extends EventEmitter {
pc.addEventListener('icegatheringstatechange', this.onIceGatheringStateChange);
pc.addEventListener('track', this.onTrack);
pc.addEventListener('negotiationneeded', this.onNegotiationNeeded);
pc.addEventListener('datachannel', this.onDataChannel);
return pc;
}