@skyway-sdk/core
Version:
The official Next Generation JavaScript SDK for SkyWay
54 lines • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.detachElement = exports.attachElement = void 0;
const common_1 = require("@skyway-sdk/common");
const errors_1 = require("../../errors");
const util_1 = require("../../util");
const log = new common_1.Logger('packages/core/src/media/stream/base.ts');
/**@internal */
function attachElement(element, track) {
if ((element === null || element === void 0 ? void 0 : element.srcObject) === undefined) {
throw (0, util_1.createError)({
operationName: 'attachElement',
info: errors_1.errors.invalidElement,
payload: { element },
path: log.prefix,
});
}
if (element.srcObject) {
const stream = element.srcObject;
const ended = stream.getTracks().find((t) => t.readyState === 'ended');
if (ended) {
stream.removeTrack(ended);
}
const duplicate = stream.getTracks().find((t) => t.kind === track.kind);
if (duplicate) {
stream.removeTrack(duplicate);
}
stream.addTrack(track);
}
else {
element.srcObject = new MediaStream([track]);
}
}
exports.attachElement = attachElement;
/**@internal */
function detachElement(element, track) {
if ((element === null || element === void 0 ? void 0 : element.srcObject) === undefined) {
throw (0, util_1.createError)({
operationName: 'attachElement',
info: errors_1.errors.invalidElement,
payload: { element },
path: log.prefix,
});
}
const stream = element.srcObject;
if (stream.getTracks().length > 0) {
stream.removeTrack(track);
}
if (stream.getTracks().length === 0) {
element.srcObject = null;
}
}
exports.detachElement = detachElement;
//# sourceMappingURL=base.js.map