2017-05-10 10:55:31 +02:00
|
|
|
import { Stream, StreamOptions, VideoOptions } from '../OpenViduInternal/Stream';
|
2017-04-17 20:28:05 +02:00
|
|
|
|
2017-04-28 14:52:55 +02:00
|
|
|
import EventEmitter = require('wolfy87-eventemitter');
|
|
|
|
|
2017-05-10 10:55:31 +02:00
|
|
|
export class Subscriber {
|
2017-04-17 20:28:05 +02:00
|
|
|
|
2017-04-28 14:52:55 +02:00
|
|
|
private ee = new EventEmitter();
|
|
|
|
|
2017-04-17 20:28:05 +02:00
|
|
|
element: Element;
|
|
|
|
id: string;
|
|
|
|
stream: Stream;
|
|
|
|
|
|
|
|
constructor(stream: Stream, parentId: string) {
|
|
|
|
this.stream = stream;
|
|
|
|
if (document.getElementById(parentId) != null) {
|
|
|
|
this.element = document.getElementById(parentId)!!;
|
|
|
|
}
|
|
|
|
}
|
2017-04-28 14:52:55 +02:00
|
|
|
|
|
|
|
on(eventName: string, callback) {
|
|
|
|
this.ee.addListener(eventName, event => {
|
2017-09-22 15:57:59 +02:00
|
|
|
if (event) {
|
|
|
|
console.info("Event '" + eventName + "' triggered by 'Subscriber'", event);
|
|
|
|
} else {
|
|
|
|
console.info("Event '" + eventName + "' triggered by 'Subscriber'");
|
|
|
|
}
|
2017-04-28 14:52:55 +02:00
|
|
|
callback(event);
|
|
|
|
});
|
|
|
|
if (eventName == 'videoElementCreated') {
|
2017-09-28 19:13:29 +02:00
|
|
|
if (this.stream.isVideoELementCreated) {
|
2017-04-28 14:52:55 +02:00
|
|
|
this.ee.emitEvent('videoElementCreated', [{
|
|
|
|
element: this.stream.getVideoElement()
|
|
|
|
}]);
|
|
|
|
} else {
|
2017-09-22 15:57:59 +02:00
|
|
|
this.stream.addOnceEventListener('video-element-created-by-stream', element => {
|
2017-04-28 14:52:55 +02:00
|
|
|
console.warn("Subscriber emitting videoElementCreated");
|
|
|
|
this.id = element.id;
|
|
|
|
this.ee.emitEvent('videoElementCreated', [{
|
|
|
|
element: element
|
|
|
|
}]);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2017-09-22 15:57:59 +02:00
|
|
|
if (eventName == 'videoPlaying') {
|
|
|
|
var video = this.stream.getVideoElement();
|
|
|
|
if (!this.stream.displayMyRemote() && video &&
|
|
|
|
video.currentTime > 0 &&
|
|
|
|
video.paused == false &&
|
|
|
|
video.ended == false &&
|
|
|
|
video.readyState == 4) {
|
|
|
|
this.ee.emitEvent('videoPlaying', [{
|
|
|
|
element: this.stream.getVideoElement()
|
|
|
|
}]);
|
|
|
|
} else {
|
|
|
|
this.stream.addOnceEventListener('video-is-playing', (element) => {
|
|
|
|
this.ee.emitEvent('videoPlaying', [{
|
|
|
|
element: element.element
|
|
|
|
}]);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2017-04-28 14:52:55 +02:00
|
|
|
}
|
2017-04-17 20:28:05 +02:00
|
|
|
}
|