jessibuca-pro.d.ts 40 KB

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