@jxstjh/jhvideo
Version:
HTML5 jhvideo base on MPEG2-TS Stream Player
73 lines (71 loc) • 2.61 kB
text/typescript
import JPlayer from "./jplayer";
import { ControllerOpt, createDefaultControllerOpt, defaultControllerOpt, Streamtype } from "./model/playerModel";
import { createPtzControllerDom } from "./utils/controlDom";
import nipplejs from './utils/nipplejs';
import { getJoysticPositionFlag } from "./utils/ptzController";
class JPtzController {
private _plyer: JPlayer;
private toolbox_ele: HTMLDivElement;
private joystick_ele: HTMLDivElement;
private joystickIns: any;
constructor(playerIns: JPlayer, public el: HTMLElement, public controllerOpt: ControllerOpt) {
this.controllerOpt = { ...(createDefaultControllerOpt() as ControllerOpt), ...controllerOpt }
this._plyer = playerIns;
this.bindPlayer();
}
bindPlayer() {
if (this._plyer) {
this._plyer.on('inited', (vid, playerIns) => {
const { isptz, streamtype } = playerIns && playerIns.streamOpt;
this.initDom(isptz, streamtype)
})
}
}
emptyDom() {
const c = this.el.childNodes;
c.forEach(t => {
t.parentNode.removeChild(t);
})
}
initDom(isPtz, streamtype: Streamtype) {
const { hideTools } = this.controllerOpt;
this.emptyDom();
const [box, toolbox, joystick] = createPtzControllerDom(this._plyer, hideTools, isPtz, streamtype)
this.el.appendChild(box)
this.toolbox_ele = toolbox
this.joystick_ele = joystick
if (streamtype === 'live' && isPtz) {
this.initJoystic()
}
}
initJoystic() {
if (this.joystickIns) {
this.destroyJoystick()
}
const { clientHeight, clientWidth } = this.el;
const size = Math.min(clientHeight, clientWidth) * 0.8
const opt = {
zone: this.joystick_ele,
mode: 'static',
position: { left: '50%', top: '50%' },
jvideo: true,
size: size
}
this.joystickIns = nipplejs.create(opt)
this.joystickIns.on('dir:up dir:down dir:left dir:right end',
(evt, data) => {
if (evt.type === 'end') {
setTimeout(() => {
this._plyer.sendPtzCmd(-1)
}, 26)
} else {
const f = getJoysticPositionFlag(evt.type)
this._plyer.sendPtzCmd(f)
}
}
)
}
destroyJoystick() {
}
}
export default JPtzController;