openvidu-testapp: add checkbox to force relay from browser

master
pabloFuente 2025-06-30 12:11:09 +02:00
parent 99c787c4f5
commit ee8847c5cb
4 changed files with 21 additions and 5 deletions

View File

@ -3,12 +3,13 @@
<mat-dialog-content> <mat-dialog-content>
<mat-divider *ngIf="roomOptions"></mat-divider> <mat-divider *ngIf="roomOptions"></mat-divider>
<div *ngIf="roomOptions"> <div *ngIf="roomOptions">
<label><a href="https://docs.livekit.io/client-sdk-js/interfaces/RoomOptions.html" target="_blank">RoomOptions</a></label><br> <label><a href="https://docs.livekit.io/client-sdk-js/interfaces/RoomOptions.html" target="_blank">RoomOptions</a></label> / <label><a href="https://docs.livekit.io/client-sdk-js/interfaces/RoomConnectOptions.html" target="_blank">RoomConnectOptions</a></label><br>
<mat-checkbox id="room-adaptiveStream" [(ngModel)]="roomOptions.adaptiveStream">adaptiveStream</mat-checkbox> <mat-checkbox id="room-adaptiveStream" [(ngModel)]="roomOptions.adaptiveStream">adaptiveStream</mat-checkbox>
<mat-checkbox id="room-dynacast" [(ngModel)]="roomOptions.dynacast">dynacast</mat-checkbox> <mat-checkbox id="room-dynacast" [(ngModel)]="roomOptions.dynacast">dynacast</mat-checkbox>
<mat-checkbox id="room-disconnectOnPageLeave" [(ngModel)]="roomOptions.disconnectOnPageLeave">disconnectOnPageLeave</mat-checkbox> <mat-checkbox id="room-disconnectOnPageLeave" [(ngModel)]="roomOptions.disconnectOnPageLeave">disconnectOnPageLeave</mat-checkbox>
<mat-checkbox id="room-stopLocalTrackOnUnpublish" [(ngModel)]="roomOptions.stopLocalTrackOnUnpublish">stopLocalTrackOnUnpublish</mat-checkbox> <mat-checkbox id="room-stopLocalTrackOnUnpublish" [(ngModel)]="roomOptions.stopLocalTrackOnUnpublish">stopLocalTrackOnUnpublish</mat-checkbox>
<mat-checkbox id="room-webAudioMix" [(ngModel)]="roomOptions.webAudioMix">webAudioMix</mat-checkbox> <mat-checkbox id="room-webAudioMix" [(ngModel)]="roomOptions.webAudioMix">webAudioMix</mat-checkbox>
<mat-checkbox id="room-forceRelay" [(ngModel)]="forceRelay">Force relay candidates</mat-checkbox>
</div> </div>
<mat-divider *ngIf="createLocalTracksOptions"></mat-divider> <mat-divider *ngIf="createLocalTracksOptions"></mat-divider>
<div *ngIf="createLocalTracksOptions"> <div *ngIf="createLocalTracksOptions">

View File

