HOOKS 接入

H5Player 基于 webpack/tapable 实现了播放过程的钩子函数,为接入方提供了在播放过程的介入可行性

1. 接口汇总

名称 触发事件 回调参数
afterPlayerInit 播放器初始化完毕触发 (player, playConfig) 播放器实例、播放配置参数
onChannelRender 通道渲染 AI 参数回调 (param: Frame['param'], renderer: PlayRender) 帧数据 AI 参数,渲染 dom 节点
afterLoaded 成功获取到流数据连接 (player, eventData) 播放器实例、返回的链接数据
afterReady 播放就绪事件,用于用户调用播放 (player, eventData) 播放器实例、返回的播放状态数据
beforePlay 用户调用触发 play (player, eventData) 播放器实例、下发播放的数据
afterPlay 渲染器开始播放,状态机修改为 playing 状态 (player, eventData) 播放器实例、下发播放的数据
beforePause 用户调用触发 pause (player, eventData) 播放器实例、下发播放的数据
afterPause 渲染器暂停播放,状态机修改为 paused 状态 (player, eventData) 播放器实例、回调的暂停数据
beforeStop 用户调用触发 stop (player, eventData) 播放器实例、下发播放的数据
afterStop 渲染器停止播放,状态机修改为 stopped 状态 (player, eventData) 播放器实例、回调停止的数据
beforeSeek 用户调用触发 seek,状态为 seeking 状态 (player, eventData) 播放器实例、下发播放的数据
afterSeek seek 成功,状态机修改为 playing 状态 (player, eventData) 播放器实例、回调的 seek 的数据
beforeDestroy 用户调用触发 destroy (player, eventData) 播放器实例、下发 destroy 的数据
onError 错误回调事件 (errorData, player) 标准的 errorData,播放器实例
onPlayEnded 自动播放结束 (player, eventData) 播放器实例、结束的通道信息数据
onLoading 用于回调 loading 时的百分比信息和网速信息,直通和回放通用。 (list, done) 播放器通道状态信息、是否加载数据完毕标志
loadingTimeout 用于判断缓冲超时 (20s)。超时时长和 seek 超时时长保持一致。 (list)
startReconnect 断线后,开始重连的 hook. (player, eventData) 播放器实例、重连信息
reconnectSuccess 断线后,重连成功的 hook. (player, eventData) 播放器实例、重连信息
onVideoPlaceholder 回放通道播放状态变更。与播放器状态需要区分,播放状态是指在播放过程中,通道是有流的播放状态或无流的空闲状态;可配合 placeholder 插件实现自定义无视频时遮罩 (statusList)
onTimeChange 回放播放过程中主动推送时间。推送频率可在 config 中配置,默认 500ms。如果业务层需要时间轴平滑移动,可将频率 设置低些,特别是服务器回放的小文件。 (params: [data]) 时间信息
onMediaInfo 媒体信息回调,目前主要包括 timeList(网络流情况下业务层需要感知时长信息) (player, eventData) 播放器实例、媒体信息
onMessage 提示信息回调事件 (code, message) 提示信息
onFramePlayNoData 逐帧无数据事件 (player, type) 播放器实例、逐帧类型(0:下一帧, 1:上一帧)
onStreamTypeChange 码流切换事件 (player, eventData) 播放器实例、事件信息
onInputAudioDevicesChange 音频输入设备改变事件 (eventData, player) 事件信息、对讲实例

2. API 接口

2.1. afterPlayerInit

描述

播放器初始化后触发,目前只对直通实例生效

示例

  • player.hooks.afterPlayerInit.tap('after init', callback(player, config));

注:player 即播放实例

回调参数

参数 描述
player 播放器实例
config 渲染用参数

2.2. afterLoaded

描述

播放器获取到媒体流地址后触发,此时并没有开始播放视频或者监听对讲。对直通播放器,回放播放器,监听对讲实例均生效。

示例

  • player.hooks.afterLoaded.tap('afterLoaded', callback(player, eventData));

回调参数

参数 描述
player 播放器实例
eventData 返回的链接数据

2.3. afterReady

描述

播放器已准备好开始播放,支持直通、回放。

示例

  • player.hooks.afterReady.tap('afterReady', callback(player, eventData));

回调参数

参数 描述
player 播放器实例
eventData 返回的播放状态数据

