UNPKG

cloudhub-playback-sdk

Version:

CloudHubPlaybackSDK

186 lines (185 loc) 6.83 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Logger_1 = __importDefault(require("../Logger")); const global_1 = __importDefault(require("../global")); const utils_1 = __importDefault(require("../helper/utils")); class UserController { constructor(jsonString) { this.streams = { video: {}, file: {}, media: {}, screen: {}, multiAudio: {}, }; for (let key in jsonString) { // @ts-ignore this[key] = jsonString[key]; } } getStreamType(streamId) { Logger_1.default.info('getStreamType', streamId, this.streams); if (!streamId) { return false; } for (let itemType in this.streams) { if (this.streams[itemType] && this.streams[itemType][streamId] && utils_1.default.numToStr(this.streams[itemType][streamId].streamId) === utils_1.default.numToStr(streamId)) { return itemType; } } } getUserIdByStreamId(streamId) { for (let itemType in this.streams) { if (this.streams[itemType] && this.streams[itemType][streamId] && utils_1.default.numToStr(this.streams[itemType][streamId].streamId) === utils_1.default.numToStr(streamId)) { return this.id; } } } getStreamByStreamId(streamId) { for (let itemType in this.streams) { if (this.streams[itemType] && this.streams[itemType][streamId] && utils_1.default.numToStr(this.streams[itemType][streamId].streamId) === utils_1.default.numToStr(streamId)) { return this.streams[itemType][streamId]; } } } setStream(type, property, onSuccess) { if (type) { const { filename, streamId } = property; this.streams[type][streamId] = Object.assign({ url: `${global_1.default.config.videoRootUrl}/${filename}` }, property); if (utils_1.default.isFunction(onSuccess)) { onSuccess && onSuccess(); } } } getStreamByType(type) { if (!type) { return false; } for (let itemStreamId in this.streams[type]) { return this.streams[type][itemStreamId] || {}; } } delStream(streamId, onSuccess) { console.error('delStream', streamId, this.streams); if (!streamId) { return false; } for (let itemType in this.streams) { for (let itemStreamId in this.streams[itemType]) { if (itemStreamId[streamId] === utils_1.default.numToStr(streamId)) { console.error('delStream', utils_1.default.deepCopy(this.streams[itemType][streamId])); delete this.streams[itemType][streamId]; } } } if (utils_1.default.isFunction(onSuccess)) { onSuccess && onSuccess(); } } createVideo(type, view, streamId, uid) { Logger_1.default.info('createVideo', streamId, view); if (!type || !view) { return false; } let url; if (streamId) { url = this.getStreamByStreamId(streamId).url; const streamType = this.getStreamType(streamId); if (streamType === 'multiAudio') { this.playMultiAudio(this.id, this.streams.multiAudio[streamId].url); return; } } else { type = utils_1.default.getMediaType(type); url = this.getStreamByType(type).url; } let videoEle = view.querySelector('video'); if (!videoEle) { videoEle = document.createElement('video'); videoEle.id = `${this.id}-${streamId}`; videoEle.style.width = "100%"; videoEle.style.height = "100%"; } videoEle.src = url; videoEle.autoplay = true; videoEle.controls = global_1.default.config.debug; view.appendChild(videoEle); // videoEle.addEventListener('ended', () => this.removeVideo(type)) } //播放多流音频 playMultiAudio(id, url) { Logger_1.default.info('playMultiAudio', id, url); if (!id || !url) { return; } const audioEleId = `audioplayback-${id}`; const hasAudioEle = document.getElementById(audioEleId); if (hasAudioEle) { // @ts-ignore hasAudioEle.play(); } else { const audioEle = document.createElement('audio'); document.body.appendChild(audioEle); audioEle.id = audioEleId; audioEle.setAttribute('src', url); audioEle.play(); } } //移除多流语音 removeMultiAudio(id) { Logger_1.default.info('removeMultiAudio', id); if (!id) { return; } const audioEle = document.getElementById(`audioplayback-${id}`); audioEle && audioEle.remove(); } //删除当前的 video 标签 removeVideo(type, onCallback, streamId) { Logger_1.default.info('removeVideo', type, streamId); let videoEle; if (streamId) { videoEle = document.getElementById(`${this.id}-${streamId}`); const streamType = this.getStreamType(streamId); if (streamType === 'multiAudio') { this.removeMultiAudio(this.id); return; } } else { type = utils_1.default.getMediaType(type); videoEle = document.getElementById(`${this.id}-${type}`); } if (videoEle) { const parentDom = videoEle.parentElement; parentDom.removeChild(videoEle); } onCallback && onCallback(); } //找到当前用户下正在播放的视频 设置播放进度 setAllVideoTime(actionTs) { for (let itemType in this.streams) { for (let itemStreamId in this.streams[itemType]) { const streamItem = this.streams[itemType][itemStreamId]; if (streamItem) { this.setVideoTime(actionTs, streamItem); } } } } //设置单个视频的播放进度 setVideoTime(actionTs, stream) { const { streamId, publishTime } = stream; const videoEle = document.getElementById(`${this.id}-${streamId}`); const videoNextTime = (actionTs - publishTime) / 1000; if (videoEle && videoNextTime >= 0) { videoEle.currentTime = videoNextTime; } } } exports.default = UserController;