cloudhub-playback-sdk
Version:
CloudHubPlaybackSDK
186 lines (185 loc) • 6.83 kB
JavaScript
"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;