Skip to content

Commit ff8f6fb

Browse files
committed
feat: support hls playback
1 parent a184d3a commit ff8f6fb

12 files changed

Lines changed: 133 additions & 318 deletions

File tree

dist/PlayCtrlWasm/playCtrl3/hasWorker/HasSIMD/Decoder.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/PlayCtrlWasm/playCtrl3/hasWorker/NoSIMD/Decoder.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/PlayCtrlWasm/playCtrl3/noWorker/Decoder.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/adapter.esm.js

Lines changed: 10 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/adapter.js

Lines changed: 10 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/adapter.umd.js

Lines changed: 14 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.esm.js

Lines changed: 10 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js

Lines changed: 10 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.umd.js

Lines changed: 11 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/types/adapter.d.ts

Lines changed: 33 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as I18n from '@ezuikit/utils-i18n';
55
import I18n__default from '@ezuikit/utils-i18n';
66
import Service, { DeviceCapacityRes, DeviceInfoRes } from '@ezuikit/utils-service';
77
import { EzopenURL } from '@ezuikit/utils-tools';
8+
import { PlayerPluginRecord } from '@ezuikit/player-plugin-record';
89
import EventEmitter from 'eventemitter3';
910

1011
/**
@@ -52,7 +53,7 @@ interface PlayerOptions {
5253
*/
5354
streamInfoCBType: 0 | 1;
5455
}
55-
interface IResult$1<T> {
56+
interface IResult<T> {
5657
data?: T;
5758
code?: number;
5859
msg?: string;
@@ -108,127 +109,6 @@ interface IBufferItem {
108109
duration: number;
109110
}
110111

111-
interface IResult<T> {
112-
data?: T;
113-
code?: number;
114-
msg?: string;
115-
}
116-
/**
117-
* 播放器标准接口
118-
*/
119-
interface PlayerInterface extends EventEmitter {
120-
playing: boolean;
121-
volume: number;
122-
playbackRate: number;
123-
deviceCapacity: Record<string, any>;
124-
i18n: any;
125-
logger: any;
126-
event: EventEmitter;
127-
wasmplayer: any;
128-
_wss_info: any;
129-
_options: any;
130-
/**
131-
* 播放
132-
* @param options
133-
* @returns {Promise}
134-
*/
135-
play: (options?: any) => Promise<unknown>;
136-
/**
137-
* 暂停播放
138-
* @returns
139-
*/
140-
pause: (bool?: boolean) => Promise<unknown>;
141-
/**
142-
* 销毁并断流
143-
* @returns
144-
*/
145-
destroy: () => Promise<unknown>;
146-
/**
147-
* 截图
148-
* @param {string} name 文件名 默认时间戳(new Date().getTime())
149-
* @param {"png" | "jpeg"} fmt 图片格式
150-
* @param {"base64"} type 文件格式 默认base64
151-
* @param {boolean} download 是否直接下载 默认不直接下载
152-
* @returns 返回base64字符
153-
*/
154-
snapshot: (name?: string, fmt?: 'jpeg', type?: 'base64', download?: boolean) => Promise<IResult<{
155-
fileName?: string;
156-
base64?: string;
157-
} | null>>;
158-
/**
159-
* 开始录制视频
160-
* @param {string} name 文件名 默认时间戳(new Date().getTime())
161-
* @param {"mp4"} fmt 图片格式 默认mp4
162-
* @returns
163-
*/
164-
startRecord?: (name?: string, fmt?: 'mp4') => Promise<any>;
165-
/**
166-
* 停止录制
167-
* @returns
168-
*/
169-
stopRecord?: () => Promise<any>;
170-
/**
171-
* 全屏
172-
* @returns
173-
*/
174-
fullScreen: () => Promise<void>;
175-
/**
176-
* 退出全屏
177-
* @returns
178-
*/
179-
exitScreen: () => Promise<void>;
180-
/**
181-
* 设置画布/视频的尺寸 不设置 默认使用容器的高宽(充满容器)
182-
* @param {number=} width 画布的宽度
183-
* @param {number=} height 画布的高度
184-
* @returns
185-
*/
186-
resize: (width?: number, height?: number) => Promise<{
187-
width: number;
188-
height: number;
189-
}>;
190-
/**
191-
* 设置音量
192-
* @param volume 音量 [0-1], 0:表示静音
193-
* @returns {void}
194-
*/
195-
setVolume: (volume: number) => void;
196-
/**
197-
* 设置封面
198-
* @param url
199-
* @returns
200-
*/
201-
setPoster?: (postUrl: string) => void;
202-
/**
203-
* 设置播放速度
204-
* @param rate
205-
* @returns
206-
*/
207-
setPlaybackRate?: (rate: number) => void;
208-
/**
209-
* 当前版本号
210-
* @returns
211-
*/
212-
getVersion: () => object;
213-
/**
214-
* 设置日志打印的级别 INFO | LOG | WARN | ERROR
215-
*
216-
*
217-
* @param {string} level 日志级别 一次从大到小 3 -> 0 (为了更好的扩展)
218-
* @returns
219-
*/
220-
setDebug?: (level: 'INFO' | 'LOG' | 'WARN' | 'ERROR') => void;
221-
}
222-
223-
interface PlayerPlugin {
224-
name: string;
225-
init?: (player?: PlayerInterface) => void;
226-
beforeExec?: (player?: PlayerInterface) => boolean | Promise<boolean>;
227-
exec: (player?: PlayerInterface) => void;
228-
afterExec?: (player?: PlayerInterface) => void;
229-
destroy?: (player?: PlayerInterface) => void;
230-
}
231-
232112
declare class ESCanvas {
233113
constructor(szCanvasId: any);
234114
m_iCanvasWidth: any;
@@ -582,32 +462,32 @@ interface WasmDecoderStatue {
582462
bSupHardOrSoft: boolean;
583463
bSupHardDecAVC: boolean;
584464
bSupHardDecHEVC: boolean;
585-
cmd: 'loaded' | 'onebyone';
465+
cmd: "loaded" | "onebyone";
586466
errorCode: number;
587467
status: any;
588468
}
589469

590470
type Zoom3DCallback = (oRECT?: any) => void;
591471

592-
type SnapshotFmt = 'jpeg';
472+
type SnapshotFmt = "jpeg";
593473

594474
/**
595475
* @description 插件管理系统
596476
*/
597477
declare class PluginManager {
598478
context: EZopenPlayer;
599-
plugins: Map<string, PlayerPlugin>;
479+
plugins: Map<string, PlayerPluginRecord>;
600480
constructor(player: EZopenPlayer);
601481
/**
602482
* @description 注册插件做个插件
603483
* @param plugins
604484
*/
605-
usePlugins(plugins: PlayerPlugin[]): Promise<void>;
485+
usePlugins(plugins: PlayerPluginRecord[]): Promise<void>;
606486
/**
607487
* @description 注册插件
608488
* @param plugins
609489
*/
610-
use(plugin: PlayerPlugin): Promise<void>;
490+
use(plugin: PlayerPluginRecord): Promise<void>;
611491
/**
612492
* @description 通过name销毁指定插件
613493
* @param {string} name 插件名
@@ -764,7 +644,7 @@ interface EZopenPlayerOptions extends PlayerOptions {
764644
/** 全屏节点 */
765645
fullScreenEle?: HTMLElement;
766646
/** 指定解码类型, v1 软解 v3 包括硬解和多线程 */
767-
decoderType?: 'auto' | 'v1' | 'v3';
647+
decoderType?: "auto" | "v1" | "v3";
768648
/** 下载当前原始视频流,用于调试,不能动态设置,结束或销毁播放时自动保存成文件并下载 */
769649
debugDownloadData?: boolean;
770650
extraParams?: {
@@ -781,7 +661,7 @@ interface EZopenPlayerOptions extends PlayerOptions {
781661
isLive?: boolean;
782662
}
783663
declare class EZopenPlayer extends EventEmitter {
784-
_options: EZopenPlayerOptions;
664+
_options: EZopenPlayerOptions | undefined;
785665
static EVENT_TYPE: {
786666
initializing: string;
787667
loadstart: string;
@@ -861,7 +741,6 @@ declare class EZopenPlayer extends EventEmitter {
861741
*/
862742
event: any;
863743
isHls: boolean;
864-
isLive: boolean;
865744
initializing: boolean;
866745
loading: boolean;
867746
/** 播放速度 */
@@ -884,6 +763,10 @@ declare class EZopenPlayer extends EventEmitter {
884763
$container: HTMLElement;
885764
esCanvas: ESCanvas;
886765
fECCorrect: FECCorrect;
766+
/** 当前播放时间,单位秒 */
767+
currentTime: number;
768+
/** 视频总时长,单位秒 */
769+
duration: number;
887770
_oStreamClient: StreamClient;
888771
_aHead: Uint8Array;
889772
/** @private */
@@ -926,7 +809,7 @@ declare class EZopenPlayer extends EventEmitter {
926809
* @param options
927810
* @returns
928811
*/
929-
play(options?: Partial<Pick<EZopenPlayerOptions, 'url' | 'accessToken'>>): Promise<unknown>;
812+
play(options?: Partial<Pick<EZopenPlayerOptions, "url" | "accessToken">>): Promise<unknown>;
930813
_wss_play(szUrl: string, oParams?: {
931814
playURL: string;
932815
}): Promise<unknown>;
@@ -961,7 +844,7 @@ declare class EZopenPlayer extends EventEmitter {
961844
* @param {boolean} canvas 是否使用 canvas
962845
* @returns 返回base64字符
963846
*/
964-
snapshot(name?: string, fmt?: SnapshotFmt, type?: 'base64', download?: boolean, canvas?: boolean): Promise<IResult$1<{
847+
snapshot(name?: string, fmt?: SnapshotFmt, type?: "base64", download?: boolean, canvas?: boolean): Promise<IResult<{
965848
fileName?: string | undefined;
966849
base64?: string | undefined;
967850
} | null>>;
@@ -972,7 +855,7 @@ declare class EZopenPlayer extends EventEmitter {
972855
* @param {boolean} download 是否直接下载 默认不直接下载 false
973856
* @returns 返回base64字符
974857
*/
975-
snapshotByCanvas(name?: string, fmt?: SnapshotFmt, download?: boolean): Promise<IResult$1<{
858+
snapshotByCanvas(name?: string, fmt?: SnapshotFmt, download?: boolean): Promise<IResult<{
976859
fileName?: string | undefined;
977860
base64?: string | undefined;
978861
} | null>>;
@@ -1008,7 +891,7 @@ declare class EZopenPlayer extends EventEmitter {
1008891
* @description 插件管理
1009892
* @param plugin 插件
1010893
*/
1011-
use(plugin: PlayerPlugin): void;
894+
use(plugin: typeof PlayerPluginRecord): void;
1012895
/**
1013896
*
1014897
* @param {Object} type 矫正类型 参考 src/ezopen/constants.js
@@ -1067,7 +950,7 @@ declare class EZopenPlayer extends EventEmitter {
1067950
*/
1068951
disable3DZoom(): number;
1069952
/**
1070-
* @description 获取当前osd, 当获取失败返回 0
953+
* @description 获取当前osd (时间戳), 当获取失败返回 0
1071954
* @returns {number}
1072955
*/
1073956
getOSDTime(): number;
@@ -1078,6 +961,7 @@ declare class EZopenPlayer extends EventEmitter {
1078961
getFrameInfo(): IFrameInfo;
1079962
/**
1080963
* @description 设置播放视频区域 (仅视频不是画布)
964+
* @deprecated
1081965
* @param {number} left 视频展示区域 x轴开始位置
1082966
* @param {number} right 视频展示区域 x轴结束位置
1083967
* @param {number} top 视频展示区域 y轴开始位置
@@ -1097,7 +981,7 @@ declare class EZopenPlayer extends EventEmitter {
1097981
*
1098982
* @returns
1099983
*/
1100-
getOptions(): EZopenPlayerOptions;
984+
getOptions(): EZopenPlayerOptions | undefined;
1101985
/**
1102986
* @description 切换调试日志等级
1103987
* @param {LoggerOptions} loggerOptions 日志等级
@@ -1148,6 +1032,15 @@ declare class EZopenPlayer extends EventEmitter {
11481032
*/
11491033
setStreamInfoCallBackType(type: 0 | 1, cb?: StreamInfoCallBackFn): void;
11501034
_addEventListener(): void;
1035+
/**
1036+
* 是否是 hls 直播, 优先使用用户传的值, 如果你没有传值(boolean),则根据 m3u8 的解析结果进行判断
1037+
* @returns {boolean}
1038+
*/
1039+
get isLive(): boolean;
1040+
/**
1041+
* 片段列表
1042+
*/
1043+
get segments(): any;
11511044
}
11521045

11531046
declare class StreamClient {
@@ -1203,6 +1096,7 @@ declare class StreamClient {
12031096
* @description 客户端销毁
12041097
*/
12051098
destroy(): void;
1099+
advance(): any;
12061100
}
12071101

12081102
declare class JSPlugin {
@@ -1219,11 +1113,11 @@ declare class JSPlugin {
12191113
g_port: number;
12201114
get bPlay(): boolean;
12211115
get iRate(): number;
1222-
set playURL(arg: string);
1116+
set playURL(url: string);
12231117
get playURL(): string;
1224-
set FECSplitIds(arg: string | undefined);
1118+
set FECSplitIds(ids: string | undefined);
12251119
get FECSplitIds(): string | undefined;
1226-
set correctType(arg: any);
1120+
set correctType(type: any);
12271121
get correctType(): any;
12281122
_initEventCallback(): void;
12291123
JSPlayM4_SetDecodeEngine(useHard: any): void;

0 commit comments

Comments
 (0)