@ -20,6 +20,7 @@ import {
}) })
export class OptionsDialogComponent { export class OptionsDialogComponent {
roomOptions?: RoomOptions; roomOptions?: RoomOptions;
forceRelay = false;
createLocalTracksOptions?: CreateLocalTracksOptions; createLocalTracksOptions?: CreateLocalTracksOptions;
shareScreen = false; shareScreen = false;
screenShareCaptureOptions?: ScreenShareCaptureOptions; screenShareCaptureOptions?: ScreenShareCaptureOptions;
@ -47,6 +48,7 @@ export class OptionsDialogComponent {
@Inject(MAT_DIALOG_DATA) @Inject(MAT_DIALOG_DATA)
public data: { public data: {
roomOptions?: RoomOptions; roomOptions?: RoomOptions;
forceRelay: boolean;
createLocalTracksOptions?: CreateLocalTracksOptions; createLocalTracksOptions?: CreateLocalTracksOptions;
shareScreen: boolean; shareScreen: boolean;
screenShareCaptureOptions?: ScreenShareCaptureOptions; screenShareCaptureOptions?: ScreenShareCaptureOptions;
@ -57,6 +59,7 @@ export class OptionsDialogComponent {
} }
) { ) {
this.roomOptions = data.roomOptions; this.roomOptions = data.roomOptions;
this.forceRelay = data.forceRelay;
this.createLocalTracksOptions = data.createLocalTracksOptions; this.createLocalTracksOptions = data.createLocalTracksOptions;
this.shareScreen = data.shareScreen; this.shareScreen = data.shareScreen;
this.screenShareCaptureOptions = data.screenShareCaptureOptions; this.screenShareCaptureOptions = data.screenShareCaptureOptions;
@ -135,6 +138,7 @@ export class OptionsDialogComponent {
} }
this.dialogRef.close({ this.dialogRef.close({
roomOptions: this.roomOptions, roomOptions: this.roomOptions,
forceRelay: this.forceRelay,
createLocalTracksOptions: this.createLocalTracksOptions, createLocalTracksOptions: this.createLocalTracksOptions,
screenShareCaptureOptions: this.screenShareCaptureOptions, screenShareCaptureOptions: this.screenShareCaptureOptions,
trackPublishOptions: this.trackPublishOptions, trackPublishOptions: this.trackPublishOptions,

View File

@ -80,6 +80,9 @@ export class OpenviduInstanceComponent {
}; };
roomConnectOptions: RoomConnectOptions = { roomConnectOptions: RoomConnectOptions = {
autoSubscribe: false, autoSubscribe: false,
rtcConfig: {
iceTransportPolicy: 'all',
},
}; };
createLocalTracksOptions: CreateLocalTracksOptions = { createLocalTracksOptions: CreateLocalTracksOptions = {
audio: true, audio: true,
@ -1083,6 +1086,7 @@ export class OpenviduInstanceComponent {
const dialogRef = this.dialog.open(OptionsDialogComponent, { const dialogRef = this.dialog.open(OptionsDialogComponent, {
data: { data: {
roomOptions: this.roomOptions, roomOptions: this.roomOptions,
forceRelay: this.roomConnectOptions.rtcConfig!.iceTransportPolicy === 'relay',
createLocalTracksOptions: this.createLocalTracksOptions, createLocalTracksOptions: this.createLocalTracksOptions,
shareScreen: true, shareScreen: true,
screenShareCaptureOptions: this.screenShareCaptureOptions, screenShareCaptureOptions: this.screenShareCaptureOptions,
@ -1092,6 +1096,8 @@ export class OpenviduInstanceComponent {
dialogRef.afterClosed().subscribe((result) => { dialogRef.afterClosed().subscribe((result) => {
if (!!result) { if (!!result) {
this.roomOptions = result.roomOptions; this.roomOptions = result.roomOptions;
this.roomConnectOptions.rtcConfig!.iceTransportPolicy =
result.forceRelay ? 'relay' : 'all';
this.createLocalTracksOptions = result.createLocalTracksOptions; this.createLocalTracksOptions = result.createLocalTracksOptions;
this.screenShareCaptureOptions = result.screenShareCaptureOptions; this.screenShareCaptureOptions = result.screenShareCaptureOptions;
this.trackPublishOptions = result.trackPublishOptions; this.trackPublishOptions = result.trackPublishOptions;

View File

@ -42,7 +42,7 @@ export interface User {
selector: 'app-test-scenarios', selector: 'app-test-scenarios',
templateUrl: './test-scenarios.component.html', templateUrl: './test-scenarios.component.html',
styleUrls: ['./test-scenarios.component.css'], styleUrls: ['./test-scenarios.component.css'],
standalone: false standalone: false,
}) })
export class TestScenariosComponent implements OnInit, OnDestroy { export class TestScenariosComponent implements OnInit, OnDestroy {
fixedRoomId = 'SCENARIO_TEST'; fixedRoomId = 'SCENARIO_TEST';
@ -286,6 +286,8 @@ export class TestScenariosComponent implements OnInit, OnDestroy {
const dialogRef = this.dialog.open(OptionsDialogComponent, { const dialogRef = this.dialog.open(OptionsDialogComponent, {
data: { data: {
roomOptions: this.roomOptions, roomOptions: this.roomOptions,
forceRelay:
this.roomConnectOptions.rtcConfig?.iceTransportPolicy === 'relay',
createLocalTracksOptions: this.createLocalTracksOptions, createLocalTracksOptions: this.createLocalTracksOptions,
shareScreen: false, shareScreen: false,
trackPublishOptions: this.trackPublishOptions, trackPublishOptions: this.trackPublishOptions,
@ -297,6 +299,9 @@ export class TestScenariosComponent implements OnInit, OnDestroy {
return; return;
} }
this.roomOptions = result.roomOptions; this.roomOptions = result.roomOptions;
this.roomConnectOptions.rtcConfig = {
iceTransportPolicy: result.forceRelay ? 'relay' : 'all',
};
this.createLocalTracksOptions = result.createLocalTracksOptions; this.createLocalTracksOptions = result.createLocalTracksOptions;
this.trackPublishOptions = result.trackPublishOptions; this.trackPublishOptions = result.trackPublishOptions;
}); });