2.4. beforePlay

描述

播放器播放通知 (play) 前触发。直通在调用 load 会自动播放,因此只有回放生效。

示例

  • player.hooks.beforePlay.tap('beforePlay', callback(player, eventData));

回调参数

参数 描述
player 播放器实例
eventData 下发播放的数据

2.5. afterPlay

描述

播放器获取到播放通知 (play) 后触发,回放生效。

示例

  • player.hooks.afterPlay.tap('afterPlay', callback(player, eventData));

回调参数

参数 描述
player 播放器实例
eventData 下发播放的数据

2.6. beforePause

描述

播放器获取到暂停通知 (pause) 前触发,回放生效。

示例

  • player.hooks.beforePause.tap('beforePause', callback(player, eventData));

回调参数

参数 描述
player 播放器实例
eventData 下发播放的数据

2.7. afterPause

描述

播放器获取到暂停通知 (pause) 后触发,回放生效。

示例

  • player.hooks.afterPause.tap('afterPause', callback(player, eventData));

回调参数

参数 描述
player 播放器实例
eventData 下发播放的数据

2.8. beforeStop

描述

视频停止前回调,回放生效。

示例

  • player.hooks.beforeStop.tap('beforeStop', callback(player, eventData));

回调参数

参数 描述
player 播放器实例
eventData 下发播放的数据

2.9. afterStop

描述

播放器停止后触发。

示例

  • player.hooks.afterStop.tap('after stop', callback[player, timeData]);

回调参数

timeData 类型为 Object,监听对讲才有此参数,结构如下:

参数 描述
startTime 开始时间,客户端 utc 时间戳,单位 毫秒。如果未开始,该值为 null。
endTime 结束时间,客户端 utc 时间戳,单位 毫秒。
duration 播放时长,单位 毫秒。如果未开始,该值为 null。

2.10. beforeSeek

描述

用户调用触发 seek,状态为 seeking 状态,仅回放生效。

示例

  • player.hooks.afterSeek.tap('after seek', callback(player, eventData));

回调参数

参数 类型 描述
player 播放器实例
eventData 下发播放的数据

2.11. afterSeek

描述

完成进度跳转 seek 后触发,仅回放生效。

示例

  • player.hooks.afterSeek.tap('after seek', callback(timeData));

回调参数

参数 类型 描述
timeData Object 时间数据,参考 afterStop。

注:seek 失败场景下走 onError 回调

2.12. beforeDestroy

描述

视频销毁前回调。

示例

  • player.hooks.beforeDestroy.tap('beforeDestory', callback(player, preventExecution));

回调参数

参数 描述
player 播放器实例
preventExecution function,阻断函数,可用于阻止 destory 后续执行

2.13. onPlayEnded

描述

回放播放完成

示例

  • player.hooks.onPlayEnded.tap('onPlayEnded', callback(player));

2.14. onError

描述

错误回调,能监听回放,直通中产生的各种错误

示例

player.hooks.onError.tap('An error occurred', callback(errorInfo, player?));

回调参数

参数名 类型 描述
errorInfo Object 其余信息
player class 播放器实例

详情参考 error-code.md

2.15. startReconnect

描述

直通断线后,开始重连的 hook.

示例

  • player.hooks.startReconnect.tap('start reconnecting', callback(player));

2.16. reconnectSuccess

描述

直通断线后,重连成功的 hook.

示例

  • player.hooks.reconnectSuccess.tap('reconnectSuccess', callback(player));

2.17. onVideoPlaceholder

描述

回放通道播放状态变更。与播放器状态需要区分,播放状态是指在播放过程中,通道是有流的播放状态或无流的空闲状态;可配合 placeholder 插件实现自定义无视频时遮罩

示例

  • player.hooks.onVideoPlaceholder .tap('placeholder', callback(playersStatus));

回调参数

参数 数据类型 描述
playersStatus Object[] 通道播放状态变化的集合
playerStatus:Object devId String 设备 Id
channel Number 通道号
status String 变化后的播放状态
next Function 需要占位的回调函数

2.18. onLoading

描述

用于回调 loading 时的百分比信息和网速信息,直通和回放通用。

注:直通模式下,不能通过 done 参数判断是否 loading 结束,需要判断 通道的 percent 是否等于 100,来取消单个通道的 loading

