@jxstjh/jhvideo
Version:
HTML5 jhvideo base on MPEG2-TS Stream Player
282 lines (281 loc) • 7.96 kB
TypeScript
import { PlayerMode, StreamOpt, StreamSpeed, StyleSize } from "./model/playerModel";
import GlobalClient from "./globalClient.js";
interface AudioFormatInfo {
codec: any;
initCodec: any;
mediaInfoCodec: any;
originalCodec: any;
sampleRate: any;
channelCount: any;
mimeType: any;
playerType: 'video' | 'webgl';
mediaElement: {
muted: boolean;
paused: boolean;
readyState: number;
currentTime: number;
buffered: Array<{
start: number;
end: number;
}>;
} | null;
mseAudio: {
sourceBufferReady: boolean;
sourceBufferUpdating: boolean;
pendingSegments: number;
buffered: Array<{
start: number;
end: number;
}>;
mediaSourceReadyState: any;
segmentStats: any;
demuxStats: any;
} | null;
}
export declare class JPlayerMediaRecorder {
mediaElement: unknown;
private recorder;
emitter: any;
private timer$;
private $stop;
private subscriptiontimer;
constructor(mediaElement: unknown, time: any);
on(event: any, listener: any): void;
off(event: any, listener: any): void;
start(): void;
stop(): void;
destroy(): void;
}
export declare class JPlayer {
el: HTMLElement;
playerMode?: PlayerMode;
static get version(): any;
static isSupported(): any;
private features;
private globalClient;
private nippleIns;
private timelineIns;
private e;
private vid;
private prefixName;
private _rootHammertime;
private vel;
private cel;
private wrapperel;
private joystickele;
private videoWrapperEl;
private streamOpt;
private playUrl;
private streamId;
private contextMenu;
private rectBlock;
private playerIns;
private _lastMediaInfo;
private _currentTime;
private _audioCtrl;
private _videoStream;
private lastDecodedFrame;
private readonly MAX_OPEN_STREAM_RETRY_COUNT;
private recoveryController;
private interactionController?;
_talkCtrl: any;
_vodPlayer: any;
private osdTimeId;
private _canPlayTimer;
private videoRatio;
private playerOnCanPlay;
private _playing;
private _ptzing;
private _ptzLoad;
private _drawing;
private _setting;
private _seeking;
_ptzSpeed: number;
private _isFullScreen;
private _offsetObj;
private _ponitDragClick;
private _begintime;
private _endtime;
private _offsetTime;
private _loading;
private _recording;
private _maxRetryTime;
private _size;
private _timer;
private mediaRecorder;
private $resize;
private $click;
private $dblclick;
private $mouseenter;
private $mouseout;
private $mousemove;
private $mousewheel;
private $contextmenu;
private $mousedown;
private $mouseup;
private _isMouseUp;
private subscriptionWrapList$;
private subscriptionToolbarList$;
private $ptzSubject;
private _liveFlow;
private _OSDTime;
emitter: any;
private zoomScale;
private _sequence;
private _passageRepeat;
private set sequence(value);
get mediaInfo(): any;
/**
* 返回当前实际播放链路中的音频格式。
* mediaInfo 可能不包含 PCM 转码后的音频信息,因此这里同时检查
* MSE 初始化段和 WASM/PCM 播放参数。
*/
get audioInfo(): AudioFormatInfo;
private getAudioFormatInfo;
private logAudioFormatOnUnmute;
get loading(): boolean;
get playerType(): "webgl" | "video";
set playerType(type: "webgl" | "video");
set loading(v: boolean);
set styleSize(size: StyleSize);
get size(): StyleSize;
get seeking(): boolean;
set seeking(v: boolean);
get recording(): boolean;
set recording(v: boolean);
set messageError(err: any);
private set loadingTxt(value);
set error(v: any);
get isFullScreen(): boolean;
set isFullScreen(v: boolean);
get speed(): string;
get durationT(): number;
set playing(v: boolean);
get playing(): boolean;
get ptzing(): boolean;
set ptzing(v: boolean);
private get setting();
private set setting(value);
get zooming(): boolean;
set zooming(v: boolean);
get streamSpeed(): StreamSpeed;
set streamSpeed(v: StreamSpeed);
set offsetTime(v: number);
private get isMobile();
constructor(globalClient: GlobalClient, el: HTMLElement, playerMode?: PlayerMode);
private initHammer;
on(event: any, listener: any): void;
private emitPlayerError;
init(stream?: StreamOpt): Promise<boolean>;
getFeatureList(): any;
initObservables(): void;
unSubscribeObservables(): void;
unSubscribeToolbarObservables(): void;
initDom(): void;
initToolBar(): void;
creatPlayer(): Promise<any>;
private startOsdTimeUpdater;
/**
* @deprecated 仅保留旧调用兼容,请使用播放器内部的 OSD 更新生命周期。
*/
updateOsdTimeThrottle(): void;
switchStream(streamNO: number): void;
requestInfo(url: string): {
url: string;
aisleId: string;
headers: {
"Content-Type": string;
Authorization: string;
};
};
/**
* 归一化重试次数配置。
* 允许下游通过 init 传入,但最终不会超过播放器内部允许的最大值。
*/
private normalizeRetryCount;
sendCmdPtz(cmd: number, operate?: {
index: number;
name?: string;
state?: number;
}): Promise<void>;
sendCmdDirection(direction: number): Promise<any>;
sendCmdPreset({ index, name, state }: {
index: number;
name?: string;
state?: number;
}): Promise<any>;
openStream(stream: StreamOpt): Promise<any>;
private initContextMenu;
private getRightMenu;
private bindEvents;
private unBindEvents;
setFullScreen(value?: boolean): void;
private fullScreenHandler;
private setMCPosition;
private getPtzPosition;
/**
* 3 2 1
* 4 * 0
* 5 6 7
*
*/
private getPtzPositionFlag;
private appendMockCursor;
private showToolbars;
private hideToolbars;
private showSettingMenu;
private hideSettingMenu;
hideContextMenu(): void;
private checkEleSize;
private addPtzClass;
private clearPtzClass;
play(isGive?: boolean): void;
pause(): void;
private resetPlayerStatus;
refresh(streamOpt?: StreamOpt): Promise<boolean>;
toggleVod(streamOpt?: StreamOpt): Promise<boolean>;
private setCanvasSize;
/**
* 绘制矩形框
**/
private switchDraw;
private videoIsOriginalState;
private toggleDraw;
drawBtnHandle(e: any): void;
private setRectRatio;
getShape(): Promise<any>;
setFillRatio(): void;
resetRatio(): void;
ratioAdjust(W?: number, H?: number): void;
record(time?: number): Promise<void>;
/**
* 抓取解复用前的 WebSocket 原始码流,用于音视频诊断。
* 为避免调试数据长期占用内存,单次最长限制为 60 秒。
*/
captureRawStream(seconds?: number): Promise<Blob>;
screenshot(): void;
toggleSetting(): void;
togglePtz(): void;
toggleZoom(): void;
private emptyVideoDom;
private emptyVideoTool;
toggleVodOrigin(e: any): void;
toggleVodOriginForNumber(vod: number): void;
private updateProcess;
private updateTimeLine;
private updateProcessBarView;
private updateProcessClockView;
private getOffetTime;
private getOffetClientTime;
private getOffetX;
initNipple(): void;
sendPtzCmd(cmd: any, param?: number): void;
sendAudio(): any;
destroyNipple(): void;
close(): void;
private teardownPlaybackSession;
clearOsdTimeId(): void;
destroy(): void;
private destroyMediaRecorder;
}
export default JPlayer;