openvidu-components: Fixed connection bug when prejoin is disabled

pull/707/head
csantosm 2022-03-10 16:17:27 +01:00
parent bb16418385
commit ad9e4db4e8
4 changed files with 24 additions and 25 deletions

View File

@ -1,4 +1,14 @@
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostListener, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core'; import {
ChangeDetectionStrategy,
Component,
ContentChild,
EventEmitter,
HostListener,
OnInit,
Output,
TemplateRef,
ViewChild
} from '@angular/core';
import { Subscriber, Session, StreamEvent, StreamPropertyChangedEvent, SessionDisconnectedEvent, ConnectionEvent } from 'openvidu-browser'; import { Subscriber, Session, StreamEvent, StreamPropertyChangedEvent, SessionDisconnectedEvent, ConnectionEvent } from 'openvidu-browser';
import { VideoType } from '../../models/video-type.model'; import { VideoType } from '../../models/video-type.model';
@ -29,7 +39,6 @@ export class SessionComponent implements OnInit {
@ContentChild('panel', { read: TemplateRef }) panelTemplate: TemplateRef<any>; @ContentChild('panel', { read: TemplateRef }) panelTemplate: TemplateRef<any>;
@ContentChild('layout', { read: TemplateRef }) layoutTemplate: TemplateRef<any>; @ContentChild('layout', { read: TemplateRef }) layoutTemplate: TemplateRef<any>;
@Input() tokens: { webcam: string; screen: string };
@Output() _session = new EventEmitter<any>(); @Output() _session = new EventEmitter<any>();
@Output() _publisher = new EventEmitter<any>(); @Output() _publisher = new EventEmitter<any>();
@Output() _error = new EventEmitter<any>(); @Output() _error = new EventEmitter<any>();
@ -59,7 +68,7 @@ export class SessionComponent implements OnInit {
protected chatService: ChatService, protected chatService: ChatService,
protected tokenService: TokenService, protected tokenService: TokenService,
protected layoutService: LayoutService, protected layoutService: LayoutService,
protected menuService: SidenavMenuService, protected menuService: SidenavMenuService
) { ) {
this.log = this.loggerSrv.get('SessionComponent'); this.log = this.loggerSrv.get('SessionComponent');
} }
@ -85,7 +94,6 @@ export class SessionComponent implements OnInit {
} }
async ngOnInit() { async ngOnInit() {
this.session = this.openviduService.getWebcamSession(); this.session = this.openviduService.getWebcamSession();
this.sessionScreen = this.openviduService.getScreenSession(); this.sessionScreen = this.openviduService.getScreenSession();
this.subscribeToConnectionCreatedAndDestroyed(); this.subscribeToConnectionCreatedAndDestroyed();
@ -96,9 +104,6 @@ export class SessionComponent implements OnInit {
this.chatService.subscribeToChat(); this.chatService.subscribeToChat();
this.subscribeToReconnection(); this.subscribeToReconnection();
this.tokenService.setWebcamToken(this.tokens.webcam);
this.tokenService.setScreenToken(this.tokens.screen);
await this.connectToSession(); await this.connectToSession();
// Workaround, firefox does not have audio when publisher join with muted camera // Workaround, firefox does not have audio when publisher join with muted camera
// if (this.platformService.isFirefox() && !this.localUserService.hasCameraVideoActive()) { // if (this.platformService.isFirefox() && !this.localUserService.hasCameraVideoActive()) {

View File

@ -14,8 +14,8 @@
<span>{{ errorMessage }}</span> <span>{{ errorMessage }}</span>
</div> </div>
<div id="session-container" *ngIf="(joinSessionClicked || !showPrejoin) && participantReady && !error"> <div id="session-container" *ngIf="(joinSessionClicked || !showPrejoin) && participantReady && canPublish && !error">
<ov-session [tokens]="_tokens"> <ov-session>
<ng-template #toolbar> <ng-template #toolbar>
<ng-container *ngIf="openviduAngularToolbarTemplate"> <ng-container *ngIf="openviduAngularToolbarTemplate">
<ng-container *ngTemplateOutlet="openviduAngularToolbarTemplate"></ng-container> <ng-container *ngTemplateOutlet="openviduAngularToolbarTemplate"></ng-container>

View File

@ -32,6 +32,7 @@ import { LoggerService } from '../../services/logger/logger.service';
import { OpenViduService } from '../../services/openvidu/openvidu.service'; import { OpenViduService } from '../../services/openvidu/openvidu.service';
import { ParticipantService } from '../../services/participant/participant.service'; import { ParticipantService } from '../../services/participant/participant.service';
import { StorageService } from '../../services/storage/storage.service'; import { StorageService } from '../../services/storage/storage.service';
import { TokenService } from '../../services/token/token.service';
@Component({ @Component({
selector: 'ov-videoconference', selector: 'ov-videoconference',
@ -84,10 +85,9 @@ export class VideoconferenceComponent implements OnInit, OnDestroy, AfterViewIni
this.log.w('No tokens received'); this.log.w('No tokens received');
} else { } else {
if (tokens.webcam || tokens.screen) { if (tokens.webcam || tokens.screen) {
this._tokens = { this.tokenService.setWebcamToken(tokens.webcam);
webcam: tokens.webcam, this.tokenService.setScreenToken(tokens.screen);
screen: tokens.screen this.canPublish = true;
};
} }
} }
} }
@ -116,7 +116,7 @@ export class VideoconferenceComponent implements OnInit, OnDestroy, AfterViewIni
joinSessionClicked: boolean = false; joinSessionClicked: boolean = false;
participantReady: boolean = false; participantReady: boolean = false;
_tokens: { webcam: string; screen: string }; canPublish: boolean = false;
error: boolean = false; error: boolean = false;
errorMessage: string = ''; errorMessage: string = '';
showPrejoin: boolean = true; showPrejoin: boolean = true;
@ -130,7 +130,8 @@ export class VideoconferenceComponent implements OnInit, OnDestroy, AfterViewIni
private deviceSrv: DeviceService, private deviceSrv: DeviceService,
private openviduService: OpenViduService, private openviduService: OpenViduService,
private actionService: ActionService, private actionService: ActionService,
private libService: OpenViduAngularConfigService private libService: OpenViduAngularConfigService,
private tokenService: TokenService,
) { ) {
this.log = this.loggerSrv.get('VideoconferenceComponent'); this.log = this.loggerSrv.get('VideoconferenceComponent');
} }

View File

@ -1,6 +1,4 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ILogger } from '../../models/logger.model';
import { LoggerService } from '../logger/logger.service';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -8,13 +6,8 @@ import { LoggerService } from '../logger/logger.service';
export class TokenService { export class TokenService {
private webcamToken = ''; private webcamToken = '';
private screenToken = ''; private screenToken = '';
private sessionId = '';
private log: ILogger;
constructor(private loggerSrv: LoggerService) {
this.log = this.loggerSrv.get('TokenService');
}
constructor() {}
setWebcamToken(token: string) { setWebcamToken(token: string) {
this.webcamToken = token; this.webcamToken = token;