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