videoElementCreated event emitted by Publisher and Subscriber

pull/3/merge
pabloFuente 2017-04-28 14:52:55 +02:00
parent 44ee19c75c
commit abe526365d
7 changed files with 110 additions and 20 deletions

View File

@ -58,7 +58,7 @@ export class OpenVidu {
console.log("Error accessing the camera"); console.log("Error accessing the camera");
} }
else { else {
this.cameraReady(camera!, parentId); this.camera.setVideoElement(this.cameraReady(camera!, parentId));
} }
}); });
return this.camera; return this.camera;
@ -68,7 +68,7 @@ export class OpenVidu {
callback(error); callback(error);
} }
else { else {
this.cameraReady(camera!, parentId); this.camera.setVideoElement(this.cameraReady(camera!, parentId));
callback(undefined); callback(undefined);
} }
}); });
@ -78,9 +78,9 @@ export class OpenVidu {
cameraReady(camera: Stream, parentId: string) { cameraReady(camera: Stream, parentId: string) {
this.camera = camera; this.camera = camera;
this.camera.playOnlyVideo(parentId, null); let videoElement = this.camera.playOnlyVideo(parentId, null);
this.camera.isReady = true;
this.camera.emitStreamReadyEvent(); this.camera.emitStreamReadyEvent();
return videoElement;
} }
initPublisher(cameraOptions: any, callback) { initPublisher(cameraOptions: any, callback) {

View File

@ -345,7 +345,7 @@ export class Session {
message: message message: message
}]); }]);
} else { } else {
console.error("User undefined in new message:", msg); console.warn("User undefined in new message:", msg);
} }
} }
@ -387,7 +387,7 @@ export class Session {
room: room room: room
}]); }]);
} else { } else {
console.error("Room undefined in on room closed", msg); console.warn("Room undefined in on room closed", msg);
} }
} }
@ -403,7 +403,7 @@ export class Session {
if (room !== undefined) { if (room !== undefined) {
this.ee.emitEvent('lost-connection', [{ room }]); this.ee.emitEvent('lost-connection', [{ room }]);
} else { } else {
console.error('Room undefined when lost connection'); console.warn('Room undefined when lost connection');
} }
} }
@ -416,7 +416,7 @@ export class Session {
error: error error: error
}]); }]);
} else { } else {
console.error("Received undefined media error. Params:", params); console.warn("Received undefined media error. Params:", params);
} }
} }

View File

@ -110,16 +110,30 @@ export class Stream {
return this.videoSrc; return this.videoSrc;
} }
removeVideo(parentElement: string);
removeVideo(parentElement: Element);
removeVideo();
removeVideo(parentElement?) { removeVideo(parentElement?) {
if (parentElement) { if (typeof parentElement === "string") {
document.getElementById(parentElement)!.removeChild(this.video); document.getElementById(parentElement)!.removeChild(this.video);
} else { } else if (parentElement instanceof Element) {
parentElement.removeChild(this.video);
}
else if (!parentElement) {
if (document.getElementById(this.parentId)) { if (document.getElementById(this.parentId)) {
document.getElementById(this.parentId)!.removeChild(this.video); document.getElementById(this.parentId)!.removeChild(this.video);
} }
} }
} }
getVideoElement(): HTMLVideoElement {
return this.video;
}
setVideoElement(video: HTMLVideoElement) {
this.video = video;
}
@ -203,6 +217,14 @@ export class Stream {
this.ee.addListener(eventName, listener); this.ee.addListener(eventName, listener);
} }
addOnceEventListener(eventName: string, listener: any) {
this.ee.addOnceListener(eventName, listener);
}
removeListener(eventName){
this.ee.removeAllListeners(eventName);
}
showSpinner(spinnerParentId: string) { showSpinner(spinnerParentId: string) {
let progress = document.createElement('div'); let progress = document.createElement('div');
progress.id = 'progress-' + this.getId(); progress.id = 'progress-' + this.getId();
@ -249,6 +271,12 @@ export class Stream {
this.video = parentElement.appendChild(this.video); this.video = parentElement.appendChild(this.video);
} }
this.ee.emitEvent('video-element-created-by-stream', [{
element: this.video
}]);
this.isReady = true;
return this.video; return this.video;
} }

View File

