From 153a19b626213ef920414efe89c0c76666c68c01 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Mon, 17 Apr 2017 16:23:30 +0200 Subject: [PATCH] Default 'streamDestroyed' behaviour. 'preventDefault()' method exposed --- .../src/main/resources/ts/OpenVidu/Session.ts | 4 ++++ .../src/main/resources/ts/OpenVidu/Stream.ts | 18 +++++++++++++++--- .../ts/OpenViduTokBox/SessionTokBox.ts | 6 +++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/openvidu-browser/src/main/resources/ts/OpenVidu/Session.ts b/openvidu-browser/src/main/resources/ts/OpenVidu/Session.ts index c98202e6..fc55e59f 100644 --- a/openvidu-browser/src/main/resources/ts/OpenVidu/Session.ts +++ b/openvidu-browser/src/main/resources/ts/OpenVidu/Session.ts @@ -282,6 +282,10 @@ export class Session { let streams = participant.getStreams(); for ( let key in streams ) { this.ee.emitEvent( 'stream-removed', [{ + stream: streams[key], + preventDefault: () => {this.ee.removeEvent('stream-removed-default');} + }] ); + this.ee.emitEvent( 'stream-removed-default', [{ stream: streams[key] }] ); diff --git a/openvidu-browser/src/main/resources/ts/OpenVidu/Stream.ts b/openvidu-browser/src/main/resources/ts/OpenVidu/Stream.ts index 8af25db7..e598bca9 100644 --- a/openvidu-browser/src/main/resources/ts/OpenVidu/Stream.ts +++ b/openvidu-browser/src/main/resources/ts/OpenVidu/Stream.ts @@ -70,6 +70,7 @@ export class Stream { private dataChannelOpened = false; private videoSrc: string; + private parentId: string; public isReady: boolean = false; constructor(private openVidu: OpenVidu, private local: boolean, private room: Session, options: StreamOptions) { @@ -101,7 +102,7 @@ export class Stream { }]); } - emitStreamReadyEvent(){ + emitStreamReadyEvent() { this.ee.emitEvent('stream-ready'), [{}]; } @@ -109,14 +110,22 @@ export class Stream { return this.videoSrc; } - removeVideo(parentElement) { - document.getElementById(parentElement)!.removeChild(this.video); + removeVideo(parentElement?) { + if (parentElement) { + document.getElementById(parentElement)!.removeChild(this.video); + } else { + if (document.getElementById(this.parentId)) { + document.getElementById(this.parentId)!.removeChild(this.video); + } + } } + + getRecvVideo() { return this.recvVideo; } @@ -229,11 +238,14 @@ export class Stream { } if (typeof parentElement === "string") { + this.parentId = parentElement; + let parentElementDom = document.getElementById(parentElement); if (parentElementDom) { this.video = parentElementDom.appendChild(this.video); } } else { + this.parentId = parentElement.id; this.video = parentElement.appendChild(this.video); } diff --git a/openvidu-browser/src/main/resources/ts/OpenViduTokBox/SessionTokBox.ts b/openvidu-browser/src/main/resources/ts/OpenViduTokBox/SessionTokBox.ts index 4cc55bc1..a4e72722 100644 --- a/openvidu-browser/src/main/resources/ts/OpenViduTokBox/SessionTokBox.ts +++ b/openvidu-browser/src/main/resources/ts/OpenViduTokBox/SessionTokBox.ts @@ -6,7 +6,11 @@ import { PublisherTokBox } from './PublisherTokBox'; export class SessionTokBox { - constructor(private session: Session, private openVidu: OpenViduTokBox) { } + constructor(private session: Session, private openVidu: OpenViduTokBox) { + this.session.addEventListener('stream-removed-default', event => { + event.stream.removeVideo(); + }); + } connect(token, callback) { // Early configuration to deactivate automatic subscription to streams