openvidu-browser: add OpenViduAdvancedConfiguration.rtcConfiguration

pull/744/merge
pabloFuente 2024-06-05 17:14:07 +02:00
parent 86c4abacb1
commit dfd614a634
3 changed files with 21 additions and 2 deletions

View File

@ -1240,6 +1240,7 @@ export class Stream {
onIceCandidate: this.connection.sendIceCandidate.bind(this.connection), onIceCandidate: this.connection.sendIceCandidate.bind(this.connection),
onIceConnectionStateException: this.onIceConnectionStateExceptionHandler.bind(this), onIceConnectionStateException: this.onIceConnectionStateExceptionHandler.bind(this),
iceServers: this.getIceServersConf(), iceServers: this.getIceServersConf(),
rtcConfiguration: this.session.openvidu.advancedConfiguration.rtcConfiguration,
mediaStream: this.mediaStream, mediaStream: this.mediaStream,
mediaServer: this.session.openvidu.mediaServer, mediaServer: this.session.openvidu.mediaServer,
typeOfVideo: this.typeOfVideo ? TypeOfVideo[this.typeOfVideo] : undefined typeOfVideo: this.typeOfVideo ? TypeOfVideo[this.typeOfVideo] : undefined
@ -1412,6 +1413,7 @@ export class Stream {
onIceCandidate: this.connection.sendIceCandidate.bind(this.connection), onIceCandidate: this.connection.sendIceCandidate.bind(this.connection),
onIceConnectionStateException: this.onIceConnectionStateExceptionHandler.bind(this), onIceConnectionStateException: this.onIceConnectionStateExceptionHandler.bind(this),
iceServers: this.getIceServersConf(), iceServers: this.getIceServersConf(),
rtcConfiguration: this.session.openvidu.advancedConfiguration.rtcConfiguration,
mediaServer: this.session.openvidu.mediaServer, mediaServer: this.session.openvidu.mediaServer,
typeOfVideo: this.typeOfVideo ? TypeOfVideo[this.typeOfVideo] : undefined typeOfVideo: this.typeOfVideo ? TypeOfVideo[this.typeOfVideo] : undefined
}; };
@ -1728,6 +1730,8 @@ export class Stream {
this.session.openvidu.advancedConfiguration.iceServers === 'freeice' this.session.openvidu.advancedConfiguration.iceServers === 'freeice'
? undefined ? undefined
: this.session.openvidu.advancedConfiguration.iceServers; : this.session.openvidu.advancedConfiguration.iceServers;
} else if (!!this.session.openvidu.advancedConfiguration.rtcConfiguration?.iceServers) {
returnValue = this.session.openvidu.advancedConfiguration.rtcConfiguration.iceServers;
} else if (this.session.openvidu.iceServers) { } else if (this.session.openvidu.iceServers) {
returnValue = this.session.openvidu.iceServers; returnValue = this.session.openvidu.iceServers;
} else { } else {

View File

@ -20,11 +20,18 @@
*/ */
export interface OpenViduAdvancedConfiguration { export interface OpenViduAdvancedConfiguration {
/** /**
* Array of [RTCIceServer](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer) to be used by OpenVidu Browser. By default OpenVidu will generate the required credentials to use the COTURN server hosted along OpenVidu Server * Array of [RTCIceServer](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer) to be used by OpenVidu Browser. By default OpenVidu will generate the required credentials to use the COTURN server hosted along OpenVidu Server.
* You can also set this property to string 'freeice' to force the use of free STUN servers instead (got thanks to [freeice](https://github.com/DamonOehlman/freeice) library). * You can also set this property to string 'freeice' to force the use of free STUN servers instead (got thanks to [freeice](https://github.com/DamonOehlman/freeice) library).
*
* > **WARNING**: this value has priority over the standard `iceServers` property of [[rtcConfiguration]]. It will override any value in `OpenViduAdvancedConfiguration.rtcConfiguration.iceServers`
*/ */
iceServers?: RTCIceServer[] | string; iceServers?: RTCIceServer[] | string;
/**
* Custom configuration for all [RTCPeerConnection](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection#parameters) objects. This object will be passed as is to all RTCPeerConnection constructor (all Publishers and Subscribers).
*/
rtcConfiguration?: RTCConfiguration;
/** /**
* URL to a custom screen share extension for Chrome (always based on ours: [openvidu-screen-sharing-chrome-extension](https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension)) to be used instead of the default one. * URL to a custom screen share extension for Chrome (always based on ours: [openvidu-screen-sharing-chrome-extension](https://github.com/OpenVidu/openvidu-screen-sharing-chrome-extension)) to be used instead of the default one.
* Must be something like this: `https://chrome.google.com/webstore/detail/YOUR_WEBSTORE_EXTENSION_NAME/YOUR_EXTENSION_ID` * Must be something like this: `https://chrome.google.com/webstore/detail/YOUR_WEBSTORE_EXTENSION_NAME/YOUR_EXTENSION_ID`

View File

@ -41,6 +41,7 @@ export interface WebRtcPeerConfiguration {
onIceCandidate: (event: RTCIceCandidate) => void; onIceCandidate: (event: RTCIceCandidate) => void;
onIceConnectionStateException: (exceptionName: ExceptionEventName, message: string, data?: any) => void; onIceConnectionStateException: (exceptionName: ExceptionEventName, message: string, data?: any) => void;
iceServers?: RTCIceServer[]; iceServers?: RTCIceServer[];
rtcConfiguration?: RTCConfiguration;
mediaStream?: MediaStream | null; mediaStream?: MediaStream | null;
mode?: 'sendonly' | 'recvonly' | 'sendrecv'; mode?: 'sendonly' | 'recvonly' | 'sendrecv';
id?: string; id?: string;
@ -63,6 +64,7 @@ export class WebRtcPeer {
this.configuration = { this.configuration = {
...configuration, ...configuration,
iceServers: !!configuration.iceServers && configuration.iceServers.length > 0 ? configuration.iceServers : freeice(), iceServers: !!configuration.iceServers && configuration.iceServers.length > 0 ? configuration.iceServers : freeice(),
rtcConfiguration: configuration.rtcConfiguration !== undefined ? configuration.rtcConfiguration : {},
mediaStream: configuration.mediaStream !== undefined ? configuration.mediaStream : null, mediaStream: configuration.mediaStream !== undefined ? configuration.mediaStream : null,
mode: !!configuration.mode ? configuration.mode : 'sendrecv', mode: !!configuration.mode ? configuration.mode : 'sendrecv',
id: !!configuration.id ? configuration.id : this.generateUniqueId() id: !!configuration.id ? configuration.id : this.generateUniqueId()
@ -70,7 +72,13 @@ export class WebRtcPeer {
// prettier-ignore // prettier-ignore
logger.debug(`[WebRtcPeer] configuration:\n${JSON.stringify(this.configuration, null, 2)}`); logger.debug(`[WebRtcPeer] configuration:\n${JSON.stringify(this.configuration, null, 2)}`);
this.pc = new RTCPeerConnection({ iceServers: this.configuration.iceServers }); let rtcConfiguration: RTCConfiguration = this.configuration.rtcConfiguration
? this.configuration.rtcConfiguration
: { iceServers: this.configuration.iceServers };
if (!rtcConfiguration.iceServers && this.configuration.iceServers) {
rtcConfiguration.iceServers = this.configuration.iceServers;
}
this.pc = new RTCPeerConnection(rtcConfiguration);
this.pc.addEventListener('icecandidate', (event: RTCPeerConnectionIceEvent) => { this.pc.addEventListener('icecandidate', (event: RTCPeerConnectionIceEvent) => {
if (event.candidate !== null) { if (event.candidate !== null) {