示例

  • player.hooks.onLoading.tap('on loading', callback(loadingList, done));

回调参数

参数 数据类型 描述
loadingList Object[] loading 中的设备通道信息列表
devId string 设备号
channel number 通道号
percent number 进度百分比,0-100
network number 网速信息,单位 KB/s
done boolean 是否完成加载结束 loading

2.19. loadingTimeout

描述

用于判断缓冲超时 ,超时时间按通用配置为准,默认 20s。

示例

  • player.hooks.loadingTimeout.tap('loading timeout', callback(devideInfos));

回调参数

参数 数据类型 描述
deviceInfo Object[] 设备通道列表
deviceInfo:Object devId String 设备 Id
channel Number 通道号

2.20. onTimeChange

描述

回放播放过程中主动推送时间。推送频率可在 config 中配置,默认 500ms。

如果业务层需要时间轴平滑移动,可将频率 设置低些,特别是服务器回放的小文件。

示例

  • player.hooks.onTimeChange.tap('time change', callback(timeData));

回调参数

参数 数据类型 描述
timeData Object
dateTime String 根据传入配置的时区格式化好的时间字符串,如 "2022-12-28 16:17:34"。该格式可在全局配置 config 中配置, 默认"YYYY-MM-DD HH:mm:ss"
utc Number utc 时间,单位秒,int。
ms Number utc 秒之后的 毫秒数,取值 0-999.

2.21. onChannelRender

描述

给出当前播放器渲染帧的设备信息或 AI 信息

示例

  • player.hooks.onChannelRender.tap('onChannelRender', callback(frame, chanPlayer))

回调参数

参数 数据类型 描述
frame object 携带 AI 或设备信息的帧数据
chanPlayers object 当前渲染该数据帧的通道播放器

2.22. onMediaInfo

描述

媒体信息回传

示例

  • player.hooks.onMediaInfo.tap('onMediaInfo', callback(player, eventData))

回调参数

参数 数据类型 描述
player class 播放器实例
eventData object 当前渲染该数据帧的通道播放器
|-name string 数据类型名称:如 timeList
|-data object 数据类型信息

2.23. onMessage

描述

提示信息回调

示例

  • player.hooks.onMessage.tap('onMessage', callback(code, message))

回调参数

参数 数据类型 描述
code string 提示错误码
message string 提示描述

2.24. onFramePlayNoData

描述

逐帧无数据回调

示例

  • player.hooks.onFramePlayNoData.tap('frame play no data', callback(player, type, options))

回调参数

参数 数据类型 描述
player class 播放器实例
type number 逐帧类型。0-下一帧,1-上一帧
options object 其他参数。参考下表

options

参数 说明
isFirst 是否是第一帧
isLast 是否是最后一帧

2.25. onStateChange

描述

播放器状态改变回调

示例

  • player.hooks.onStateChange.tap('state change', callback(player, stateInfo, state))

回调参数

参数 数据类型 描述
player class 播放器实例
stateInfo object 参考下面 stateInfo 类型定义
state string 参考 播放器状态

stateInfo

type TStateInfo = {
    [key: string]: {
        state: string, // 参考播放器状态
        info: {
            oneDev: {
                devId: string, // 设备号
                channel: string, // 通道号
            },
            devId: string, // 设备号
            channel: string, // 通道号
        }
    }
}

2.26. onStreamTypeChange

描述

播放器码流切换回调

示例

  • player.hooks.onStreamTypeChange.tap('stream change', callback(player, eventData))

回调参数

参数 数据类型 描述
player class 播放器实例
eventData object 参考下面 TEventData 类型定义

TEventData

type TEventData = {
    devId: string, // 设备id
    channel: number, // 通道
    streamType: 'MAJOR' | 'MINOR', // 码流类型
}

2.27. onInputAudioDevicesChange

描述

播放器码流切换回调

示例

  • player.hooks.onInputAudioDevicesChange.tap('device change', callback(eventData, player))

回调参数

参数 数据类型 描述
eventData object 参考下面 TEventData 类型定义
player class 播放器实例

TEventData

type TEventData = {
    audioDevicesInput: MediaDeviceInfo[], // 输入设备信息
    audioDevicesOutput: MediaDeviceInfo[], // 输出设备信息
    deviceInputIdUse: string | undefined, // 输入设备id
}