playable
Version:
Video player based on HTML5Video
124 lines • 6.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChromecastEvents = void 0;
var tslib_1 = require("tslib");
var chromecast_output_1 = (0, tslib_1.__importDefault)(require("../playback-engine/output/chromecast/chromecast-output"));
var script_injector_1 = (0, tslib_1.__importDefault)(require("../../utils/script-injector"));
var FRAMEWORK_LINK = 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1';
var ChromecastEvents;
(function (ChromecastEvents) {
ChromecastEvents["CHROMECAST_INITED"] = "ui-events/chromecast-inited";
ChromecastEvents["CHROMECAST_CASTS_STARTED"] = "ui-events/chromecast-started";
ChromecastEvents["CHROMECAST_CASTS_RESUMED"] = "ui-events/chromecast-resumed";
ChromecastEvents["CHROMECAST_CASTS_STOPED"] = "ui-events/chromecast-stoped";
ChromecastEvents["CHROMECAST_NOT_CONNECTED"] = "ui-events/chromecast-not-connected";
ChromecastEvents["CHROMECAST_CONNECTING"] = "ui-events/chromecast-connecting";
ChromecastEvents["CHROMECAST_CONNECTED"] = "ui-events/chromecast-connected";
ChromecastEvents["CHROMECAST_NO_DEVICES_AVAILABLE"] = "ui-events/chromecast-not-available";
})(ChromecastEvents = exports.ChromecastEvents || (exports.ChromecastEvents = {}));
var ChromecastManager = /** @class */ (function () {
function ChromecastManager(_a) {
var engine = _a.engine, eventEmitter = _a.eventEmitter;
this._engine = engine;
this._eventEmitter = eventEmitter;
this._initCastContext = this._initCastContext.bind(this);
this._onCastStateChange = this._onCastStateChange.bind(this);
this._onSessionStateChange = this._onSessionStateChange.bind(this);
this._insertCastCallback();
}
ChromecastManager.prototype._insertCastCallback = function () {
if (ChromecastManager._chromecastInited) {
return;
}
ChromecastManager._chromecastInited = true;
window.__onGCastApiAvailable = this._initCastContext;
(0, script_injector_1.default)(FRAMEWORK_LINK);
};
ChromecastManager.prototype._initCastContext = function (isAvailable) {
if (isAvailable && ChromecastManager._isCastApiInited) {
var cast_1 = window.cast;
var chrome_1 = window.chrome;
this._context = cast_1.framework.CastContext.getInstance();
this._context.setOptions({
receiverApplicationId: chrome_1.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,
autoJoinPolicy: chrome_1.cast.AutoJoinPolicy.ORIGIN_SCOPED,
});
this._bindToContextEvents();
this._eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_INITED);
}
};
Object.defineProperty(ChromecastManager, "_isCastApiInited", {
get: function () {
var cast = window.cast;
var chrome = window.chrome;
return Boolean(cast && cast.framework && chrome && chrome.cast);
},
enumerable: false,
configurable: true
});
ChromecastManager.prototype._onCastStateChange = function (event) {
switch (event.castState) {
case cast.framework.CastState.NOT_CONNECTED:
this._eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_NOT_CONNECTED);
break;
case cast.framework.CastState.CONNECTING:
this._eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_CONNECTING);
break;
case cast.framework.CastState.CONNECTED:
this._eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_CONNECTED);
break;
case cast.framework.CastState.NO_DEVICES_AVAILABLE:
this._eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_NO_DEVICES_AVAILABLE);
break;
default:
break;
}
};
ChromecastManager.prototype._onSessionStateChange = function (event) {
var context = this._context;
var engine = this._engine;
var eventEmitter = this._eventEmitter;
var cast = window.cast;
var startTime;
switch (event.sessionState) {
case cast.framework.SessionState.SESSION_STARTED:
startTime = engine.getCurrentTime();
engine.changeOutput(new chromecast_output_1.default(eventEmitter), function () {
engine.seekTo(startTime);
eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_CASTS_STARTED);
});
break;
case cast.framework.SessionState.SESSION_RESUMED: // start cast to chromecast -> reload page -> SESSION_RESUMED
startTime = context
.getCurrentSession()
.getMediaSession()
.getEstimatedTime();
engine.changeOutput(new chromecast_output_1.default(eventEmitter), function () {
engine.seekTo(startTime);
eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_CASTS_RESUMED);
});
break;
case cast.framework.SessionState.SESSION_ENDED:
engine.resetOutput();
eventEmitter.emitAsync(ChromecastEvents.CHROMECAST_CASTS_STOPED);
break;
default:
break;
}
};
ChromecastManager.prototype._bindToContextEvents = function () {
var context = this._context;
context.addEventListener(window.cast.framework.CastContextEventType.CAST_STATE_CHANGED, this._onCastStateChange);
context.addEventListener(window.cast.framework.CastContextEventType.SESSION_STATE_CHANGED, this._onSessionStateChange);
};
ChromecastManager.prototype.destroy = function () {
var context = this._context;
context.removeEventListener(cast.framework.CastContextEventType.CAST_STATE_CHANGED, this._onCastStateChange);
context.addEventListener(cast.framework.CastContextEventType.SESSION_STATE_CHANGED, this._onSessionStateChange);
};
ChromecastManager.moduleName = 'chromecastManager';
ChromecastManager.dependencies = ['eventEmitter', 'engine', 'rootContainer'];
return ChromecastManager;
}());
exports.default = ChromecastManager;
//# sourceMappingURL=chromecast-manager.js.map