UNPKG

19.3 kBTypeScriptView Raw
1import { ComponentType } from 'react'
2import { StandardProps, CommonEventFunction } from './common'
3interface VideoProps extends StandardProps {
4 /** 要播放视频的资源地址
5 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
6 */
7 src: string
8 /** 指定视频时长
9 * @supported weapp, alipay, qq, h5, rn, harmony, harmony_hybrid
10 */
11 duration?: number
12 /** 是否显示默认播放控件(播放/暂停按钮、播放进度、时间)
13 * @default true
14 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
15 */
16 controls?: boolean
17 /** 弹幕列表
18 * @supported weapp, swan, qq, h5, harmony_hybrid
19 */
20 danmuList?: any[]
21 /** 是否显示弹幕按钮,只在初始化时有效,不能动态变更
22 * @default false
23 * @supported weapp, swan, qq, h5, harmony_hybrid
24 */
25 danmuBtn?: boolean
26 /** 是否展示弹幕,只在初始化时有效,不能动态变更
27 * @default false
28 * @supported weapp, swan, qq, h5, harmony_hybrid
29 */
30 enableDanmu?: boolean
31 /** 是否自动播放
32 * @default false
33 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
34 */
35 autoplay?: boolean
36 /** 是否循环播放
37 * @default false
38 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
39 */
40 loop?: boolean
41 /** 是否静音播放
42 * @default false
43 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
44 */
45 muted?: boolean
46 /** 指定视频初始播放位置
47 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony_hybrid
48 */
49 initialTime?: number
50 /** 在非全屏模式下,是否开启亮度与音量调节手势
51 * @default false
52 * @supported weapp, swan, qq
53 */
54 pageGesture?: boolean
55 /** 设置全屏时视频的方向,不指定则根据宽高比自动判断。有效值为 0(正常竖向), 90(屏幕逆时针90度), -90(屏幕顺时针90度)
56 * @supported weapp, alipay, swan, tt, qq
57 */
58 direction?: number
59 /** 若不设置,宽度大于240时才会显示
60 * @default true
61 * @supported weapp, swan, qq, h5, harmony_hybrid
62 */
63 showProgress?: boolean
64 /** 是否显示全屏按钮
65 * @default true
66 * @supported weapp, alipay, swan, tt, qq, h5, harmony_hybrid
67 */
68 showFullscreenBtn?: boolean
69 /** 是否显示视频底部控制栏的播放按钮
70 * @default true
71 * @supported weapp, alipay, swan, tt, qq, h5, harmony_hybrid
72 */
73 showPlayBtn?: boolean
74 /** 是否显示视频中间的播放按钮
75 * @default true
76 * @supported weapp, alipay, swan, qq, h5, rn, harmony_hybrid
77 */
78 showCenterPlayBtn?: boolean
79 /** 是否开启控制进度的手势
80 * @default true
81 * @supported weapp, alipay, swan, tt, qq, h5, harmony_hybrid
82 */
83 enableProgressGesture?: boolean
84 /** 当视频大小与 video 容器大小不一致时,视频的表现形式
85 * @default "contain"
86 * @supported weapp, alipay, swan, tt, qq, jd, h5, harmony, harmony_hybrid
87 */
88 objectFit?: keyof VideoProps.ObjectFit
89 /** 视频封面的图片网络资源地址,如果 controls 属性值为 false 则设置 poster 无效
90 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony_hybrid
91 */
92 poster?: string
93 /** 是否显示静音按钮
94 * @default false
95 * @supported weapp, alipay, swan, tt, qq, h5, harmony_hybrid
96 */
97 showMuteBtn?: boolean
98 /** 视频的标题,全屏时在顶部展示
99 * @supported weapp, swan, qq
100 */
101 title?: string
102 /** 播放按钮的位置
103 * - `bottom`: controls bar 上
104 * - `center`: 视频中间
105 *
106 * @default 'bottom'
107 * @supported weapp, tt, qq
108 */
109 playBtnPosition?: keyof VideoProps.PlayBtnPosition
110 /** 是否开启播放手势,即双击切换播放/暂停
111 * @default false
112 * @supported weapp, swan, tt, qq, h5, harmony_hybrid
113 */
114 enablePlayGesture?: boolean
115 /** 当跳转到其它小程序页面时,是否自动暂停本页面的视频
116 * @default true
117 * @supported weapp, qq
118 */
119 autoPauseIfNavigate?: boolean
120 /** 当跳转到其它微信原生页面时,是否自动暂停本页面的视频
121 * @default true
122 * @supported weapp, qq
123 */
124 autoPauseIfOpenNative?: boolean
125 /** 在非全屏模式下,是否开启亮度与音量调节手势(同 `page-gesture`)
126 * @default false
127 * @supported weapp, swan, tt, h5, harmony_hybrid
128 */
129 vslideGesture?: boolean
130 /** 在全屏模式下,是否开启亮度与音量调节手势
131 * @default true
132 * @supported weapp, swan, tt, h5, harmony_hybrid
133 */
134 vslideGestureInFullscreen?: boolean
135 /** 视频前贴广告单元ID,更多详情可参考开放能力[视频前贴广告](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/ad/video-patch-ad.html)
136 * @supported weapp
137 */
138 adUnitId?: string
139 /** 用于给搜索等场景作为视频封面展示,建议使用无播放 icon 的视频封面图,只支持网络地址
140 * @supported weapp
141 */
142 posterForCrawler?: string
143 /** 显示投屏按钮。只安卓且同层渲染下生效,支持 DLNA 协议
144 * @supported weapp
145 */
146 showCastingButton?: boolean
147 /**
148 * 设置小窗模式: push, pop,空字符串或通过数组形式设置多种模式(如: ["push", "pop"])
149 * @supported weapp
150 */
151 pictureInPictureMode?: ('push' | 'pop')[] | 'push' | 'pop' | ''
152 /**
153 * 是否在小窗模式下显示播放进度(目前有bug,先注释掉)
154 * @supported weapp
155 *
156 * 先注释掉,原因如下:
157 * 该属性超过了 wxml 属性的长度限制,实际无法使用且导致编译报错。可等微信官方修复后再放开。
158 * 参考1:https://developers.weixin.qq.com/community/develop/doc/000a429beb87f0eac07acc0fc5b400
159 * 参考2: https://developers.weixin.qq.com/community/develop/doc/0006883619c48054286a4308258c00?_at=vyxqpllafi
160 *
161 */
162 // pictureInPictureShowProgress?: boolean
163
164 /**
165 * 是否开启手机横屏时自动全屏,当系统设置开启自动旋转时生效
166 * @supported weapp
167 */
168 enableAutoRotation?: boolean
169 /**
170 * 是否显示锁屏按钮,仅在全屏时显示,锁屏后控制栏的操作
171 * @supported weapp, tt
172 */
173 showScreenLockButton?: boolean
174 /**
175 * 是否显示截屏按钮,仅在全屏时显示
176 * @supported weapp
177 */
178 showSnapshotButton?: boolean
179 /**
180 * 是否展示后台音频播放按钮
181 * @supported weapp
182 */
183 showBackgroundPlaybackButton?: boolean
184 /**
185 * 进入后台音频播放后的通知栏图标(Android 独有)
186 * @supported weapp
187 */
188 backgroundPoster?: string
189 /** 用于透传 `WebComponents` 上的属性到内部 H5 标签上
190 * @supported h5, harmony_hybrid
191 */
192 nativeProps?: Record<string, unknown>
193 /** 是否展示底部进度条
194 * @supported weapp
195 * @default true
196 */
197 showBottomProgress?: boolean
198 /** 是否在小窗模式下显示播放进度
199 * @supported weapp
200 */
201 pictureInPictureShowProgress?: string
202 /** 格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本;
203 * @supported weapp
204 */
205 referrerPolicy?: 'origin' | 'no-referrer'
206 /** 是否是 DRM 视频源
207 * @supported weapp
208 */
209 isDrm?: boolean
210 /** DRM 设备身份认证 url,仅 is-drm 为 true 时生效 (Android)
211 * @supported weapp
212 */
213 provisionUrl?: string
214 /** DRM 设备身份认证 url,仅 is-drm 为 true 时生效 (iOS)
215 * @supported weapp
216 */
217 certificateUrl?: string
218 /** DRM 获取加密信息 url,仅 is-drm 为 true 时生效
219 * @supported weapp
220 */
221 licenseUrl?: string
222 /** 当 poster 高宽比跟视频高宽不匹配时,如何显示 poster,设置规则同 background-size 一致。
223 * @supported alipay
224 */
225 posterSize?: string
226 /** 当底部工具条隐藏时,是否显示细进度条(controls=false 时设置无效)。
227 * @supported alipay
228 */
229 showThinProgressBar?: string
230 /** 移动网络提醒样式。
231 *
232 * 0 - 不提醒
233 * 1 - tip 提醒
234 * 2 - 阻塞提醒(无消耗流量大小)
235 * 3 - 阻塞提醒(有消耗流量大小提醒)
236 *
237 * @supported alipay, jd
238 */
239 mobilenetHintType?: number
240 /** 浮窗设置。暂时不支持全局浮窗。
241 * 可选值:
242 *
243 * none:无浮窗。
244 * page:页面内浮窗。
245 * @supported alipay
246 */
247 floatingMode?: string
248 /** 非 wifi 环境下是否显示继续播放浮层
249 * @supported swan
250 */
251 showNoWifiTip?: string
252 /** 全屏模式下,是否显示锁屏按钮
253 * @supported swan
254 */
255 showLockBtn?: string
256 /** 是否显示倍速播放按钮
257 * @supported swan
258 */
259 showRateBtn?: string
260 /** 全屏模式下,是否显示侧边栏控制按钮
261 * @supported swan
262 */
263 showVslideBtnInFullscreen?: string
264 /** 是否进入无声视频模式,进入无声视频模式后,视频将静音播放且不响应系统物理音量变化,点击播放器提示无声视频,手势调节失效
265 * @supported swan
266 */
267 silentPlay?: string
268 /** 前贴广告的 unit id
269 * @supported tt
270 */
271 preRollUnitId?: string
272 /** 后贴广告的 unit id
273 * @supported tt
274 */
275 postRollUnitId?: string
276 /** 是否显示倍速控件,点击倍速控件后可选择倍速,可选值: 0.75/1.0/1.25/1.5/2
277 * @supported tt
278 */
279 showPlaybackRateBtn?: string
280 /** video 播放时宿主退出后台后开启小窗播放,iOS 14 及以上版本支持。开启时首次退出后台后给予弹窗提示用户授权,授权完成后可以到小程序「设置」中重设。支持场景见后台小窗播放
281 * @supported tt
282 */
283 enablePlayInBackground?: string
284 /** 设置署名水印
285 * @supported tt
286 */
287 signature?: string
288 /** 指定码率上界,单位为比特每秒
289 * @supported weapp
290 */
291 preferredPeakBitRate?: number
292 /** 是否为直播源
293 * @supported weapp
294 */
295 isLive?: boolean
296 /** 清晰度,设置清晰度列表和默认播放的清晰度。切换清晰度按钮仅在全屏时展示,属性说明详见 Definition 类型说明。需要保证 src 和 definition 中有一个为必填,若同时设置了 src 和 definition,definition 优先级高于 src
297 * @supported tt
298 */
299 definition?: string
300 /** 当开始/继续播放时触发 play 事件
301 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
302 */
303 onPlay?: CommonEventFunction
304 /** 当暂停播放时触发 pause 事件
305 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
306 */
307 onPause?: CommonEventFunction
308 /** 当播放到末尾时触发 ended 事件
309 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
310 */
311 onEnded?: CommonEventFunction
312 /** 播放进度变化时触发, 触发频率 250ms 一次
313 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
314 */
315 onTimeUpdate?: CommonEventFunction<VideoProps.onTimeUpdateEventDetail>
316 /** 当视频进入和退出全屏时触发
317 *
318 * @supported alipay, h5, rn, harmony, harmony_hybrid
319 */
320 onFullscreenChange?: CommonEventFunction<VideoProps.onFullscreenChangeEventDetail>
321 /** 视频出现缓冲时触发
322 *
323 * @supported weapp, swan, tt, qq, jd
324 */
325 onWaiting?: CommonEventFunction<VideoProps.onWaitingEventDetail>
326 /** 视频播放出错时触发
327 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony_hybrid
328 */
329 onError?: CommonEventFunction
330 /** 加载进度变化时触发,只支持一段加载
331 * @supported weapp, tt, qq, h5, harmony, harmony_hybrid
332 */
333 onProgress?: CommonEventFunction<VideoProps.onProgressEventDetail>
334 /** 视频元数据加载完成时触发
335 * @supported weapp, swan, tt, jd, rn, harmony
336 */
337 onLoadedMetaData?: CommonEventFunction<VideoProps.onLoadedMetaDataEventDetail>
338 /**
339 * 播放器进入小窗
340 * @supported weapp
341 */
342 onEnterPictureInPicture?: CommonEventFunction
343 /**
344 * 播放器退出小窗
345 * @supported weapp
346 */
347 onLeavePictureInPicture?: CommonEventFunction
348 /**
349 * seek 完成时触发
350 * @supported weapp, tt
351 */
352 onSeekComplete?: CommonEventFunction
353 /** 视频进入和退出全屏时触发
354 * @supported weapp, alipay, swan, tt, qq, jd
355 */
356 onFullScreenChange?: CommonEventFunction<VideoProps.onFullscreenChangeEventDetail>
357 /** 切换 controls 显示隐藏时触发。
358 * @supported weapp, swan
359 */
360 onControlsToggle?: CommonEventFunction<VideoProps.onControlsToggleEventDetail>
361 /** 视频出现缓冲时触发。
362 * @supported alipay
363 */
364 onLoading?: CommonEventFunction
365 /** 点击视频 view 时触发
366 * @supported alipay
367 */
368 onTap?: CommonEventFunction<VideoProps.onTapEventDetail>
369 /** 用户操作事件
370 * @supported alipay
371 */
372 onUserAction?: CommonEventFunction<VideoProps.onUserActionEventDetail>
373 /** 视频播放终止。
374 * @supported alipay
375 */
376 onStop?: CommonEventFunction
377 /** 当视频加载完真正开始播放时触发。
378 * @supported alipay
379 */
380 onRenderStart?: CommonEventFunction
381 /** 贴片广告开始播放时触发
382 * @supported tt
383 */
384 onAdStart?: CommonEventFunction<VideoProps.onAdTypeCommonEventDetail>
385 /** 贴片广告播放结束时触发
386 * @supported tt
387 */
388 onAdEnded?: CommonEventFunction<VideoProps.onAdTypeCommonEventDetail>
389 /** 贴片广告非自然结束时触发,如:用户关闭广告或广告播放过程中 video 组件被销毁
390 * @supported tt
391 */
392 onAdClose?: CommonEventFunction<VideoProps.onAdTypeCommonEventDetail>
393 /** 贴片广告加载失败时触发
394 * @supported tt
395 */
396 onAdError?: CommonEventFunction<VideoProps.onAdTypeCommonEventDetail>
397 /** 视频倍速改变完成时触发。返回改变后的倍速值
398 * @supported tt
399 */
400 onPlayBackRateChange?: CommonEventFunction<{
401 playbackRate: string
402 }>
403 /** 静音状态改变完成时触发。返回当前是否静音
404 * @supported tt
405 */
406 onMuteChange?: CommonEventFunction<{
407 isMuted: boolean
408 }>
409 /** 点击控件时触发。返回当前点击的控件类型
410 * @supported tt
411 */
412 onControlTap?: CommonEventFunction<{
413 controlType
414 }>
415 /** 进入小窗播放时触发
416 * @supported tt
417 */
418 onEnterBackground?: CommonEventFunction
419 /** 关闭小窗播放时触发
420 * @supported tt
421 */
422 onCloseBackground?: CommonEventFunction
423 /** 离开小窗进入 app 事件时触发
424 * @supported tt
425 */
426 onLeaveBackground?: CommonEventFunction
427 /** 否
428 * @supported jd
429 */
430 onLoadedData?: CommonEventFunction
431 /** 否
432 * @supported jd
433 */
434 onLoadStart?: CommonEventFunction
435 /** 否
436 * @supported jd, harmony
437 */
438 onSeeked?: CommonEventFunction
439 /** 否
440 * @supported jd, harmony
441 */
442 onSeeking?: CommonEventFunction
443 /** 贴片广告加载成功时触发,event.detail = { adType: 'preRollAd' | 'postRollAd' }
444 * @supported tt
445 */
446 onAdLoad?: CommonEventFunction
447 /** 用户选择投屏设备时触发 detail = { state: "success"/"fail" }
448 * @supported weapp
449 */
450 onCastingUserSelect?: CommonEventFunction
451 /** 投屏成功/失败时触发 detail = { type, state: "success"/"fail" }
452 * @supported weapp
453 */
454 onCastingStateChange?: CommonEventFunction
455 /** 投屏被中断时触发
456 * @supported weapp
457 */
458 onCastingInterrupt?: CommonEventFunction
459}
460declare namespace VideoProps {
461 /** direction 的合法值 */
462 interface direction {
463 /** 正常竖向 */
464 0
465 /** 屏幕逆时针90度 */
466 90
467 /** 屏幕顺时针90度 */
468 '-90'
469 }
470 /** objectFit 的合法值 */
471 interface ObjectFit {
472 /** 包含 */
473 contain
474 /** 填充 */
475 fill
476 /** 覆盖 */
477 cover
478 }
479 /** playBtnPosition 的合法值 */
480 interface PlayBtnPosition {
481 /** controls bar上 */
482 bottom
483 /** 视频中间 */
484 center
485 }
486 interface onTimeUpdateEventDetail {
487 /** 当前时间 */
488 currentTime: number
489 /** 持续时间 */
490 duration: number
491 /** 用户实际观看时长
492 * @supported alipay
493 */
494 userPlayDuration: number
495 /** 视频总时长
496 * @supported alipay
497 */
498 videoDuration: number
499 }
500 interface onFullscreenChangeEventDetail {
501 /** 方向 */
502 direction: 'vertical' | 'horizontal'
503 /** 全屏 */
504 fullScreen: number | boolean
505 }
506 interface onWaitingEventDetail {
507 /** 方向 */
508 direction: 'vertical' | 'horizontal'
509 /** 全屏 */
510 fullScreen: number | boolean
511 }
512 interface onProgressEventDetail {
513 /** 百分比 */
514 buffered: number
515 }
516 interface onLoadedMetaDataEventDetail {
517 /** 视频宽度 */
518 width: number
519 /** 视频高度 */
520 height: number
521 /** 持续时间 */
522 duration: number
523 }
524 interface onControlsToggleEventDetail {
525 /** 是否显示 */
526 show: boolean
527 }
528 interface onTapEventDetail {
529 ptInView: {
530 x: number
531 y: number
532 }
533 }
534 interface onUserActionEventDetail {
535 /** 用户操作的元素 */
536 tag: keyof UserActionTag | string
537 value: number
538 }
539 interface UserActionTag {
540 /** 底部播放按钮 */
541 play
542 /** 中心播放按钮 */
543 centerplay
544 /** 静音按钮 */
545 mute
546 /** 全屏按钮 */
547 fullscreen
548 /** 重试按钮 */
549 retry
550 /** 网络提醒的播放按钮 */
551 mobilenetplay
552 }
553 interface onAdTypeCommonEventDetail {
554 /** 广告类型 */
555 adType: 'preRollAd' | 'postRollAd'
556 }
557}
558/** 视频。相关api:Taro.createVideoContext
559 * @classification media
560 * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
561 * @example_react
562 * ```tsx
563 * export default class PageView extends Component {
564 * constructor() {
565 * super(...arguments)
566 * }
567 *
568 * render() {
569 * return (
570 * <View className='components-page'>
571 * <Video
572 * id='video'
573 * src='https://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400'
574 * poster='https://misc.aotu.io/booxood/mobile-video/cover_900x500.jpg'
575 * initialTime={0}
576 * controls={true}
577 * autoplay={false}
578 * loop={false}
579 * muted={false}
580 * />
581 * </View>
582 * )
583 * }
584 * }
585 * ```
586 * @example_vue
587 * ```html
588 * <template>
589 * <video
590 * id="video"
591 * src="https://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400"
592 * poster="https://misc.aotu.io/booxood/mobile-video/cover_900x500.jpg"
593 * initial-time="0"
594 * :controls="true"
595 * :autoplay="false"
596 * :loop="false"
597 * :muted="false"
598 * />
599 * </template>
600 * ```
601 * @see https://developers.weixin.qq.com/miniprogram/dev/component/video.html
602 */
603declare const Video: ComponentType<VideoProps>
604export { Video, VideoProps }