@ -19,10 +19,10 @@ export class PublisherTokBox {
element: Element; element: Element;
id: string; id: string;
stream: Stream; stream: Stream;
session: SessionTokBox; session: SessionTokBox; //Initialized by SessionTokBox.publish(PublisherTokBox)
constructor(stream: Stream, parentId: string) { constructor(stream: Stream, parentId: string) {
this.accessAllowed = false; this.stream = stream;
this.ee.on('camera-access-changed', (event) => { this.ee.on('camera-access-changed', (event) => {
this.accessAllowed = event.accessAllowed; this.accessAllowed = event.accessAllowed;
@ -33,7 +33,6 @@ export class PublisherTokBox {
} }
}); });
this.stream = stream;
if (document.getElementById(parentId) != null) { if (document.getElementById(parentId) != null) {
this.element = document.getElementById(parentId)!!; this.element = document.getElementById(parentId)!!;
} }
@ -47,4 +46,31 @@ export class PublisherTokBox {
this.stream.getWebRtcPeer().videoEnabled = value; this.stream.getWebRtcPeer().videoEnabled = value;
} }
} destroy() {
this.session.unpublish(this);
this.stream.dispose();
this.stream.removeVideo(this.element);
return this;
}
on(eventName: string, callback) {
this.ee.addListener(eventName, event => {
callback(event);
});
if (eventName == 'videoElementCreated') {
if (this.stream.isReady) {
this.ee.emitEvent('videoElementCreated', [{
element: this.stream.getVideoElement()
}]);
} else {
this.stream.addEventListener('video-element-created-by-stream', element => {
console.warn("Publisher emitting videoElementCreated");
this.id = element.id;
this.ee.emitEvent('videoElementCreated', [{
element: element
}]);
});
}
}
}
}

View File

@ -7,7 +7,12 @@ import { SubscriberTokBox } from './SubscriberTokBox';
export class SessionTokBox { export class SessionTokBox {
//capabilities: Capabilities
//connection: Connection
sessionId: String;
constructor(private session: Session, private openVidu: OpenViduTokBox) { constructor(private session: Session, private openVidu: OpenViduTokBox) {
this.sessionId = session.getSessionId();
this.session.addEventListener('stream-removed-default', event => { this.session.addEventListener('stream-removed-default', event => {
event.stream.removeVideo(); event.stream.removeVideo();
}); });
@ -51,7 +56,9 @@ export class SessionTokBox {
callback(event); callback(event);
}); });
} else { } else {
console.warn("That is not a supported event!"); this.session.addEventListener(eventName, event => {
callback(event);
});
} }
} }
@ -70,7 +77,9 @@ export class SessionTokBox {
callback(event); callback(event);
}); });
} else { } else {
console.warn("That is not a supported event!"); this.session.addOnceEventListener(eventName, event => {
callback(event);
});
} }
} }
@ -87,7 +96,7 @@ export class SessionTokBox {
if (realEventName != '') { if (realEventName != '') {
this.session.removeListener(realEventName, eventHandler); this.session.removeListener(realEventName, eventHandler);
} else { } else {
console.warn("That is not a supported event!"); this.session.removeListener(eventName, eventHandler);
} }
} }
@ -97,12 +106,14 @@ export class SessionTokBox {
subscribe(param1, param2, param3?): SubscriberTokBox { subscribe(param1, param2, param3?): SubscriberTokBox {
// Subscription // Subscription
this.session.subscribe(param1); this.session.subscribe(param1);
let subscriber = new SubscriberTokBox(param1, param2);
param1.playOnlyVideo(param2, null); param1.playOnlyVideo(param2, null);
return new SubscriberTokBox(param1, param2); return subscriber;
} }
unsuscribe(subscriber: SubscriberTokBox) { unsubscribe(subscriber: SubscriberTokBox) {
this.session.unsuscribe(subscriber.stream); this.session.unsuscribe(subscriber.stream);
subscriber.stream.removeVideo();
} }

View File

@ -2,8 +2,12 @@ import { Stream, StreamOptions, VideoOptions } from '../OpenVidu/Stream';
import { OpenViduTokBox } from './OpenViduTokBox'; import { OpenViduTokBox } from './OpenViduTokBox';
import { SessionTokBox } from './SessionTokBox'; import { SessionTokBox } from './SessionTokBox';
import EventEmitter = require('wolfy87-eventemitter');
export class SubscriberTokBox { export class SubscriberTokBox {
private ee = new EventEmitter();
element: Element; element: Element;
id: string; id: string;
stream: Stream; stream: Stream;
@ -14,4 +18,25 @@ export class SubscriberTokBox {
this.element = document.getElementById(parentId)!!; this.element = document.getElementById(parentId)!!;
} }
} }
on(eventName: string, callback) {
this.ee.addListener(eventName, event => {
callback(event);
});
if (eventName == 'videoElementCreated') {
if (this.stream.isReady) {
this.ee.emitEvent('videoElementCreated', [{
element: this.stream.getVideoElement()
}]);
} else {
this.stream.addEventListener('video-element-created-by-stream', element => {
console.warn("Subscriber emitting videoElementCreated");
this.id = element.id;
this.ee.emitEvent('videoElementCreated', [{
element: element
}]);
});
}
}
}
} }

View File

@ -6,4 +6,4 @@ server.ssl.keyStoreType: JKS
server.ssl.keyAlias: kurento-selfsigned server.ssl.keyAlias: kurento-selfsigned
openvidu.secret: MY_SECRET openvidu.secret: MY_SECRET
openvidu.security: true openvidu.security: false