@techsee/techsee-media-service 0.6.1-alpha.7 → 0.6.1-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaSubscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAC,gBAAgB,EAAuB,MAAM,kBAAkB,CAAC;AAWxE,qBAAa,sBAAuB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;gBAE9C,gBAAgB,EAAE,qBAAqB;aAW/C,UAAU,EAAI,gBAAgB;aAI9B,SAAS,EAAI,cAAc;aAI3B,SAAS,EAAI,OAAO;aAIpB,YAAY,EAAI,OAAO;aAQvB,QAAQ,EAAI,OAAO;aAInB,QAAQ,EAAI,OAAO;aAInB,YAAY,EAAI,QAAQ,CAAC,gBAAgB,CAAC;aAI1C,UAAU,EAAI,MAAM;aAIpB,WAAW,EAAI,MAAM;aAIrB,WAAW,EAAI,MAAM;aAIrB,YAAY,EAAI,MAAM;IAI1B,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASjC,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAK1C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IASrC,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAe9C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,IAAI,IAAI;IAgBf,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,eAAe;CAK1B","file":"MediaSubscriber.d.ts","sourcesContent":["import {EventEmitter} from 'events';\nimport {Nullable} from '@techsee/techsee-common';\nimport {IMediaSubscriber, MediaSubscriberParams} from './MediaContracts';\nimport {TechseeMediaStream} from './TechseeMediaStream';\nimport {removeVideoElementFromDom, renderMediaStreamToVideoEl} from './MediaUtils/MediaDomUtils';\nimport {KnownMediaStream, KnownMediaStreamKind} from './MediaConstants';\n\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('MediaSubscriber');\n\nenum privateEvents {\n STREAM_STATE_CHANGE = 'STREAM_STATE_CHANGE',\n SUBSCRIBER_DISPOSE = 'SUBSCRIBER_DISPOSE'\n}\n\nexport class TechseeMediaSubscriber implements IMediaSubscriber {\n private _emitter: EventEmitter;\n private _isDisposed: boolean = false;\n private _isPlaying: boolean = false;\n private _hasVideo: boolean = false;\n private _hasAudio: boolean = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n\n private readonly _subscriberParams: MediaSubscriberParams;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n trace.info('Subscriber created');\n\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n\n this._emitter = new EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n\n //#region IMediaSubscriber\n\n get streamType(): KnownMediaStream {\n return this._subscriberParams.streamType;\n }\n\n get container(): HTMLDivElement {\n return this._subscriberParams.container;\n }\n\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n get isSoundMuted(): boolean {\n if (!this._mediaElement) {\n return true;\n }\n\n return this._mediaElement.muted;\n }\n\n get hasAudio(): boolean {\n return this._hasAudio;\n }\n\n get hasVideo(): boolean {\n return this._hasVideo;\n }\n\n get mediaElement(): Nullable<HTMLVideoElement> {\n return this._mediaElement;\n }\n\n get videoWidth(): number {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n }\n\n get videoHeight(): number {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n }\n\n get renderWidth(): number {\n return this.container.offsetWidth;\n }\n\n get renderHeight(): number {\n return this.container.offsetHeight;\n }\n\n muteSound(isMuted: boolean): void {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n }\n\n onStateChanged(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n }\n\n onDispose(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n }\n\n //#endregion\n\n //#region Non Interface Methods\n\n renderStream(stream: TechseeMediaStream): void {\n this.throwIfDisposed();\n\n renderMediaStreamToVideoEl(this.container, stream.mediaStream)\n .then((videoEl) => {\n this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n\n this.setPlayingState(videoEl, stream.streamKind);\n })\n .catch((error) => {\n trace.warn('Error while rendering stream on video element', error);\n });\n }\n\n stopRendering(): Promise<void> {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return removeVideoElementFromDom(this._mediaElement)\n .then(() => {\n this.setPlayingState();\n });\n }\n\n return Promise.resolve();\n }\n\n dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this.stopRendering().catch(() => undefined);\n\n\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n }\n\n //#endregion\n\n private setPlayingState(mediaElement?: HTMLVideoElement, streamKind?: KnownMediaStreamKind): void {\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n\n const finalize = (): void => {\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(`Video element ${streamKind || ''} ${this.isPlaying ? 'play' : 'stop'} success`);\n };\n\n if (this._mediaElement && streamKind === KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n const resizeHandler = (): void => {\n finalize();\n this._mediaElement && this._mediaElement.removeEventListener('resize', resizeHandler);\n this._mediaElement && this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n };\n\n //Todo actually, from here we can know on dimensions changes\n this._mediaElement.addEventListener('resize', resizeHandler, false);\n } else {\n this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n }\n } else {\n finalize();\n }\n }\n\n private videoResizeHandler(): void {\n trace.info(`Video resize, new size = w: ${this.videoWidth} h:${this.videoHeight}`);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n\n private emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n private throwIfDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/MediaSubscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAC,gBAAgB,EAAuB,MAAM,kBAAkB,CAAC;AAWxE,qBAAa,sBAAuB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;gBAE9C,gBAAgB,EAAE,qBAAqB;aAW/C,UAAU,EAAI,gBAAgB;aAI9B,SAAS,EAAI,cAAc;aAI3B,SAAS,EAAI,OAAO;aAIpB,YAAY,EAAI,OAAO;aAQvB,QAAQ,EAAI,OAAO;aAInB,QAAQ,EAAI,OAAO;aAInB,YAAY,EAAI,QAAQ,CAAC,gBAAgB,CAAC;aAI1C,UAAU,EAAI,MAAM;aAIpB,WAAW,EAAI,MAAM;aAIrB,WAAW,EAAI,MAAM;aAIrB,YAAY,EAAI,MAAM;IAI1B,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASjC,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAK1C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IASrC,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAe9C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,IAAI,IAAI;IAgBf,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,eAAe;CAK1B","file":"MediaSubscriber.d.ts","sourcesContent":["import {EventEmitter} from 'events';\nimport {Nullable} from '@techsee/techsee-common';\nimport {IMediaSubscriber, MediaSubscriberParams} from './MediaContracts';\nimport {TechseeMediaStream} from './TechseeMediaStream';\nimport {removeVideoElementFromDom, renderMediaStreamToVideoEl} from './MediaUtils/MediaDomUtils';\nimport {KnownMediaStream, KnownMediaStreamKind} from './MediaConstants';\n\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('MediaSubscriber');\n\nenum privateEvents {\n STREAM_STATE_CHANGE = 'STREAM_STATE_CHANGE',\n SUBSCRIBER_DISPOSE = 'SUBSCRIBER_DISPOSE'\n}\n\nexport class TechseeMediaSubscriber implements IMediaSubscriber {\n private _emitter: EventEmitter;\n private _isDisposed: boolean = false;\n private _isPlaying: boolean = false;\n private _hasVideo: boolean = false;\n private _hasAudio: boolean = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n\n private readonly _subscriberParams: MediaSubscriberParams;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n trace.info('Subscriber created');\n\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n\n this._emitter = new EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n\n //#region IMediaSubscriber\n\n get streamType(): KnownMediaStream {\n return this._subscriberParams.streamType;\n }\n\n get container(): HTMLDivElement {\n return this._subscriberParams.container;\n }\n\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n get isSoundMuted(): boolean {\n if (!this._mediaElement) {\n return true;\n }\n\n return this._mediaElement.muted;\n }\n\n get hasAudio(): boolean {\n return this._hasAudio;\n }\n\n get hasVideo(): boolean {\n return this._hasVideo;\n }\n\n get mediaElement(): Nullable<HTMLVideoElement> {\n return this._mediaElement;\n }\n\n get videoWidth(): number {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n }\n\n get videoHeight(): number {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n }\n\n get renderWidth(): number {\n return this.container.offsetWidth;\n }\n\n get renderHeight(): number {\n return this.container.offsetHeight;\n }\n\n muteSound(isMuted: boolean): void {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n }\n\n onStateChanged(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n }\n\n onDispose(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n }\n\n //#endregion\n\n //#region Non Interface Methods\n\n renderStream(stream: TechseeMediaStream): void {\n this.throwIfDisposed();\n\n renderMediaStreamToVideoEl(this.container, stream.mediaStream)\n .then((videoEl) => {\n this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n\n this.setPlayingState(videoEl, stream.streamKind);\n })\n .catch((error) => {\n trace.warn('Error while rendering stream on video element', error);\n });\n }\n\n stopRendering(): Promise<void> {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return removeVideoElementFromDom(this._mediaElement)\n .then(() => {\n this.setPlayingState();\n });\n }\n\n return Promise.resolve();\n }\n\n dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this.stopRendering().catch(() => undefined);\n\n\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n }\n\n //#endregion\n\n private setPlayingState(mediaElement?: HTMLVideoElement, streamKind?: KnownMediaStreamKind): void {\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n\n const finalize = (): void => {\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(`Video element ${streamKind || ''} ${this.isPlaying ? 'play' : 'stop'} success`);\n };\n\n if (this._mediaElement && streamKind === KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n const resizeHandler = (): void => {\n finalize();\n this._mediaElement && this._mediaElement.removeEventListener('resize', resizeHandler);\n this._mediaElement && this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n };\n\n //Todo actually, from here we can know on dimensions changes\n this._mediaElement.addEventListener('resize', resizeHandler, false);\n } else {\n this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n finalize();\n }\n } else {\n finalize();\n }\n }\n\n private videoResizeHandler(): void {\n trace.info(`Video resize, new size = w: ${this.videoWidth} h:${this.videoHeight}`);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n\n private emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n private throwIfDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n }\n}\n"]}
@@ -174,6 +174,7 @@ var TechseeMediaSubscriber = /** @class */function () {
174
174
  this._mediaElement.addEventListener('resize', resizeHandler_1, false);
175
175
  } else {
176
176
  this._mediaElement.addEventListener('resize', this.videoResizeHandler);
177
+ finalize();
177
178
  }
178
179
  } else {
179
180
  finalize();
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSubscriber.js","../src/MediaSubscriber.ts"],"names":["Object","defineProperty","exports","value","events_1","require","MediaDomUtils_1","MediaConstants_1","MediaTracer_1","trace","getMediaTracer","privateEvents","TechseeMediaSubscriber","subscriberParams","_isDisposed","_isPlaying","_hasVideo","_hasAudio","_mediaElement","info","videoResizeHandler","bind","_emitter","EventEmitter","_subscriberParams","prototype","get","streamType","enumerable","configurable","container","muted","mediaElement","videoWidth","videoHeight","offsetWidth","offsetHeight","muteSound","isMuted","throwIfDisposed","emitEvent","STREAM_STATE_CHANGE","onStateChanged","callback","on","onDispose","SUBSCRIBER_DISPOSE","renderStream","stream","_this","renderMediaStreamToVideoEl","mediaStream","then","videoEl","getAudioTracks","length","getVideoTracks","setPlayingState","streamKind","catch","error","warn","stopRendering","document","body","contains","removeVideoElementFromDom","Promise","resolve","dispose","undefined","removeAllListeners","finalize","isPlaying","KnownMediaStreamKind","Video","resizeHandler_1","removeEventListener","addEventListener","event","eventArgs","setTimeout","emit","Error"],"mappings":"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","file":"MediaSubscriber.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar events_1 = require(\"events\");\nvar MediaDomUtils_1 = require(\"./MediaUtils/MediaDomUtils\");\nvar MediaConstants_1 = require(\"./MediaConstants\");\nvar MediaTracer_1 = require(\"./MediaUtils/MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSubscriber');\nvar privateEvents;\n(function (privateEvents) {\n privateEvents[\"STREAM_STATE_CHANGE\"] = \"STREAM_STATE_CHANGE\";\n privateEvents[\"SUBSCRIBER_DISPOSE\"] = \"SUBSCRIBER_DISPOSE\";\n})(privateEvents || (privateEvents = {}));\nvar TechseeMediaSubscriber = /** @class */ (function () {\n function TechseeMediaSubscriber(subscriberParams) {\n this._isDisposed = false;\n this._isPlaying = false;\n this._hasVideo = false;\n this._hasAudio = false;\n this._mediaElement = null;\n trace.info('Subscriber created');\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n this._emitter = new events_1.EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"streamType\", {\n //#region IMediaSubscriber\n get: function () {\n return this._subscriberParams.streamType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"container\", {\n get: function () {\n return this._subscriberParams.container;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isPlaying\", {\n get: function () {\n return this._isPlaying;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isSoundMuted\", {\n get: function () {\n if (!this._mediaElement) {\n return true;\n }\n return this._mediaElement.muted;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasAudio\", {\n get: function () {\n return this._hasAudio;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasVideo\", {\n get: function () {\n return this._hasVideo;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"mediaElement\", {\n get: function () {\n return this._mediaElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoWidth\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoHeight\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderWidth\", {\n get: function () {\n return this.container.offsetWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderHeight\", {\n get: function () {\n return this.container.offsetHeight;\n },\n enumerable: true,\n configurable: true\n });\n TechseeMediaSubscriber.prototype.muteSound = function (isMuted) {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n };\n TechseeMediaSubscriber.prototype.onStateChanged = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n };\n TechseeMediaSubscriber.prototype.onDispose = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n };\n //#endregion\n //#region Non Interface Methods\n TechseeMediaSubscriber.prototype.renderStream = function (stream) {\n var _this = this;\n this.throwIfDisposed();\n MediaDomUtils_1.renderMediaStreamToVideoEl(this.container, stream.mediaStream)\n .then(function (videoEl) {\n _this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n _this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n _this.setPlayingState(videoEl, stream.streamKind);\n })\n .catch(function (error) {\n trace.warn('Error while rendering stream on video element', error);\n });\n };\n TechseeMediaSubscriber.prototype.stopRendering = function () {\n var _this = this;\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return MediaDomUtils_1.removeVideoElementFromDom(this._mediaElement)\n .then(function () {\n _this.setPlayingState();\n });\n }\n return Promise.resolve();\n };\n TechseeMediaSubscriber.prototype.dispose = function () {\n if (this._isDisposed) {\n return;\n }\n this.stopRendering().catch(function () { return undefined; });\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n };\n //#endregion\n TechseeMediaSubscriber.prototype.setPlayingState = function (mediaElement, streamKind) {\n var _this = this;\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n var finalize = function () {\n _this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(\"Video element \" + (streamKind || '') + \" \" + (_this.isPlaying ? 'play' : 'stop') + \" success\");\n };\n if (this._mediaElement && streamKind === MediaConstants_1.KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n var resizeHandler_1 = function () {\n finalize();\n _this._mediaElement && _this._mediaElement.removeEventListener('resize', resizeHandler_1);\n _this._mediaElement && _this._mediaElement.addEventListener('resize', _this.videoResizeHandler);\n };\n //Todo actually, from here we can know on dimensions changes\n this._mediaElement.addEventListener('resize', resizeHandler_1, false);\n }\n else {\n this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n }\n }\n else {\n finalize();\n }\n };\n TechseeMediaSubscriber.prototype.videoResizeHandler = function () {\n trace.info(\"Video resize, new size = w: \" + this.videoWidth + \" h:\" + this.videoHeight);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n };\n TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n TechseeMediaSubscriber.prototype.throwIfDisposed = function () {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n };\n return TechseeMediaSubscriber;\n}());\nexports.TechseeMediaSubscriber = TechseeMediaSubscriber;\n\n//# sourceMappingURL=MediaSubscriber.js.map\n","import {EventEmitter} from 'events';\nimport {Nullable} from '@techsee/techsee-common';\nimport {IMediaSubscriber, MediaSubscriberParams} from './MediaContracts';\nimport {TechseeMediaStream} from './TechseeMediaStream';\nimport {removeVideoElementFromDom, renderMediaStreamToVideoEl} from './MediaUtils/MediaDomUtils';\nimport {KnownMediaStream, KnownMediaStreamKind} from './MediaConstants';\n\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('MediaSubscriber');\n\nenum privateEvents {\n STREAM_STATE_CHANGE = 'STREAM_STATE_CHANGE',\n SUBSCRIBER_DISPOSE = 'SUBSCRIBER_DISPOSE'\n}\n\nexport class TechseeMediaSubscriber implements IMediaSubscriber {\n private _emitter: EventEmitter;\n private _isDisposed: boolean = false;\n private _isPlaying: boolean = false;\n private _hasVideo: boolean = false;\n private _hasAudio: boolean = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n\n private readonly _subscriberParams: MediaSubscriberParams;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n trace.info('Subscriber created');\n\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n\n this._emitter = new EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n\n //#region IMediaSubscriber\n\n get streamType(): KnownMediaStream {\n return this._subscriberParams.streamType;\n }\n\n get container(): HTMLDivElement {\n return this._subscriberParams.container;\n }\n\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n get isSoundMuted(): boolean {\n if (!this._mediaElement) {\n return true;\n }\n\n return this._mediaElement.muted;\n }\n\n get hasAudio(): boolean {\n return this._hasAudio;\n }\n\n get hasVideo(): boolean {\n return this._hasVideo;\n }\n\n get mediaElement(): Nullable<HTMLVideoElement> {\n return this._mediaElement;\n }\n\n get videoWidth(): number {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n }\n\n get videoHeight(): number {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n }\n\n get renderWidth(): number {\n return this.container.offsetWidth;\n }\n\n get renderHeight(): number {\n return this.container.offsetHeight;\n }\n\n muteSound(isMuted: boolean): void {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n }\n\n onStateChanged(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n }\n\n onDispose(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n }\n\n //#endregion\n\n //#region Non Interface Methods\n\n renderStream(stream: TechseeMediaStream): void {\n this.throwIfDisposed();\n\n renderMediaStreamToVideoEl(this.container, stream.mediaStream)\n .then((videoEl) => {\n this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n\n this.setPlayingState(videoEl, stream.streamKind);\n })\n .catch((error) => {\n trace.warn('Error while rendering stream on video element', error);\n });\n }\n\n stopRendering(): Promise<void> {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return removeVideoElementFromDom(this._mediaElement)\n .then(() => {\n this.setPlayingState();\n });\n }\n\n return Promise.resolve();\n }\n\n dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this.stopRendering().catch(() => undefined);\n\n\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n }\n\n //#endregion\n\n private setPlayingState(mediaElement?: HTMLVideoElement, streamKind?: KnownMediaStreamKind): void {\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n\n const finalize = (): void => {\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(`Video element ${streamKind || ''} ${this.isPlaying ? 'play' : 'stop'} success`);\n };\n\n if (this._mediaElement && streamKind === KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n const resizeHandler = (): void => {\n finalize();\n this._mediaElement && this._mediaElement.removeEventListener('resize', resizeHandler);\n this._mediaElement && this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n };\n\n //Todo actually, from here we can know on dimensions changes\n this._mediaElement.addEventListener('resize', resizeHandler, false);\n } else {\n this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n }\n } else {\n finalize();\n }\n }\n\n private videoResizeHandler(): void {\n trace.info(`Video resize, new size = w: ${this.videoWidth} h:${this.videoHeight}`);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n\n private emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n private throwIfDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["MediaSubscriber.js","../src/MediaSubscriber.ts"],"names":["Object","defineProperty","exports","value","events_1","require","MediaDomUtils_1","MediaConstants_1","MediaTracer_1","trace","getMediaTracer","privateEvents","TechseeMediaSubscriber","subscriberParams","_isDisposed","_isPlaying","_hasVideo","_hasAudio","_mediaElement","info","videoResizeHandler","bind","_emitter","EventEmitter","_subscriberParams","prototype","get","streamType","enumerable","configurable","container","muted","mediaElement","videoWidth","videoHeight","offsetWidth","offsetHeight","muteSound","isMuted","throwIfDisposed","emitEvent","STREAM_STATE_CHANGE","onStateChanged","callback","on","onDispose","SUBSCRIBER_DISPOSE","renderStream","stream","_this","renderMediaStreamToVideoEl","mediaStream","then","videoEl","getAudioTracks","length","getVideoTracks","setPlayingState","streamKind","catch","error","warn","stopRendering","document","body","contains","removeVideoElementFromDom","Promise","resolve","dispose","undefined","removeAllListeners","finalize","isPlaying","KnownMediaStreamKind","Video","resizeHandler_1","removeEventListener","addEventListener","event","eventArgs","setTimeout","emit","Error"],"mappings":"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","file":"MediaSubscriber.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar events_1 = require(\"events\");\nvar MediaDomUtils_1 = require(\"./MediaUtils/MediaDomUtils\");\nvar MediaConstants_1 = require(\"./MediaConstants\");\nvar MediaTracer_1 = require(\"./MediaUtils/MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSubscriber');\nvar privateEvents;\n(function (privateEvents) {\n privateEvents[\"STREAM_STATE_CHANGE\"] = \"STREAM_STATE_CHANGE\";\n privateEvents[\"SUBSCRIBER_DISPOSE\"] = \"SUBSCRIBER_DISPOSE\";\n})(privateEvents || (privateEvents = {}));\nvar TechseeMediaSubscriber = /** @class */ (function () {\n function TechseeMediaSubscriber(subscriberParams) {\n this._isDisposed = false;\n this._isPlaying = false;\n this._hasVideo = false;\n this._hasAudio = false;\n this._mediaElement = null;\n trace.info('Subscriber created');\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n this._emitter = new events_1.EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"streamType\", {\n //#region IMediaSubscriber\n get: function () {\n return this._subscriberParams.streamType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"container\", {\n get: function () {\n return this._subscriberParams.container;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isPlaying\", {\n get: function () {\n return this._isPlaying;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isSoundMuted\", {\n get: function () {\n if (!this._mediaElement) {\n return true;\n }\n return this._mediaElement.muted;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasAudio\", {\n get: function () {\n return this._hasAudio;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasVideo\", {\n get: function () {\n return this._hasVideo;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"mediaElement\", {\n get: function () {\n return this._mediaElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoWidth\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoHeight\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderWidth\", {\n get: function () {\n return this.container.offsetWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderHeight\", {\n get: function () {\n return this.container.offsetHeight;\n },\n enumerable: true,\n configurable: true\n });\n TechseeMediaSubscriber.prototype.muteSound = function (isMuted) {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n };\n TechseeMediaSubscriber.prototype.onStateChanged = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n };\n TechseeMediaSubscriber.prototype.onDispose = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n };\n //#endregion\n //#region Non Interface Methods\n TechseeMediaSubscriber.prototype.renderStream = function (stream) {\n var _this = this;\n this.throwIfDisposed();\n MediaDomUtils_1.renderMediaStreamToVideoEl(this.container, stream.mediaStream)\n .then(function (videoEl) {\n _this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n _this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n _this.setPlayingState(videoEl, stream.streamKind);\n })\n .catch(function (error) {\n trace.warn('Error while rendering stream on video element', error);\n });\n };\n TechseeMediaSubscriber.prototype.stopRendering = function () {\n var _this = this;\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return MediaDomUtils_1.removeVideoElementFromDom(this._mediaElement)\n .then(function () {\n _this.setPlayingState();\n });\n }\n return Promise.resolve();\n };\n TechseeMediaSubscriber.prototype.dispose = function () {\n if (this._isDisposed) {\n return;\n }\n this.stopRendering().catch(function () { return undefined; });\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n };\n //#endregion\n TechseeMediaSubscriber.prototype.setPlayingState = function (mediaElement, streamKind) {\n var _this = this;\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n var finalize = function () {\n _this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(\"Video element \" + (streamKind || '') + \" \" + (_this.isPlaying ? 'play' : 'stop') + \" success\");\n };\n if (this._mediaElement && streamKind === MediaConstants_1.KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n var resizeHandler_1 = function () {\n finalize();\n _this._mediaElement && _this._mediaElement.removeEventListener('resize', resizeHandler_1);\n _this._mediaElement && _this._mediaElement.addEventListener('resize', _this.videoResizeHandler);\n };\n //Todo actually, from here we can know on dimensions changes\n this._mediaElement.addEventListener('resize', resizeHandler_1, false);\n }\n else {\n this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n finalize();\n }\n }\n else {\n finalize();\n }\n };\n TechseeMediaSubscriber.prototype.videoResizeHandler = function () {\n trace.info(\"Video resize, new size = w: \" + this.videoWidth + \" h:\" + this.videoHeight);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n };\n TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n TechseeMediaSubscriber.prototype.throwIfDisposed = function () {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n };\n return TechseeMediaSubscriber;\n}());\nexports.TechseeMediaSubscriber = TechseeMediaSubscriber;\n\n//# sourceMappingURL=MediaSubscriber.js.map\n","import {EventEmitter} from 'events';\nimport {Nullable} from '@techsee/techsee-common';\nimport {IMediaSubscriber, MediaSubscriberParams} from './MediaContracts';\nimport {TechseeMediaStream} from './TechseeMediaStream';\nimport {removeVideoElementFromDom, renderMediaStreamToVideoEl} from './MediaUtils/MediaDomUtils';\nimport {KnownMediaStream, KnownMediaStreamKind} from './MediaConstants';\n\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('MediaSubscriber');\n\nenum privateEvents {\n STREAM_STATE_CHANGE = 'STREAM_STATE_CHANGE',\n SUBSCRIBER_DISPOSE = 'SUBSCRIBER_DISPOSE'\n}\n\nexport class TechseeMediaSubscriber implements IMediaSubscriber {\n private _emitter: EventEmitter;\n private _isDisposed: boolean = false;\n private _isPlaying: boolean = false;\n private _hasVideo: boolean = false;\n private _hasAudio: boolean = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n\n private readonly _subscriberParams: MediaSubscriberParams;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n trace.info('Subscriber created');\n\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n\n this._emitter = new EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n\n //#region IMediaSubscriber\n\n get streamType(): KnownMediaStream {\n return this._subscriberParams.streamType;\n }\n\n get container(): HTMLDivElement {\n return this._subscriberParams.container;\n }\n\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n get isSoundMuted(): boolean {\n if (!this._mediaElement) {\n return true;\n }\n\n return this._mediaElement.muted;\n }\n\n get hasAudio(): boolean {\n return this._hasAudio;\n }\n\n get hasVideo(): boolean {\n return this._hasVideo;\n }\n\n get mediaElement(): Nullable<HTMLVideoElement> {\n return this._mediaElement;\n }\n\n get videoWidth(): number {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n }\n\n get videoHeight(): number {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n }\n\n get renderWidth(): number {\n return this.container.offsetWidth;\n }\n\n get renderHeight(): number {\n return this.container.offsetHeight;\n }\n\n muteSound(isMuted: boolean): void {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n }\n\n onStateChanged(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n }\n\n onDispose(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n }\n\n //#endregion\n\n //#region Non Interface Methods\n\n renderStream(stream: TechseeMediaStream): void {\n this.throwIfDisposed();\n\n renderMediaStreamToVideoEl(this.container, stream.mediaStream)\n .then((videoEl) => {\n this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n\n this.setPlayingState(videoEl, stream.streamKind);\n })\n .catch((error) => {\n trace.warn('Error while rendering stream on video element', error);\n });\n }\n\n stopRendering(): Promise<void> {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return removeVideoElementFromDom(this._mediaElement)\n .then(() => {\n this.setPlayingState();\n });\n }\n\n return Promise.resolve();\n }\n\n dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this.stopRendering().catch(() => undefined);\n\n\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n }\n\n //#endregion\n\n private setPlayingState(mediaElement?: HTMLVideoElement, streamKind?: KnownMediaStreamKind): void {\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n\n const finalize = (): void => {\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(`Video element ${streamKind || ''} ${this.isPlaying ? 'play' : 'stop'} success`);\n };\n\n if (this._mediaElement && streamKind === KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n const resizeHandler = (): void => {\n finalize();\n this._mediaElement && this._mediaElement.removeEventListener('resize', resizeHandler);\n this._mediaElement && this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n };\n\n //Todo actually, from here we can know on dimensions changes\n this._mediaElement.addEventListener('resize', resizeHandler, false);\n } else {\n this._mediaElement.addEventListener('resize', this.videoResizeHandler);\n finalize();\n }\n } else {\n finalize();\n }\n }\n\n private videoResizeHandler(): void {\n trace.info(`Video resize, new size = w: ${this.videoWidth} h:${this.videoHeight}`);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n\n private emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n private throwIfDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techsee/techsee-media-service",
3
- "version": "0.6.1-alpha.7",
3
+ "version": "0.6.1-alpha.8",
4
4
  "description": "Techsee Media Service Client",
5
5
  "author": "TechSee - Alex Danilov",
6
6
  "main": "lib/index.js",