1 | import { ComponentType } from 'react'
|
2 | import { StandardProps, CommonEventFunction, NetStatus } from './common'
|
3 |
|
4 | interface LivePlayerProps extends StandardProps {
|
5 | /** 音视频地址。目前仅支持 flv, rtmp 格式
|
6 | * @supported weapp, tt
|
7 | */
|
8 | src?: string
|
9 |
|
10 | /** 模式
|
11 | * @default "live"
|
12 | * @supported weapp
|
13 | */
|
14 | mode?: keyof LivePlayerProps.Mode
|
15 |
|
16 | /** 自动播放
|
17 | * @default false
|
18 | * @supported weapp, tt
|
19 | */
|
20 | autoplay?: boolean
|
21 |
|
22 | /** 是否静音
|
23 | * @default false
|
24 | * @supported weapp, tt
|
25 | */
|
26 | muted?: boolean
|
27 |
|
28 | /** 画面方向
|
29 | * @default "vertical"
|
30 | * @supported weapp, tt
|
31 | */
|
32 | orientation?: keyof LivePlayerProps.Orientation
|
33 |
|
34 | /** 填充模式
|
35 | * @default "contain"
|
36 | * @supported weapp, tt
|
37 | */
|
38 | objectFit?: keyof LivePlayerProps.objectFit
|
39 |
|
40 | /** 进入后台时是否静音(已废弃,默认退台静音)
|
41 | * @default false
|
42 | * @supported weapp
|
43 | * @deprecated
|
44 | */
|
45 | backgroundMute?: boolean
|
46 |
|
47 | /** 最小缓冲区,单位s
|
48 | * @default 1
|
49 | * @supported weapp
|
50 | */
|
51 | minCache?: number
|
52 |
|
53 | /** 最大缓冲区,单位s
|
54 | * @default 3
|
55 | * @supported weapp
|
56 | */
|
57 | maxCache?: number
|
58 |
|
59 | /** 声音输出方式
|
60 | * @default "speaker"
|
61 | * @supported weapp
|
62 | */
|
63 | soundMode?: keyof LivePlayerProps.soundMode
|
64 |
|
65 | /** 当跳转到本小程序的其他页面时,是否自动暂停本页面的实时音视频播放
|
66 | * @default true
|
67 | * @supported weapp
|
68 | */
|
69 | autoPauseIfNavigate?: boolean
|
70 |
|
71 | /** 当跳转到其它微信原生页面时,是否自动暂停本页面的实时音视频播放
|
72 | * @default true
|
73 | * @supported weapp
|
74 | */
|
75 | autoPauseIfOpenNavigate?: boolean
|
76 |
|
77 | /** 设置小窗模式: push, pop,空字符串或通过数组形式设置多种模式(如: ["push", "pop"])
|
78 | * @supported weapp
|
79 | */
|
80 | pictureInPictureMode?: ('push' | 'pop')[] | 'push' | 'pop' | ''
|
81 |
|
82 | /** 播放状态变化事件,detail = {code}
|
83 | * @supported weapp, tt
|
84 | */
|
85 | onStateChange?: CommonEventFunction<LivePlayerProps.onStateChangeEventDetail>
|
86 |
|
87 | /** 全屏变化事件,detail = {direction, fullScreen}
|
88 | * @supported weapp, tt
|
89 | */
|
90 | onFullScreenChange?: CommonEventFunction<LivePlayerProps.onFullScreenChangeEventDetail>
|
91 |
|
92 | /** 网络状态通知,detail = {info}
|
93 | * @supported weapp
|
94 | */
|
95 | onNetStatus?: CommonEventFunction<LivePlayerProps.onNetStatusEventDetail>
|
96 |
|
97 | /** 播放音量大小通知,detail = {}
|
98 | * @supported weapp
|
99 | */
|
100 | onAudioVolumeNotify?: CommonEventFunction<{}>
|
101 |
|
102 | /** 播放器进入小窗
|
103 | * @supported weapp
|
104 | */
|
105 | onEnterPictureInPicture?: CommonEventFunction
|
106 |
|
107 | /** 播放器退出小窗
|
108 | * @supported weapp
|
109 | */
|
110 | onLeavePictureInPicture?: CommonEventFunction
|
111 | }
|
112 |
|
113 | declare namespace LivePlayerProps {
|
114 | /** mode 的合法值 */
|
115 | interface Mode {
|
116 | /** 直播 */
|
117 | live
|
118 | /** 实时通话,该模式时延更低 */
|
119 | RTC
|
120 | }
|
121 | /** orientation 的合法值 */
|
122 | interface Orientation {
|
123 | /** 竖直 */
|
124 | vertical
|
125 | /** 水平 */
|
126 | horizontal
|
127 | }
|
128 | /** objectFit 的合法值 */
|
129 | interface objectFit {
|
130 | /** 图像长边填满屏幕,短边区域会被填充⿊⾊ */
|
131 | contain
|
132 | /** 图像铺满屏幕,超出显示区域的部分将被截掉 */
|
133 | fillCrop
|
134 | }
|
135 | /** soundMode 的合法值 */
|
136 | interface soundMode {
|
137 | /** 扬声器 */
|
138 | speaker
|
139 | /** 听筒 */
|
140 | ear
|
141 | }
|
142 |
|
143 | interface onStateChangeEventDetail {
|
144 | /** 状态码 */
|
145 | code: number
|
146 | }
|
147 | interface onFullScreenChangeEventDetail {
|
148 | /** 方向 */
|
149 | direction: number
|
150 | /** 全屏 */
|
151 | fullScreen: number | boolean
|
152 | }
|
153 | interface onNetStatusEventDetail {
|
154 | info: NetStatus
|
155 | }
|
156 | /** 状态码 */
|
157 | interface Status {
|
158 | /** 已经连接服务器 */
|
159 | 2001
|
160 | /** 已经连接 RTMP 服务器,开始拉流 */
|
161 | 2002
|
162 | /** 网络接收到首个视频数据包(IDR) */
|
163 | 2003
|
164 | /** 视频播放开始 */
|
165 | 2004
|
166 | /** 视频播放进度 */
|
167 | 2005
|
168 | /** 视频播放结束 */
|
169 | 2006
|
170 | /** 视频播放Loading */
|
171 | 2007
|
172 | /** 解码器启动 */
|
173 | 2008
|
174 | /** 视频分辨率改变 */
|
175 | 2009
|
176 | /** 网络断连,且经多次重连抢救无效,更多重试请自行重启播放 */
|
177 | '-2301'
|
178 | /** 获取加速拉流地址失败 */
|
179 | '-2302'
|
180 | /** 当前视频帧解码失败 */
|
181 | 2101
|
182 | /** 当前音频帧解码失败 */
|
183 | 2102
|
184 | /** 网络断连, 已启动自动重连 */
|
185 | 2103
|
186 | /** 网络来包不稳:可能是下行带宽不足,或由于主播端出流不均匀 */
|
187 | 2104
|
188 | /** 当前视频播放出现卡顿 */
|
189 | 2105
|
190 | /** 硬解启动失败,采用软解 */
|
191 | 2106
|
192 | /** 当前视频帧不连续,可能丢帧 */
|
193 | 2107
|
194 | /** 当前流硬解第一个I帧失败,SDK自动切软解 */
|
195 | 2108
|
196 | /** RTMP -DNS解析失败 */
|
197 | 3001
|
198 | /** RTMP服务器连接失败 */
|
199 | 3002
|
200 | /** RTMP服务器握手失败 */
|
201 | 3003
|
202 | /** RTMP 读/写失败 */
|
203 | 3005
|
204 | }
|
205 | }
|
206 |
|
207 | /** 实时音视频播放。相关api:Taro.createLivePlayerContext
|
208 | *
|
209 | * 需要先通过类目审核,再在小程序管理后台,“设置”-“接口设置”中自助开通该组件权限。
|
210 | * @classification media
|
211 | * @supported weapp, tt
|
212 | * @example_react
|
213 | * ```tsx
|
214 | * class App extends Components {
|
215 | * render () {
|
216 | * return (
|
217 | * <LivePlayer src='url' mode='live' autoplay />
|
218 | * )
|
219 | * }
|
220 | * }
|
221 | * ```
|
222 | * @example_vue
|
223 | * ```html
|
224 | * <template>
|
225 | * <live-player src="url" mode="live" :autoplay="true" />
|
226 | * </template>
|
227 | * ```
|
228 | * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html
|
229 | */
|
230 | declare const LivePlayer: ComponentType<LivePlayerProps>
|
231 |
|
232 | export { LivePlayer, LivePlayerProps }
|