jessibuca-pro-multi.d.ts 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489
  1. import JessibucaPro from "./jessibuca-pro";
  2. declare namespace JessibucaProMulti {
  3. /** 事件 */
  4. enum EVENTS {
  5. /** */
  6. load = 'load',
  7. /** */
  8. timeUpdate = 'timeUpdate',
  9. /** */
  10. videoInfo = 'videoInfo',
  11. audioInfo = 'audioInfo',
  12. error = 'error',
  13. fetchError = 'fetchError',
  14. websocketError = 'websocketError',
  15. kBps = 'kBps',
  16. start = 'start',
  17. timeout = 'timeout',
  18. loadingTimeout = 'loadingTimeout',
  19. loadingTimeoutRetryEnd = 'loadingTimeoutRetryEnd',
  20. delayTimeout = 'delayTimeout',
  21. delayTimeoutRetryEnd = 'delayTimeoutRetryEnd',
  22. playFailedAndPaused = 'playFailedAndPaused',
  23. fullscreen = 'fullscreen',
  24. play = 'play',
  25. pause = 'pause',
  26. mute = 'mute',
  27. stats = 'stats',
  28. performance = 'performance',
  29. recordingTimestamp = 'recordingTimestamp',
  30. recordStart = 'recordStart',
  31. recordEnd = 'recordEnd',
  32. recordBlob = 'recordBlob',
  33. playToRenderTimes = 'playToRenderTimes',
  34. playbackSeek = 'playbackSeek',
  35. playbackStats = 'playbackStats',
  36. playbackTimestamp = 'playbackTimestamp',
  37. playbackPauseOrResume = 'playbackPauseOrResume',
  38. playbackPreRateChange = 'playbackPreRateChange',
  39. playbackRateChange = 'playbackRateChange',
  40. ptz = 'ptz',
  41. streamQualityChange = 'streamQualityChange',
  42. zooming = 'zooming',
  43. crashLog = 'crashLog',
  44. focus = 'focus',
  45. blur = 'blur',
  46. visibilityHiddenTimeout = 'visibilityHiddenTimeout',
  47. visibilityChange = 'visibilityChange',
  48. websocketOpen = 'websocketOpen',
  49. websocketClose = 'websocketClose',
  50. audioResumeState = 'audioResumeState',
  51. networkDelayTimeout = 'networkDelayTimeout',
  52. close = 'close'
  53. }
  54. /** 错误信息 */
  55. enum ERROR {
  56. /** 播放错误,url 为空的时候,调用 play 方法 */
  57. playError = 'playError',
  58. /** http 请求失败 */
  59. fetchError = 'fetchError',
  60. /** websocket 请求失败 */
  61. websocketError = 'websocketError',
  62. /** webcodecs 解码 h265 失败 */
  63. webcodecsH265NotSupport = 'webcodecsH265NotSupport',
  64. webcodecsDecodeError = 'webcodecsDecodeError',
  65. webcodecsWidthOrHeightChange = 'webcodecsWidthOrHeightChange',
  66. /** mediaSource 解码 h265 失败 */
  67. mediaSourceH265NotSupport = 'mediaSourceH265NotSupport',
  68. mediaSourceDecoderConfigurationError = 'mediaSourceDecoderConfigurationError',
  69. mediaSourceFull = 'mediaSourceFull',
  70. mseSourceBufferError = 'mseSourceBufferError',
  71. mediaSourceAppendBufferError = 'mediaSourceAppendBufferError',
  72. mediaSourceBufferListLarge = 'mediaSourceBufferListLarge',
  73. mediaSourceAppendBufferEndTimeout = 'mediaSourceAppendBufferEndTimeout',
  74. /** wasm 解码失败 */
  75. wasmDecodeError = 'wasmDecodeError',
  76. wasmDecodeVideoNoResponseError = 'wasmDecodeVideoNoResponseError',
  77. hlsError = 'hlsError',
  78. webrtcError = 'webrtcError',
  79. webglAlignmentError = 'webglAlignmentError',
  80. flvDemuxBufferSizeTooLarge = 'flvDemuxBufferSizeTooLarge'
  81. }
  82. /** 多画面事件 */
  83. enum MULTI_EVENTS {
  84. dblSelected = 'multiDblSelected',
  85. selected = 'multiSelected',
  86. mouseOver = 'multiMouseover',
  87. mouseOut = 'multiMouseout',
  88. mouseUp = 'multiMouseup',
  89. }
  90. interface Config {
  91. /**
  92. * 播放器容器
  93. * * 若为 string ,则底层调用的是 document.getElementById('id')
  94. * */
  95. container: HTMLElement | string;
  96. /**
  97. * 最大分屏数,默认值4
  98. */
  99. maxSplit?: number,
  100. /**
  101. * 当前分屏数,默认值1
  102. */
  103. split?: number,
  104. /**
  105. * 多屏样式
  106. * * 默认值:{
  107. * border:'#343434',
  108. * borderSelect:'#FFCC00',
  109. * background:'#000'
  110. * }
  111. */
  112. style?: {
  113. border?: string,
  114. borderSelect?: string,
  115. background?: string,
  116. }
  117. /**
  118. * 是否支持双击单个播放窗口,使之全屏到container容器大小。
  119. */
  120. supportDblclickContainerFullscreen?:boolean;
  121. /**
  122. * 设置最大缓冲时长,单位秒,播放器会自动消除延迟
  123. */
  124. videoBuffer?: number;
  125. /**
  126. * 设置丢帧最大延迟,单位秒,当延迟超过(videoBufferDelay + videoBuffer)之后,就会触发丢帧机制
  127. */
  128. videoBufferDelay?: number;
  129. /**
  130. * 设置网络延迟,单位秒,当网络延迟超过这个值之后,会触发'networkDelayTimeout' 事件。
  131. */
  132. networkDelay?: number;
  133. /**
  134. * worker地址
  135. * * 默认引用的是根目录下面的decoder.js文件 ,decoder-pro.js 与 decoder-pro.wasm文件必须是放在同一个目录下面。 */
  136. decoder?: string;
  137. /**
  138. * 是否不使用离屏模式(提升渲染能力)
  139. * 废弃:暂不支持配置
  140. */
  141. forceNoOffscreen?: boolean;
  142. /**
  143. * 是否开启当页面的'visibilityState'变为'hidden'的时候,自动暂停播放。
  144. */
  145. hiddenAutoPause?: boolean;
  146. /**
  147. * 是否有音频,如果设置`false`,则不对音频数据解码,提升性能。
  148. */
  149. hasAudio?: boolean;
  150. /**
  151. * 是否有视频,如果设置`false`,则不对视频数据解码。
  152. */
  153. hasVideo?: boolean;
  154. /**
  155. * 设置旋转角度,只支持,0(默认),90,180,270 三个值
  156. */
  157. rotate?: boolean;
  158. /**
  159. * 镜像翻转:默认`none`, 水平 `level`,垂直 `vertical`
  160. */
  161. mirrorRotate?: string;
  162. /**
  163. * 1. 当为`true`的时候:视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边。 等同于 `setScaleMode(1)`
  164. * 2. 当为`false`的时候:视频画面完全填充canvas区域,画面会被拉伸。等同于 `setScaleMode(0)`
  165. */
  166. isResize?: boolean;
  167. /**
  168. * 1. 当为`true`的时候:视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全。等同于 `setScaleMode(2)`
  169. */
  170. isFullResize?: boolean;
  171. /**
  172. * 1. 当为`true`的时候:ws协议不检验是否以.flv为依据,进行协议解析。
  173. */
  174. isFlv?: boolean;
  175. /**
  176. * 是否是裸流(264、265)
  177. */
  178. isNakedFlow?: boolean;
  179. /**
  180. * 是否开启控制台日志
  181. */
  182. debug?: boolean;
  183. /**
  184. * 日志等级:支持 'warn','debug'
  185. */
  186. debugLevel?: string;
  187. /**
  188. * 是否多实例播放。
  189. * 如果开启了,控制台打印的日志就会有uuid区分多实例。
  190. */
  191. isMulti?: boolean;
  192. /**
  193. * 1. 设置超时时长, 单位秒
  194. * 2. 在连接成功之前(loading)和播放中途(heart),如果超过设定时长无数据返回,则回调timeout事件
  195. */
  196. timeout?: number;
  197. /**
  198. * 1. 设置超时时长, 单位秒
  199. * 2. 在连接成功之前,如果超过设定时长无数据返回,则回调timeout事件
  200. */
  201. heartTimeout?: number;
  202. /**
  203. * 1. 设置超时时长, 单位秒
  204. * 2. 在连接成功之前,如果超过设定时长无数据返回,则回调timeout事件
  205. */
  206. loadingTimeout?: number;
  207. /**
  208. * 页面窗口不可见超时时间,单位秒
  209. */
  210. pageVisibilityHiddenTimeout?: number;
  211. /**
  212. * 是否支持屏幕的双击事件,触发全屏,取消全屏事件
  213. */
  214. supportDblclickFullscreen?: boolean;
  215. /**
  216. * 是否显示网
  217. */
  218. showBandwidth?: boolean;
  219. /**
  220. * 是否显示性能面板
  221. */
  222. showPerformance?: boolean;
  223. /**
  224. * 配置操作按钮
  225. */
  226. operateBtns?: {
  227. /** 是否显示全屏按钮 */
  228. fullscreen?: boolean;
  229. /** 是否显示截图按钮 */
  230. screenshot?: boolean;
  231. /** 是否显示播放暂停按钮 */
  232. play?: boolean;
  233. /** 是否显示声音按钮 */
  234. audio?: boolean;
  235. /** 是否显示录制按 */
  236. record?: boolean;
  237. ptz?: boolean;
  238. quality?: boolean;
  239. zoom?: boolean;
  240. close?: boolean;
  241. scale?: boolean;
  242. performance?: boolean;
  243. face?: boolean;
  244. fullscreenFn?: Function | null;
  245. fullscreenExitFn?: Function | null;
  246. screenshotFn?: Function | null;
  247. playFn?: Function | null;
  248. pauseFn?: Function | null;
  249. recordFn?: Function | null;
  250. recordStopFn?: Function | null;
  251. };
  252. extendOperateBtns?: [
  253. {}
  254. ];
  255. contextmenuBtns?: [
  256. {}
  257. ];
  258. watermarkConfig?: {}
  259. /**
  260. * 底部UI控制栏是否自动隐藏(仅pc端)
  261. */
  262. controlAutoHide?: boolean;
  263. /**
  264. * 加载的时候是否显示加载中icon
  265. */
  266. loadingIcon?: boolean;
  267. /**
  268. * 录像流配置
  269. */
  270. playbackConfig?: {
  271. /**
  272. * 底部UI 24小时高亮时间端,如在该时间段内,可触发点击事件
  273. */
  274. playList?: [
  275. {
  276. // 开始时间戳 例如 1653841634 或者 16538416340000
  277. start: number,
  278. // 结束时间戳 例如 1653843420 或者 16538434200000
  279. end: number
  280. }
  281. ],
  282. /**
  283. * 渲染FPS
  284. */
  285. fps?: number,
  286. /**
  287. * 是否显示底部UI 24小时控制条
  288. */
  289. showControl?: boolean,
  290. /**
  291. * 是否显示倍率按钮
  292. */
  293. showRateBtn?: boolean,
  294. /**
  295. * 倍率按钮配置
  296. * 支持[{label:'正常',value:1},{label:'2倍',value:2}]
  297. */
  298. rateConfig?: [
  299. {
  300. label?: string,
  301. value?: number
  302. }
  303. ],
  304. /**
  305. * rfs渲染时,是否在解码前缓存数据
  306. */
  307. isCacheBeforeDecodeForFpsRender?: boolean,
  308. /**
  309. * ui上面是否使用 playbackPause 方法
  310. */
  311. uiUsePlaybackPause?: boolean,
  312. /**
  313. * 是否使用固定的fps渲染,如果设置的fps小于流推过来的,会造成内存堆积甚至溢出
  314. */
  315. isUseFpsRender?: boolean,
  316. /**
  317. * 是否使用本地时间来计算playback时间
  318. */
  319. isUseLocalCalculateTime?: boolean,
  320. /**
  321. * 一帧 40ms,
  322. */
  323. localOneFrameTimestamp?: number
  324. }
  325. /**
  326. * 分辨率设置
  327. * 支持 ['高清','超清','4K'] 等
  328. */
  329. qualityConfig?: [];
  330. /**
  331. * 默认分辨率,必须得在 qualityConfig 数组里面匹配到
  332. */
  333. defaultStreamQuality?: string
  334. /**
  335. * 开启屏幕常亮,在手机浏览器上, canvas标签渲染视频并不会像video标签那样保持屏幕常亮
  336. */
  337. keepScreenOn?: boolean;
  338. /**
  339. * 是否开启声音,默认是关闭声音播放的
  340. */
  341. isNotMute?: boolean;
  342. /**
  343. * 加载过程中文案
  344. */
  345. loadingText?: string;
  346. /**
  347. * 背景图片
  348. */
  349. background?: string;
  350. /**
  351. * 是否开启MediaSource硬解码
  352. */
  353. useMSE?: boolean;
  354. /**
  355. * 是否开启Webcodecs硬解码
  356. * * 视频编码只支持H.264视频 (需在chrome 94版本以上,需要https或者localhost环境)
  357. * * 支持 forceNoOffscreen 为 false (开启离屏渲染)
  358. * */
  359. useWCS?: boolean;
  360. /**
  361. * 是否使用wasm simd 解码
  362. * *
  363. */
  364. useSIMD?: boolean;
  365. /**
  366. * 是否开启键盘快捷键
  367. * 目前支持的键盘快捷键有:esc -> 退出全屏;arrowUp -> 声音增加;arrowDown -> 声音减少;
  368. */
  369. hotKey?: boolean;
  370. /**
  371. * 在使用MSE或者Webcodecs 播放H265的时候,是否自动降级到wasm模式。
  372. * 设置为false 则直接关闭播放,抛出Error 异常,设置为true 则会自动切换成wasm模式播放。
  373. */
  374. autoWasm?: boolean;
  375. /**
  376. * heartTimeout 心跳超时之后自动再播放,不再抛出异常,而直接重新播放视频地址。
  377. */
  378. heartTimeoutReplay?: boolean,
  379. /**
  380. * heartTimeoutReplay 从试次数,超过之后,不再自动播放
  381. */
  382. heartTimeoutReplayTimes?: number,
  383. /**
  384. * loadingTimeout loading之后自动再播放,不再抛出异常,而直接重新播放视频地址。
  385. */
  386. loadingTimeoutReplay?: boolean,
  387. /**
  388. * heartTimeoutReplay 从试次数,超过之后,不再自动播放
  389. */
  390. loadingTimeoutReplayTimes?: number
  391. /**
  392. * wasm解码报错之后,不再抛出异常,而是直接重新播放视频地址。
  393. */
  394. wasmDecodeErrorReplay?: boolean,
  395. /**
  396. * 播放过程中,超时触发的重播,是否使用最后一帧画面当背景展示。(历史参数,推荐 replayUseLastFrameShow)
  397. */
  398. heartTimeoutReplayUseLastFrameShow?: boolean;
  399. /**
  400. * 播放过程中,超时触发的重播,是否使用最后一帧画面当背景展示。
  401. */
  402. replayUseLastFrameShow?: boolean;
  403. /**
  404. * https://github.com/langhuihui/jessibuca/issues/152 解决方案
  405. * 例如:WebGL图像预处理默认每次取4字节的数据,但是540x960分辨率下的U、V分量宽度是540/2=270不能被4整除,导致绿屏。
  406. */
  407. openWebglAlignment?: boolean,
  408. /**
  409. * wcs 是否使用 video 渲染
  410. * * 推荐使用 `useVideoRender` 参数替代
  411. */
  412. wcsUseVideoRender?: boolean,
  413. /**
  414. * wasm 用video标签渲染
  415. * * 推荐使用 `useVideoRender` 参数替代
  416. */
  417. wasmUseVideoRender?: boolean,
  418. /**
  419. * mse 用canvas标签渲染
  420. * * 推荐使用 `useVideoRender` 参数替代
  421. */
  422. mseUseCanvasRender?: boolean,
  423. /**
  424. * hls 用canvas标签渲染
  425. * * 推荐使用 `useVideoRender` 参数替代
  426. */
  427. hlsUseCanvasRender?: boolean,
  428. /**
  429. * 使用video标签渲染
  430. */
  431. useVideoRender?: boolean,
  432. /**
  433. * 使用canvas渲染
  434. */
  435. useCanvasRender?: boolean,
  436. /**
  437. * 网络延迟重连
  438. */
  439. networkDelayTimeoutReplay?: boolean,
  440. /**
  441. * 检查第一帧是否是I帧
  442. */
  443. checkFirstIFrame?: boolean,
  444. /**
  445. *
  446. */
  447. audioEngine?: string,
  448. /**
  449. * 是否显示录制的UI(在没有配置底部的录制按钮的情况下),
  450. * * 如果为true,则会显示录制的UI,
  451. * * 如果为false,则不显示录制的UI。
  452. */
  453. isShowRecordingUI?: boolean,
  454. /**
  455. * 是否显示缩放的UI(在没有配置底部的缩放按钮的情况下),
  456. * * 如果为true,则会显示缩放的UI,
  457. * * 如果为false,则不显示缩放的UI。
  458. */
  459. isShowZoomingUI?: boolean,
  460. /**
  461. * 使用人脸检测
  462. * * 依赖引入人脸检测模块(js,wasm)
  463. */
  464. useFaceDetector?: boolean,
  465. /**
  466. * PTZ 点击类型
  467. * * 支持: `click` 点击。 会在点击之后,立即触发ptz arrow事件,300ms之后触发stop事件
  468. * * 支持:`mouseDownAndUp` 鼠标按下和松开。会在鼠标按下,立即触发ptz arrow事件,鼠标松开,触发stop事件。
  469. */
  470. ptzClickType?: string,
  471. /**
  472. * 微信安卓音频播放块大小
  473. */
  474. weiXinInAndroidAudioBufferSize?: number,
  475. /**
  476. * 是否加密流
  477. */
  478. isCrypto?: boolean,
  479. /**
  480. * 用web全屏(旋转播放器90度)(只会在移动端生效)
  481. */
  482. useWebFullScreen?: boolean,
  483. /**
  484. * 自定义控制栏的html
  485. */
  486. controlHtml?: string,
  487. /**
  488. * 是否显示ptz zoom 按钮
  489. */
  490. ptzZoomShow?: boolean,
  491. }
  492. }
  493. declare class JessibucaProMulti {
  494. constructor(config?: JessibucaProMulti.Config);
  495. /**
  496. * 销毁单个播放窗口播放器实例
  497. * @param windowIndex
  498. */
  499. destroySingle(windowIndex?: number): void;
  500. /**
  501. * 整个播放全屏
  502. * @param flag
  503. */
  504. setFullscreenMulti(flag: boolean): void;
  505. /**
  506. * 选择某个播放窗口
  507. * @param windowIndex
  508. */
  509. selectWindow(windowIndex: number): void;
  510. /**
  511. * 切换分屏数
  512. * @param split
  513. */
  514. arrangeWindow(split: number|string): void;
  515. /**
  516. * 获取当前分屏数
  517. */
  518. getCurrentSplit(): number;
  519. /**
  520. * 获取当前选中的播放窗口下标
  521. */
  522. getSelectedWindowIndex(): number;
  523. /**
  524. * 是否开启控制台调试打印
  525. @example
  526. // 开启
  527. jessibuca.setDebug(true)
  528. // 关闭
  529. jessibuca.setDebug(false)
  530. */
  531. setDebug(flag: boolean, windowIndex?: number): void;
  532. /**
  533. * 获取配置参数信息
  534. */
  535. getOption(windowIndex?: number): JessibucaProMulti.Config;
  536. /**
  537. * 静音
  538. @example
  539. jessibuca.mute()
  540. */
  541. mute(windowIndex?: number): void;
  542. /**
  543. * 取消静音
  544. @example
  545. jessibuca.cancelMute()
  546. */
  547. cancelMute(windowIndex?: number): void;
  548. /**
  549. * 留给上层用户操作来触发音频恢复的方法。
  550. *
  551. * iPhone,chrome等要求自动播放时,音频必须静音,需要由一个真实的用户交互操作来恢复,不能使用代码。
  552. *
  553. * https://developers.google.com/web/updates/2017/09/autoplay-policy-changes
  554. */
  555. audioResume(windowIndex?: number): void;
  556. /**
  557. *
  558. * 设置超时时长, 单位秒
  559. * 在连接成功之前和播放中途,如果超过设定时长无数据返回,则回调timeout事件
  560. @example
  561. jessibuca.setTimeout(10)
  562. jessibuca.on('timeout',function(){
  563. //
  564. });
  565. */
  566. setTimeout(number: number, windowIndex?: number): void;
  567. /**
  568. * @param mode
  569. * 0 视频画面完全填充canvas区域,画面会被拉伸 等同于参数 `isResize` 为false
  570. *
  571. * 1 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边 等同于参数 `isResize` 为true
  572. *
  573. * 2 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全 等同于参数 `isFullResize` 为true
  574. @example
  575. jessibuca.setScaleMode(0)
  576. jessibuca.setScaleMode(1)
  577. jessibuca.setScaleMode(2)
  578. */
  579. setScaleMode(mode: number, windowIndex?: number): void;
  580. /**
  581. * 暂停播放
  582. */
  583. pause(isClear: boolean, windowIndex?: number): Promise<void>;
  584. /**
  585. * 关闭视频,不释放底层资源
  586. @example
  587. jessibuca.close();
  588. */
  589. close(windowIndex?: number): void;
  590. /**
  591. * 关闭视频,释放底层资源
  592. @example
  593. jessibuca.destroy()
  594. */
  595. destroy(): void;
  596. /**
  597. * 清理画布为黑色背景
  598. @example
  599. jessibuca.clearView()
  600. */
  601. clearView(windowIndex?: number): void;
  602. /**
  603. * 播放视频
  604. @example
  605. jessibuca.play('url').then(()=>{
  606. console.log('play success')
  607. }).catch((e)=>{
  608. console.log('play error',e)
  609. })
  610. //
  611. jessibuca.play()
  612. */
  613. play(url?: string, options?: object, windowIndex?: number): Promise<void>;
  614. /**
  615. * 重新调整视图大小
  616. */
  617. resize(windowIndex?: number): void;
  618. /**
  619. * 设置最大缓冲时长,单位秒,播放器会自动消除延迟。
  620. *
  621. * 等同于 `videoBuffer` 参数。
  622. *
  623. @example
  624. // 设置 200ms 缓冲
  625. jessibuca.setBufferTime(0.2)
  626. */
  627. setBufferTime(time: number, windowIndex?: number): void;
  628. /**
  629. * 设置最大延迟时间,单位秒,播放器当延迟超过这个时间之后就会丢帧,消除延迟。
  630. * @param time
  631. */
  632. setBufferTimeDelay(time: number, windowIndex?: number): void;
  633. /**
  634. * 设置旋转角度,只支持,0(默认) ,180,270 三个值。
  635. *
  636. * > 可用于实现监控画面小窗和全屏效果,由于iOS没有全屏API,此方法可以模拟页面内全屏效果而且多端效果一致。 *
  637. @example
  638. jessibuca.setRotate(0)
  639. jessibuca.setRotate(90)
  640. jessibuca.setRotate(270)
  641. */
  642. setRotate(deg: number, windowIndex?: number): void;
  643. /**
  644. *
  645. * 设置音量大小,取值0 — 1
  646. *
  647. * > 区别于 mute 和 cancelMute 方法,虽然设置setVolume(0) 也能达到 mute方法,但是mute 方法是不调用底层播放音频的,能提高性能。而setVolume(0)只是把声音设置为0 ,以达到效果。
  648. * @param volume 当为0时,完全无声;当为1时,最大音量,默认值
  649. @example
  650. jessibuca.setVolume(0.2)
  651. jessibuca.setVolume(0)
  652. jessibuca.setVolume(1)
  653. */
  654. setVolume(volume: number, windowIndex?: number): void;
  655. /**
  656. * 返回是否加载完毕
  657. @example
  658. var result = jessibuca.hasLoaded()
  659. console.log(result) // true
  660. */
  661. hasLoaded(windowIndex?: number): boolean;
  662. /**
  663. * 开启屏幕常亮,在手机浏览器上, canvas标签渲染视频并不会像video标签那样保持屏幕常亮。
  664. * H5目前在chrome\edge 84, android chrome 84及以上有原生亮屏API, 需要是https页面
  665. * 其余平台为模拟实现,此时为兼容实现,并不保证所有浏览器都支持
  666. @example
  667. jessibuca.setKeepScreenOn()
  668. */
  669. setKeepScreenOn(windowIndex?: number): boolean;
  670. /**
  671. * 全屏(取消全屏)播放视频
  672. @example
  673. jessibuca.setFullscreen(true)
  674. //
  675. jessibuca.setFullscreen(false)
  676. */
  677. setFullscreen(flag: boolean, windowIndex?: number): void;
  678. /**
  679. *
  680. * 截图,调用后弹出下载框保存截图
  681. * @param filename 可选参数, 保存的文件名, 默认 `时间戳`
  682. * @param format 可选参数, 截图的格式,可选png或jpeg或者webp ,默认 `png`
  683. * @param quality 可选参数, 当格式是jpeg或者webp时,压缩质量,取值0 ~ 1 ,默认 `0.92`
  684. * @param type 可选参数, 可选download或者base64或者blob,默认`download`
  685. @example
  686. jessibuca.screenshot("test","png",0.5)
  687. const base64 = jessibuca.screenshot("test","png",0.5,'base64')
  688. const fileBlob = jessibuca.screenshot("test",'blob')
  689. */
  690. screenshot(options: {
  691. filename?: string, format?: string, quality?: number, type?: string
  692. }, windowIndex?: number): void;
  693. /**
  694. * 截图(支持水印参数),调用后弹出下载框保存截图
  695. * 1. filename: 可选参数, 保存的文件名, 默认 `时间戳`
  696. * 2. format : 可选参数, 截图的格式,可选png或jpeg或者webp ,默认 `png`
  697. * 3. quality: 可选参数, 当格式是jpeg或者webp时,压缩质量,取值0 ~ 1 ,默认 `0.92`
  698. * 4. type: 可选参数, 可选download或者base64或者blob,默认`download`
  699. * @param options
  700. */
  701. screenshotWatermark(options: {
  702. filename: string,
  703. format: string,
  704. quality: number,
  705. type: string
  706. }, windowIndex?: number): void
  707. /**
  708. * 开始录制。
  709. * @param fileName 可选,默认时间戳
  710. @example
  711. jessibuca.startRecord('xxx')
  712. */
  713. startRecord(fileName: string, windowIndex?: number): void;
  714. /**
  715. * 暂停录制并下载。
  716. * @param type 可选,类型,默认`download`,支持`download`和`blob`
  717. * @param fileName 可选,文件名字,默认时间戳
  718. @example
  719. jessibuca.stopRecordAndSave('webm','test')
  720. */
  721. stopRecordAndSave(type: string, fileName: string, windowIndex?: number): void;
  722. /**
  723. * 返回是否正在播放中状态。
  724. @example
  725. var result = jessibuca.isPlaying()
  726. console.log(result) // true
  727. */
  728. isPlaying(windowIndex?: number): boolean;
  729. /**
  730. * 返回是否正在加载中状态
  731. */
  732. isLoading(windowIndex?: number): boolean;
  733. /**
  734. * 返回是否正在暂停中状态
  735. */
  736. isPause(windowIndex?: number): boolean;
  737. /**
  738. * 是否正在回放暂停中状态
  739. */
  740. isPlaybackPause(windowIndex?: number): boolean;
  741. /**
  742. * 返回是否静音。
  743. @example
  744. var result = jessibuca.isMute()
  745. console.log(result) // true
  746. */
  747. isMute(windowIndex?: number): boolean;
  748. /**
  749. * 返回是否正在录制。
  750. @example
  751. var result = jessibuca.isRecording()
  752. console.log(result) // true
  753. */
  754. isRecording(windowIndex?: number): boolean;
  755. /**
  756. * 手动消除缓冲区数据
  757. */
  758. clearBufferDelay(windowIndex?: number): boolean;
  759. /**
  760. * 设置网络延迟时间,用于播放器计算播放时间,单位秒s
  761. * @param timestamp 单位秒s
  762. */
  763. setNetworkDelayTime(timestamp: number, windowIndex?: number): void;
  764. /**
  765. * 设置分辨率 `quality` 必须是`qualityConfig`里面的数据
  766. * @param quality
  767. */
  768. setStreamQuality(quality: number, windowIndex?: number): void;
  769. /**
  770. * 设置镜像翻转 `mirrorRotate` ,
  771. * 可选参数有 默认`none`,水平 `level`,垂直 `vertical`
  772. * @param mirrorRotate
  773. */
  774. setMirrorRotate(mirrorRotate: string, windowIndex?: number): void;
  775. /**
  776. * 隐藏/显示 性能面板
  777. *
  778. * @param flag 是否显示性能面板,如果不写参数,则当做toggle切换
  779. */
  780. togglePerformancePanel(flag: boolean, windowIndex?: number): void;
  781. /**
  782. * 打开电子放大
  783. */
  784. openZoom(windowIndex?: number): void;
  785. /**
  786. * 关闭电子放大
  787. */
  788. closeZoom(windowIndex?: number): void;
  789. /**
  790. * 当前是否处于电子放大模式下
  791. */
  792. isZoomOpen(windowIndex?: number): boolean;
  793. /**
  794. * 电子放大-放大
  795. */
  796. expandZoom(windowIndex?: number): void;
  797. /**
  798. * 电子放大-缩小
  799. */
  800. narrowZoom(windowIndex?: number): void;
  801. /**
  802. * 获取当前电子放大档位 范围 1~5
  803. */
  804. getCurrentZoomIndex(windowIndex?: number): number;
  805. /**
  806. * 返回一个字符串 告知当前解码类型。如果是组合型的话,会用空格分隔。
  807. * * 可能得结果有:`mse`,`wcs`,`offscreen`,`wasm`,`simd`,`webrtc`,`hls`
  808. */
  809. getDecodeType(windowIndex?: number): string;
  810. /**
  811. * 返回一个字符串 告知当前解复用类型。
  812. * 可能得结果有:`flv`,`m7s`,`hls`,`webrtc`,`webTransport`,`nakedFlow`
  813. */
  814. getDemuxType(windowIndex?: number): string;
  815. /**
  816. * 当前渲染组件 包含 `video`,`canvas`
  817. */
  818. getRenderType(windowIndex?: number): string;
  819. /**
  820. * 告知当前播放时间戳。 单位 秒
  821. */
  822. getPlayingTimestamp(windowIndex?: number): number;
  823. /**
  824. * 当前播放器状态
  825. * * 包含状态有 `playing` `paused` `loading`
  826. */
  827. getStatus(windowIndex?: number): string;
  828. /**
  829. * 当前播放器类型
  830. * * 包含类型有 `player` `playbackTF`
  831. */
  832. getPlayType(windowIndex?: number): string;
  833. /**
  834. * 返回当前音频引擎类型
  835. * * 返回的结果有 `audio`, `worklet`, `script`, `active`
  836. */
  837. getAudioEngineType(windowIndex?: number): string;
  838. /**
  839. * 设置裸流播放的fps
  840. * @param fps :fps值 1~100
  841. */
  842. setNakedFlowFps(fps: number, windowIndex?: number): Promise<any>;
  843. /**
  844. * 设置调试等级
  845. * @param level `debug`和`warn`
  846. */
  847. updateDebugLevel(level: string, windowIndex?: number): void;
  848. /**
  849. * 打开人脸检测
  850. * * 人脸检测功能需要额外加载js和wasm文件
  851. */
  852. faceDetectOpen(windowIndex?: number): void;
  853. /**
  854. * 关闭人脸检测
  855. * *人脸检测功能需要额外加载js和wasm文件
  856. */
  857. faceDetectClose(windowIndex?: number): void;
  858. /**
  859. * 更新全屏水印
  860. * @param config 等同于 `fullscreenWatermarkConfig` 配置
  861. */
  862. updateFullscreenWatermark(config: object, windowIndex?: number): void;
  863. /**
  864. * 移除全屏水印
  865. */
  866. removeFullscreenWatermark(windowIndex?: number): void;
  867. /**
  868. * 发送websocket消息
  869. * @param message
  870. */
  871. sendWebsocketMessage(message: any, windowIndex?: number): void;
  872. /**
  873. * 给canvas 添加内容
  874. * @param contentList
  875. */
  876. addContentToCanvas(contentList: [], windowIndex?: number): void;
  877. /**
  878. * 清空canvas 额外添加的内容
  879. */
  880. clearContentToCanvas(windowIndex?: number): void;
  881. /**
  882. * 设置控制面板的html
  883. * @param html
  884. */
  885. setControlHtml(html: string, windowIndex?: number): void;
  886. /**
  887. * 清空控制面板的html
  888. */
  889. clearControlHtml(windowIndex?: number): void;
  890. /**
  891. * 监听 jessibuca 初始化事件
  892. * @example
  893. * jessibuca.on("load",function(){console.log('load')})
  894. */
  895. on(event: JessibucaProMulti.EVENTS.load, callback: (windowIndex: number) => void): void;
  896. /**
  897. * 视频播放持续时间,单位ms
  898. * @example
  899. * jessibuca.on('timeUpdate',function (ts) {console.log('timeUpdate',ts);})
  900. */
  901. on(event: JessibucaProMulti.EVENTS.timeUpdate, callback: (windowIndex: number) => void): void;
  902. /**
  903. * 当解析出视频信息时回调,2个回调参数
  904. * @example
  905. * jessibuca.on("videoInfo",function(data){console.log('width:',data.width,'height:',data.width)})
  906. */
  907. on(event: JessibucaProMulti.EVENTS.videoInfo, callback: (windowIndex: number, data: {
  908. /** 视频宽 */
  909. width: number;
  910. /** 视频高 */
  911. height: number;
  912. }) => void): void;
  913. /**
  914. * 当解析出音频信息时回调,2个回调参数
  915. * @example
  916. * jessibuca.on("audioInfo",function(data){console.log('numOfChannels:',data.numOfChannels,'sampleRate',data.sampleRate)})
  917. */
  918. on(event: JessibucaProMulti.EVENTS.audioInfo, callback: (windowIndex: number, data: {
  919. /** 声频通道 */
  920. numOfChannels: number;
  921. /** 采样率 */
  922. sampleRate: number;
  923. }) => void): void;
  924. /**
  925. * 错误信息
  926. * @example
  927. * jessibuca.on("error",function(error){
  928. if(error === JessibucaProMulti.ERROR.fetchError){
  929. //
  930. }
  931. else if(error === JessibucaProMulti.ERROR.webcodecsH265NotSupport){
  932. //
  933. }
  934. console.log('error:',error)
  935. })
  936. */
  937. on(event: JessibucaProMulti.EVENTS.error, callback: (windowIndex: number, err: JessibucaProMulti.ERROR) => void): void;
  938. /**
  939. * 播放器播放的时候,http(s) 协议请求失败
  940. * @param event
  941. * @param callback
  942. */
  943. on(event: JessibucaProMulti.ERROR.fetchError, callback: (windowIndex: number) => void): void;
  944. /**
  945. * 播放器播放的时候,websocket 请求失败
  946. * @param event
  947. * @param callback
  948. */
  949. on(event: JessibucaProMulti.ERROR.websocketError, callback: (windowIndex: number) => void): void;
  950. /**
  951. * 当前网速, 单位KB 每秒1次,
  952. * @example
  953. * jessibuca.on("kBps",function(data){console.log('kBps:',data)})
  954. */
  955. on(event: JessibucaProMulti.EVENTS.kBps, callback: (windowIndex: number, value: number) => void): void;
  956. /**
  957. * 渲染开始
  958. * @example
  959. * jessibuca.on("start",function(){console.log('start render')})
  960. */
  961. on(event: JessibucaProMulti.EVENTS.start, callback: (windowIndex: number) => void): void;
  962. /**
  963. * 当设定的超时时间内无数据返回,则回调
  964. * @example
  965. * jessibuca.on("timeout",function(error){console.log('timeout:',error)})
  966. */
  967. on(event: JessibucaProMulti.EVENTS.timeout, callback: (windowIndex: number, error: JessibucaProMulti.EVENTS.timeout) => void): void;
  968. /**
  969. * 当play()的时候,如果没有数据返回,则回调
  970. * @example
  971. * jessibuca.on("loadingTimeout",function(){console.log('timeout')})
  972. */
  973. on(event: JessibucaProMulti.EVENTS.loadingTimeout, callback: (windowIndex: number) => void): void;
  974. /**
  975. * 当播放过程中,如果超过timeout之后没有数据渲染,则抛出异常。
  976. * @example
  977. * jessibuca.on("delayTimeout",function(){console.log('timeout')})
  978. */
  979. on(event: JessibucaProMulti.EVENTS.delayTimeout, callback: (windowIndex: number,) => void): void;
  980. /**
  981. * 当前是否全屏
  982. * @example
  983. * jessibuca.on("fullscreen",function(flag){console.log('is fullscreen',flag)})
  984. */
  985. on(event: JessibucaProMulti.EVENTS.fullscreen, callback: (windowIndex: number,) => void): void;
  986. /**
  987. * 触发播放事件
  988. * @example
  989. * jessibuca.on("play",function(flag){console.log('play')})
  990. */
  991. on(event: JessibucaProMulti.EVENTS.play, callback: (windowIndex: number,) => void): void;
  992. /**
  993. * 触发暂停事件
  994. * @example
  995. * jessibuca.on("pause",function(flag){console.log('pause')})
  996. */
  997. on(event: JessibucaProMulti.EVENTS.pause, callback: (windowIndex: number,) => void): void;
  998. /**
  999. * 触发声音事件,返回boolean值
  1000. * @example
  1001. * jessibuca.on("mute",function(flag){console.log('is mute',flag)})
  1002. */
  1003. on(event: JessibucaProMulti.EVENTS.mute, callback: (windowIndex: number,) => void): void;
  1004. /**
  1005. * 流状态统计,流开始播放后回调,每秒1次。
  1006. * @example
  1007. * jessibuca.on("stats",function(s){console.log("stats is",s)})
  1008. */
  1009. on(event: JessibucaProMulti.EVENTS.stats, callback: (windowIndex: number, stats: {
  1010. /** 当前缓冲区时长,单位毫秒 */
  1011. buf: number;
  1012. /** 当前视频帧率 */
  1013. fps: number;
  1014. /** 当前音频码率,单位bit */
  1015. abps: number;
  1016. /** 当前视频码率,单位bit */
  1017. vbps: number;
  1018. /** 当前视频帧pts,单位毫秒 */
  1019. ts: number;
  1020. pTs: number;
  1021. dts: number;
  1022. }) => void): void;
  1023. /**
  1024. * 渲染性能统计,流开始播放后回调,每秒1次。
  1025. * @param performance 0: 表示卡顿,1: 表示流畅,2: 表示非常流程
  1026. * @example
  1027. * jessibuca.on("performance",function(performance){console.log("performance is",performance)})
  1028. */
  1029. on(event: JessibucaProMulti.EVENTS.performance, callback: (windowIndex: number, performance: 0 | 1 | 2) => void): void;
  1030. /**
  1031. * 录制开始的事件
  1032. * @example
  1033. * jessibuca.on("recordStart",function(){console.log("record start")})
  1034. */
  1035. on(event: JessibucaProMulti.EVENTS.recordStart, callback: (windowIndex: number,) => void): void;
  1036. /**
  1037. * 录制结束的事件
  1038. * @example
  1039. * jessibuca.on("recordEnd",function(){console.log("record end")})
  1040. */
  1041. on(event: JessibucaProMulti.EVENTS.recordEnd, callback: (windowIndex: number,) => void): void;
  1042. /**
  1043. * 录制的时候,返回的录制时长,1s一次
  1044. * @example
  1045. * jessibuca.on("recordingTimestamp",function(timestamp){console.log("recordingTimestamp is",timestamp)})
  1046. */
  1047. on(event: JessibucaProMulti.EVENTS.recordingTimestamp, callback: (windowIndex: number, timestamp: number) => void): void;
  1048. /**
  1049. * 监听调用play方法 经过 初始化-> 网络请求-> 解封装 -> 解码 -> 渲染 一系列过程的时间消耗
  1050. * @param event
  1051. * @param callback
  1052. */
  1053. on(event: JessibucaProMulti.EVENTS.performance, callback: (windowIndex: number, times: {
  1054. playInitStart: number, // 1 初始化
  1055. playStart: number, // 2 初始化
  1056. streamStart: number, // 3 网络请求
  1057. streamResponse: number, // 4 网络请求
  1058. demuxStart: number, // 5 解封装
  1059. decodeStart: number, // 6 解码
  1060. videoStart: number, // 7 渲染
  1061. playTimestamp: number,// playStart- playInitStart
  1062. streamTimestamp: number,// streamStart - playStart
  1063. streamResponseTimestamp: number,// streamResponse - streamStart
  1064. demuxTimestamp: number, // demuxStart - streamResponse
  1065. decodeTimestamp: number, // decodeStart - demuxStart
  1066. videoTimestamp: number,// videoStart - decodeStart
  1067. allTimestamp: number // videoStart - playInitStart
  1068. }) => void): void
  1069. /**
  1070. * 当点击播放器上面的时间进度条,响应的事件
  1071. * @param event
  1072. * @param callback
  1073. */
  1074. on(event: JessibucaProMulti.EVENTS.playbackSeek, callback: (windowIndex: number, times: {
  1075. hour: number,
  1076. min: number,
  1077. second: number
  1078. }) => void): void;
  1079. /**
  1080. * 录像流的 stats数据,1s回调一次
  1081. * @param event
  1082. * @param callback
  1083. */
  1084. on(event: JessibucaProMulti.EVENTS.playbackStats, callback: (windowIndex: number, stats: {
  1085. fps: number,
  1086. start: number,
  1087. end: number,
  1088. timestamp: number,
  1089. dataTimestamp: number,
  1090. audioBufferSize: number,
  1091. videoBufferSize: number,
  1092. ts: number
  1093. }) => void): void;
  1094. /**
  1095. * 录像流的当前播放的时间,1s回调一次
  1096. * @param event
  1097. * @param callback
  1098. */
  1099. on(event: JessibucaProMulti.EVENTS.playbackTimestamp, callback: (windowIndex: number, times: {
  1100. hour: number,
  1101. min: number,
  1102. second: number,
  1103. ts: number
  1104. }) => void): void;
  1105. /**
  1106. * 录像流的ui配置了 playbackPause 方法之后,当触发 playbackPause方法,会触发事件,方便业务层做与服务器端通讯
  1107. * @param event
  1108. * @param callback
  1109. *
  1110. * JessibucaProMulti.on('playbackPauseOrResume', (value) => {
  1111. * if (value === true) {
  1112. * // pause 播放 -> 暂停
  1113. * } else {
  1114. * // resume 暂停 -> 播放
  1115. * }
  1116. * })
  1117. */
  1118. on(event: JessibucaProMulti.EVENTS.playbackSeek, callback: (windowIndex: number, flag: boolean) => void): void;
  1119. /**
  1120. * 回调ptz 操作的方向
  1121. * * 包含`up`,`right`,`down`,`left`,`stop`
  1122. * @param event
  1123. * @param callback
  1124. */
  1125. on(event: JessibucaProMulti.EVENTS.ptz, callback: (windowIndex: number, flag: string) => void): void;
  1126. /**
  1127. * 切换分辨率的事件回调
  1128. * @param event
  1129. * @param callback
  1130. */
  1131. on(event: JessibucaProMulti.EVENTS.streamQualityChange, callback: (flag: string) => void): void;
  1132. /**
  1133. * 播放器被销毁的时候触发的事件
  1134. * * 由于 close 事件必须先抛出,然后执行的内部的destroy 方法(不然内部执行执行接触事件绑定,外部on方法就会失效掉的)
  1135. * * 所以需要在监听事件内部通过 setTimeout 方法之后(让destroy执行成功)再执行后续的业务代码,例如关闭流连接啥的等等
  1136. * * 如果不在setTimeout之后执行,会出现意想不到的事情
  1137. * @param event
  1138. * @param callback
  1139. *
  1140. * JessibucaProMulti.on('close', () => {
  1141. * setTimeout(() => {
  1142. * // do some things
  1143. * }, 10)
  1144. * })
  1145. */
  1146. on(event: JessibucaProMulti.EVENTS.close, callback: (windowIndex: number,) => void): void;
  1147. /**
  1148. * 电子放大是否开启状态
  1149. * @param event
  1150. * @param callback
  1151. */
  1152. on(event: JessibucaProMulti.EVENTS.zooming, callback: (windowIndex: number, flag: boolean) => void): void;
  1153. /**
  1154. * 触发播放器重播的时候,会抛出错误信息,方便业务层做错误上报
  1155. * * 主要收集的数据有
  1156. *
  1157. * - url: 播放地址
  1158. * - error: 错误信息
  1159. * - playType : 播放类型
  1160. * - demuxType:解封装类型
  1161. * - decodeType:解码类型
  1162. * - renderType: 渲染类型
  1163. * - videoInfo : 视频信息 {width,height,encType}
  1164. * - audioInfo : 音频信息 {encType,channels,sampleRate}
  1165. * - audioEngine :音频引擎
  1166. * - allTimes :播放时长,单位秒
  1167. * @param event
  1168. * @param callback
  1169. */
  1170. on(event: JessibucaProMulti.EVENTS.crashLog, callback: (windowIndex: number, log: {
  1171. url: string,
  1172. error: string,
  1173. playType: string,
  1174. demuxType: string,
  1175. decodeType: string,
  1176. renderType: string,
  1177. videoInfo: {
  1178. width: number,
  1179. height: number,
  1180. encType: string
  1181. },
  1182. audioInfo: {
  1183. encType: string,
  1184. channels: number,
  1185. sampleRate: number,
  1186. },
  1187. audioEngine: string,
  1188. allTimes: number
  1189. }) => void): void;
  1190. /**
  1191. * 播放器实例获取焦点(点击和右键)的时候触发的事件。
  1192. * @param event
  1193. * @param callback
  1194. */
  1195. on(event: JessibucaProMulti.EVENTS.focus, callback: (windowIndex: number,) => void): void;
  1196. /**
  1197. * 播放器实例失去焦点的时候触发的事件。
  1198. * @param event
  1199. * @param callback
  1200. */
  1201. on(event: JessibucaProMulti.EVENTS.blur, callback: (windowIndex: number,) => void): void;
  1202. /**
  1203. * 监听窗口不可见超时时间
  1204. * @param event
  1205. * @param callback
  1206. */
  1207. on(event: JessibucaProMulti.EVENTS.visibilityHiddenTimeout, callback: (windowIndex: number,) => void): void;
  1208. /**
  1209. * 该事件只有在使用websocket协议的时候才会触发
  1210. * @param event
  1211. * @param callback
  1212. */
  1213. on(event: JessibucaProMulti.EVENTS.websocketOpen, callback: (windowIndex: number,) => void): void;
  1214. /**
  1215. * 该事件只有在使用websocket协议的时候才会触发
  1216. * @param event
  1217. * @param callback
  1218. */
  1219. on(event: JessibucaProMulti.EVENTS.websocketClose, callback: (windowIndex: number,) => void): void;
  1220. /**
  1221. * 当play()或audioResume()进行音频恢复或者setVolume()更新音量时回调。
  1222. * @param event
  1223. * @param callback
  1224. */
  1225. on(event: JessibucaProMulti.EVENTS.audioResumeState, callback: (windowIndex: number, options: {
  1226. state: 'running' | 'suspended',
  1227. isRunning: boolean
  1228. }) => void): void
  1229. /**
  1230. * 监听方法
  1231. *
  1232. @example
  1233. jessibuca.on("load",function(){console.log('load')})
  1234. */
  1235. on(event: string, callback: Function): void;
  1236. }
  1237. export default JessibucaProMulti;