@besovideo/webrtc-player 0.7.2 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,268 +1,290 @@
1
- # @besovideo/webrtc-player
2
-
3
- ![npm](https://img.shields.io/npm/v/@besovideo/webrtc-player) ![NPM](https://img.shields.io/npm/l/@besovideo/webrtc-player) ![npm](https://img.shields.io/npm/dt/@besovideo/webrtc-player)
4
-
5
- [![NPM](https://nodei.co/npm/@besovideo/webrtc-player.png)](https://nodei.co/npm/@besovideo/webrtc-player/)
6
-
7
- ## 简介 Introduction
8
-
9
- > 设备视频播放、对讲封装
10
-
11
- ## 安装 Installation
12
-
13
- **use npm**
14
-
15
- ```shell
16
- npm i @besovideo/webrtc-player
17
- ```
18
-
19
- **use yarn**
20
-
21
- ```
22
- yarn add @besovideo/webrtc-player
23
- ```
24
-
25
- ## 示例 Example
26
-
27
- **视频**
28
-
29
- ```typescript
30
- import {
31
- PuPlayer,
32
- IPuPlayerProps,
33
- IPuPlayerInstance,
34
- clearAllDialog,
35
- } from "@besovideo/webrtc-player";
36
- import "@besovideo/webrtc-player/dist/main.es.css";
37
-
38
- const { instance } = PuPlayer({
39
- // (可选) 容器节点 注意一个容器内只能存在一个实例 当container为假值(包括false、null、undefined)时 将返回实例引用的dom节点 容器必须指定高度 参考高德地图
40
- container: document.getElementById("player_container"),
41
- // 必填 设备选项
42
- puOption: {
43
- // 设备id
44
- id: "PU_123456",
45
- // 设备通道号
46
- index: 0,
47
- },
48
- // 必填 用户授权令牌
49
- token: "Y3UrQ1VfYWRtestYDHYUAStest",
50
- // (可选) peer connection 连接媒体配置
51
- defaultMediaOption: {
52
- // 启用音频
53
- audio: true,
54
- // 启用视频
55
- video: true,
56
- },
57
- // (可选) 是否静音
58
- muted: false,
59
- // (可选) 指定video如何适应容器 (fill: 填充容器 ; contain :保持视频比例适应容器)
60
- videoFit: "fill",
61
- // (可选) 指定请求url路径前缀 可使用protocol+host 如:http://192.168.6.111:9780
62
- // apiPrefix: "/test_api/prefix",
63
-
64
- // (可选) 用于测试播放视频 (存在时优先使用url播放,为浏览器直接播放)
65
- // testUrl: "https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",
66
- // (可选) 连接建立后回调
67
- onConnected: () => {},
68
- // (可选) 连接建立失败时的回调
69
- onConnectedFailed: () => {},
70
- // (可选) 连接断开后回调
71
- onDisConnected: () => {},
72
- // (可选) 双击是否全屏
73
- fullScreenOnDblclick: true,
74
- // (可选) 启用控制器
75
- enableController: false
76
- });
77
-
78
- // setVideoFit 更改videoFit
79
- instance.setVideoFit("contain");
80
- // setToken 更改请求时的token
81
- instance.setToken("newTTTTToken");
82
- // setPuOption 更改请求的设备信息
83
- instance.setPuOption({
84
- id: "PU_12345test",
85
- index: 123,
86
- });
87
- // setApiPrefix 更改请求时的url前缀
88
- instance.setApiPrefix("/测试改前缀");
89
- // open 异步 先关闭再开始建立连接 (可选参数: muted:boolean = false 是否静音打开)
90
- instance.open();
91
- // close 异步 释放dialog 并关闭 当前的 peer connection
92
- instance.close();
93
- // destroy 执行close 并从dom移除PuPlayer节点
94
- instance.destroy();
95
- // moveTo 将节点移动至新的容器
96
- instance.moveTo(document.getElementById("new_player_container"));
97
- // getCurrentContainer 获得当前所在的容器
98
- instance.getCurrentContainer();
99
- // hidden 隐藏 异步 (可选参数: muted?:boolean 是否静音 可不传)
100
- instance.hidden(true);
101
- // display 显示 (可选参数: muted?:boolean 是否静音 可不传)
102
- instance.display();
103
- // play 播放 异步
104
- instance.play();
105
- // mute 切换静音 (可选参数: muted:boolean = false 是否静音)
106
- instance.mute(true);
107
- // 获取puPlayer的div
108
- instance.getPlayerElement();
109
- // 获取内部引用的video元素
110
- instance.getVideoElement();
111
-
112
- // clearAllDialog 异步 释放全部打开的dialog 不管是音视频还是对讲
113
- clearAllDialog();
114
- ```
115
-
116
- **对讲**
117
-
118
- ```typescript
119
- import {
120
- Intercom,
121
- IIntercomProps,
122
- IIntercomInstance,
123
- } from "@besovideo/webrtc-player";
124
- import "@besovideo/webrtc-player/dist/main.es.css";
125
-
126
- const { instance } = Intercom({
127
- // 必填 设备选项
128
- puOption: {
129
- // 设备id
130
- id: "PU_123456",
131
- // 设备通道号
132
- index: 0,
133
- },
134
- // 必填 用户授权令牌
135
- token: "Y3UrQ1VfYWRtestYDHYUAStest",
136
- // (可选) 连接建立后回调
137
- onConnected: () => {},
138
- // (可选) 连接建立失败时的回调
139
- onConnectedFailed: () => {},
140
- // (可选) 连接断开后回调
141
- onDisConnected: () => {},
142
- //(可选) 无法获取用户麦克风时
143
- onGetUserMediaFailed: () => {},
144
- // (可选) 指定请求url的前缀 方便代理请求
145
- // apiPrefix: "/test_api/prefix",
146
- });
147
- ```
148
-
149
- **会议**
150
-
151
- ```typescript
152
- import {
153
- Conference,
154
- IConferenceProps,
155
- IConferenceInstance,
156
- } from "@besovideo/webrtc-player";
157
- import "@besovideo/webrtc-player/dist/main.es.css";
158
-
159
- const { instance } = Conference({
160
- // 必填 设备选项
161
- confOption: {
162
- // 会议id
163
- id: "test89312",
164
- // 会议成员ID
165
- index: 0,
166
- },
167
- // 必填 用户授权令牌
168
- token: "Y3UrQ1VfYWRtestYDHYUAStest",
169
- // (可选) 连接建立后回调
170
- onConnected: () => {},
171
- // (可选) 连接建立失败时的回调
172
- onConnectedFailed: () => {},
173
- // (可选) 连接断开后回调
174
- onDisConnected: () => {},
175
- //(可选) 无法获取用户麦克风时
176
- onGetUserMediaFailed: () => {},
177
- // (可选) 指定请求url的前缀 方便代理请求
178
- // apiPrefix: "/test_api/prefix",
179
- });
180
- ```
181
-
182
- **Vue 示例**
183
-
184
- ```vue
185
- <template>
186
- <div ref="testRef" class="container"></div>
187
- <div ref="test2Ref" class="container2"></div>
188
- <button @click="close">关闭</button>
189
- </template>
190
-
191
- <script lang="ts">
192
- import { defineComponent, onMounted, ref } from "vue";
193
- import { PuPlayer, IPuPlayerInstance } from "@besovideo/webrtc-player";
194
- import "@besovideo/webrtc-player/dist/main.es.css";
195
-
196
- export default defineComponent({
197
- name: "Test",
198
- props: {
199
- // 设备id号
200
- puId: {
201
- type: String,
202
- required: true,
203
- },
204
- // 设备通道号
205
- index: {
206
- type: Number,
207
- required: true,
208
- },
209
- },
210
- setup(props) {
211
- const testRef = ref(null);
212
- const test2Ref = ref(null);
213
- const instanceRef = ref<IPuPlayerInstance | null>(null);
214
-
215
- const init = async () => {
216
- const { instance } = PuPlayer({
217
- container: testRef.value,
218
- puOption: { id: props.puId, index: props.index },
219
- token:
220
- "Y3UrQ1VfYWRtaW4rYWRtaW4rMTQzOSsxOTMwMTUrMTYyNTIwMjU3OCthN2I0Y2JiZDliMzkwZWUy",
221
- });
222
- console.log("初始化播放器完成:", instance);
223
- instanceRef.value = instance;
224
-
225
- try {
226
- await instance.open();
227
- } catch (e) {}
228
-
229
- setTimeout(() => {
230
- // 测试移动到另一个容器内
231
- console.log("移动节点");
232
- instance.moveTo(test2Ref.value);
233
- }, 5000);
234
- };
235
-
236
- onMounted(() => {
237
- init();
238
- });
239
-
240
- return {
241
- testRef,
242
- test2Ref,
243
- close: () => instanceRef.value?.close(),
244
- };
245
- },
246
- });
247
- </script>
248
-
249
- <style lang="scss" scoped>
250
- .container {
251
- height: 300px;
252
- }
253
- </style>
254
- ```
255
-
256
- ## 开发 Dev
257
-
258
- ```shell
259
- # 开发运行
260
- yarn
261
- yarn start
262
-
263
- # 打包和发布
264
- make publish
265
-
266
- ```
267
-
268
- [环境变量切换方式](https://github.com/entropitor/dotenv-cli/pull/44)
1
+ # @besovideo/webrtc-player
2
+
3
+ ![npm](https://img.shields.io/npm/v/@besovideo/webrtc-player) ![NPM](https://img.shields.io/npm/l/@besovideo/webrtc-player) ![npm](https://img.shields.io/npm/dt/@besovideo/webrtc-player)
4
+
5
+ [![NPM](https://nodei.co/npm/@besovideo/webrtc-player.png)](https://nodei.co/npm/@besovideo/webrtc-player/)
6
+
7
+ ## 简介 Introduction
8
+
9
+ > 设备视频播放、对讲封装
10
+
11
+ ## 安装 Installation
12
+
13
+ **use npm**
14
+
15
+ ```shell
16
+ npm i @besovideo/webrtc-player
17
+ ```
18
+
19
+ **use yarn**
20
+
21
+ ```
22
+ yarn add @besovideo/webrtc-player
23
+ ```
24
+
25
+ ## 示例 Example
26
+
27
+ **视频**
28
+
29
+ ```typescript
30
+ import {
31
+ PuPlayer,
32
+ IPuPlayerProps,
33
+ IPuPlayerInstance,
34
+ clearAllDialog,
35
+ } from "@besovideo/webrtc-player";
36
+ import "@besovideo/webrtc-player/dist/main.es.css";
37
+
38
+ const { instance } = PuPlayer({
39
+ // (可选) 容器节点 注意一个容器内只能存在一个实例 当container为假值(包括false、null、undefined)时 将返回实例引用的dom节点 容器必须指定高度 参考高德地图
40
+ container: document.getElementById("player_container"),
41
+ // 必填 设备选项
42
+ puOption: {
43
+ // 设备id
44
+ id: "PU_123456",
45
+ // 设备通道号
46
+ index: 0,
47
+ },
48
+ // 必填 用户授权令牌
49
+ token: "Y3UrQ1VfYWRtestYDHYUAStest",
50
+ // (可选) peer connection 连接媒体配置
51
+ defaultMediaOption: {
52
+ // 启用音频
53
+ audio: true,
54
+ // 启用视频
55
+ video: true,
56
+ },
57
+ // (可选) 是否静音
58
+ muted: false,
59
+ // (可选) 指定video如何适应容器 (fill: 填充容器 ; contain :保持视频比例适应容器)
60
+ videoFit: "fill",
61
+ // (可选) 指定请求url路径前缀 可使用protocol+host 如:http://192.168.6.111:9780
62
+ // apiPrefix: "/test_api/prefix",
63
+
64
+ // (可选) 用于测试播放视频 (存在时优先使用url播放,为浏览器直接播放)
65
+ // testUrl: "https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4",
66
+ // (可选) 连接建立后回调
67
+ onConnected: () => {},
68
+ // (可选) 连接建立失败时的回调
69
+ onConnectedFailed: () => {},
70
+ // (可选) 连接断开后回调
71
+ onDisConnected: () => {},
72
+ // (可选) 双击是否全屏
73
+ fullScreenOnDblclick: true,
74
+ // (可选) 启用控制器
75
+ enableController: false,
76
+ // (可选) 禁用控制器的控制项 下面示例中禁用了云台控制
77
+ disabledControls: ["ptzControl"],
78
+ });
79
+
80
+ // setVideoFit 更改videoFit
81
+ instance.setVideoFit("contain");
82
+ // setToken 更改请求时的token
83
+ instance.setToken("newTTTTToken");
84
+ // setPuOption 更改请求的设备信息
85
+ instance.setPuOption({
86
+ id: "PU_12345test",
87
+ index: 123,
88
+ });
89
+ // setApiPrefix 更改请求时的url前缀
90
+ instance.setApiPrefix("/测试改前缀");
91
+ // open 异步 先关闭再开始建立连接 (可选参数: muted:boolean = false 是否静音打开)
92
+ instance.open();
93
+ // close 异步 释放dialog 并关闭 当前的 peer connection
94
+ instance.close();
95
+ // destroy 执行close 并从dom移除PuPlayer节点
96
+ instance.destroy();
97
+ // moveTo 将节点移动至新的容器
98
+ instance.moveTo(document.getElementById("new_player_container"));
99
+ // getCurrentContainer 获得当前所在的容器
100
+ instance.getCurrentContainer();
101
+ // hidden 隐藏 异步 (可选参数: muted?:boolean 是否静音 可不传)
102
+ instance.hidden(true);
103
+ // display 显示 (可选参数: muted?:boolean 是否静音 可不传)
104
+ instance.display();
105
+ // play 播放 异步
106
+ instance.play();
107
+ // mute 切换静音 (可选参数: muted:boolean = false 是否静音)
108
+ instance.mute(true);
109
+ // 获取puPlayer的div
110
+ instance.getPlayerElement();
111
+ // 获取内部引用的video元素
112
+ instance.getVideoElement();
113
+
114
+ // clearAllDialog 异步 释放全部打开的dialog 不管是音视频还是对讲
115
+ clearAllDialog();
116
+ ```
117
+
118
+ - Controls 控制项列表
119
+
120
+ ```typescript
121
+ // 全部控制项
122
+ [
123
+ "volume",
124
+ "volumeSlider",
125
+ "information",
126
+ "screenshot",
127
+ "record",
128
+ "fullscreen",
129
+ "rotate",
130
+ "ptzControl",
131
+ ]
132
+ // 在创建实例时 传入参数disabledControls数组 可关闭相关功能
133
+ // 如不使用全屏按钮、云台控制器
134
+ disabledControls: ["fullscreen", "ptzControl"]
135
+
136
+ ```
137
+
138
+ **对讲**
139
+
140
+ ```typescript
141
+ import {
142
+ Intercom,
143
+ IIntercomProps,
144
+ IIntercomInstance,
145
+ } from "@besovideo/webrtc-player";
146
+ import "@besovideo/webrtc-player/dist/main.es.css";
147
+
148
+ const { instance } = Intercom({
149
+ // 必填 设备选项
150
+ puOption: {
151
+ // 设备id
152
+ id: "PU_123456",
153
+ // 设备通道号
154
+ index: 0,
155
+ },
156
+ // 必填 用户授权令牌
157
+ token: "Y3UrQ1VfYWRtestYDHYUAStest",
158
+ // (可选) 连接建立后回调
159
+ onConnected: () => {},
160
+ // (可选) 连接建立失败时的回调
161
+ onConnectedFailed: () => {},
162
+ // (可选) 连接断开后回调
163
+ onDisConnected: () => {},
164
+ //(可选) 无法获取用户麦克风时
165
+ onGetUserMediaFailed: () => {},
166
+ // (可选) 指定请求url的前缀 方便代理请求
167
+ // apiPrefix: "/test_api/prefix",
168
+ });
169
+ ```
170
+
171
+ **会议**
172
+
173
+ ```typescript
174
+ import {
175
+ Conference,
176
+ IConferenceProps,
177
+ IConferenceInstance,
178
+ } from "@besovideo/webrtc-player";
179
+ import "@besovideo/webrtc-player/dist/main.es.css";
180
+
181
+ const { instance } = Conference({
182
+ // 必填 设备选项
183
+ confOption: {
184
+ // 会议id
185
+ id: "test89312",
186
+ // 会议成员ID
187
+ index: 0,
188
+ },
189
+ // 必填 用户授权令牌
190
+ token: "Y3UrQ1VfYWRtestYDHYUAStest",
191
+ // (可选) 连接建立后回调
192
+ onConnected: () => {},
193
+ // (可选) 连接建立失败时的回调
194
+ onConnectedFailed: () => {},
195
+ // (可选) 连接断开后回调
196
+ onDisConnected: () => {},
197
+ //(可选) 无法获取用户麦克风时
198
+ onGetUserMediaFailed: () => {},
199
+ // (可选) 指定请求url的前缀 方便代理请求
200
+ // apiPrefix: "/test_api/prefix",
201
+ });
202
+ ```
203
+
204
+ **Vue 示例**
205
+
206
+ ```vue
207
+ <template>
208
+ <div ref="testRef" class="container"></div>
209
+ <div ref="test2Ref" class="container2"></div>
210
+ <button @click="close">关闭</button>
211
+ </template>
212
+
213
+ <script lang="ts">
214
+ import { defineComponent, onMounted, ref } from "vue";
215
+ import { PuPlayer, IPuPlayerInstance } from "@besovideo/webrtc-player";
216
+ import "@besovideo/webrtc-player/dist/main.es.css";
217
+
218
+ export default defineComponent({
219
+ name: "Test",
220
+ props: {
221
+ // 设备id号
222
+ puId: {
223
+ type: String,
224
+ required: true,
225
+ },
226
+ // 设备通道号
227
+ index: {
228
+ type: Number,
229
+ required: true,
230
+ },
231
+ },
232
+ setup(props) {
233
+ const testRef = ref(null);
234
+ const test2Ref = ref(null);
235
+ const instanceRef = ref<IPuPlayerInstance | null>(null);
236
+
237
+ const init = async () => {
238
+ const { instance } = PuPlayer({
239
+ container: testRef.value,
240
+ puOption: { id: props.puId, index: props.index },
241
+ token:
242
+ "Y3UrQ1VfYWRtaW4rYWRtaW4rMTQzOSsxOTMwMTUrMTYyNTIwMjU3OCthN2I0Y2JiZDliMzkwZWUy",
243
+ });
244
+ console.log("初始化播放器完成:", instance);
245
+ instanceRef.value = instance;
246
+
247
+ try {
248
+ await instance.open();
249
+ } catch (e) {}
250
+
251
+ setTimeout(() => {
252
+ // 测试移动到另一个容器内
253
+ console.log("移动节点");
254
+ instance.moveTo(test2Ref.value);
255
+ }, 5000);
256
+ };
257
+
258
+ onMounted(() => {
259
+ init();
260
+ });
261
+
262
+ return {
263
+ testRef,
264
+ test2Ref,
265
+ close: () => instanceRef.value?.close(),
266
+ };
267
+ },
268
+ });
269
+ </script>
270
+
271
+ <style lang="scss" scoped>
272
+ .container {
273
+ height: 300px;
274
+ }
275
+ </style>
276
+ ```
277
+
278
+ ## 开发 Dev
279
+
280
+ ```shell
281
+ # 开发运行
282
+ yarn
283
+ yarn start
284
+
285
+ # 打包和发布
286
+ make publish
287
+
288
+ ```
289
+
290
+ [环境变量切换方式](https://github.com/entropitor/dotenv-cli/pull/44)
package/dist/main.es.css CHANGED
@@ -1 +1 @@
1
- .bvplayer-common-flex-space{display:inline-block;flex:1}.bvplayer-icon{display:inline-block;height:22px;width:100%;vertical-align:middle}.bvplayer-icon svg{height:100%;width:100%}.bvplayer-modal{position:absolute;top:0;left:0;padding:12px 16px;font-size:14px;border:1px solid #2b303b;border-radius:3px;background:rgba(22,27,29,.8);color:#fff;box-shadow:0 0 20px -6px #000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);overflow:hidden;visibility:hidden;opacity:0;transform:scale(0);will-change:transform,opacity;transition:all .3s cubic-bezier(.6,-.28,.735,.045)}.bvplayer-modal.bvplayer-common-is-visible{visibility:visible;opacity:1;transform:scale(1);transition:all .2s cubic-bezier(.785,.135,.15,.86)}.bvplayer-modal--center{top:50%;left:50%;margin:auto;transform:translate(-50%,-50%) scale(0)}.bvplayer-modal--center.bvplayer-common-is-visible{transform:translate(-50%,-50%)}.bvplayer-modal_title-bar{display:flex;justify-content:space-between;margin-bottom:8px;font-size:16px}.bvplayer-modal_title-bar_close{cursor:pointer}.bvplayer-modal_body{padding:8px;overflow:hidden;overflow-y:auto}.bvplayer-spinner{position:absolute;top:0;left:0;height:100%;width:100%}.bvplayer-spinner>span{display:inline-block;position:absolute;top:50%;left:50%;margin:-18px 0 0 -18px;height:36px;width:36px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIg0KICAgICB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCiAgICAgICAgPHJlY3QgeD0iMCIgeT0iNy42NDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNC43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8L3JlY3Q+DQogICAgPHJlY3QgeD0iOCIgeT0iNS4xNDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxOS43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4NCiAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICA8cmVjdCB4PSIxNiIgeT0iNy4zNTg0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNS4yODMyIiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIg0KICAgICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgNTsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICAgIDwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIg0KICAgICB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCiAgICAgICAgPHJlY3QgeD0iMCIgeT0iNy42NDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNC43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8L3JlY3Q+DQogICAgPHJlY3QgeD0iOCIgeT0iNS4xNDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxOS43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4NCiAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICA8cmVjdCB4PSIxNiIgeT0iNy4zNTg0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNS4yODMyIiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIg0KICAgICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgNTsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICAgIDwvc3ZnPg==)}.bvplayer-spinner>span svg{height:100%}.bvplayer-mask{height:100%;width:100%;position:absolute;top:0;left:0;display:grid;align-content:center;justify-content:center;place-content:center;background-color:#000;color:#fff;font-size:14px}.bvplayer-slider{cursor:pointer;position:relative;width:100%;height:3px;line-height:3px;background:#aaa;transition:all .3s ease-in-out}.bvplayer-slider_inner{position:absolute;bottom:0;left:0;height:100%;transition:all .1s ease;background:#fff}.bvplayer-slider_thumb{cursor:pointer;position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;transition:all .3s ease-in-out;background:#fff}.bvplayer-slider_suffix{position:absolute;visibility:visible;display:inline-block;width:calc(100% + 28px);text-align:right;color:#fff;opacity:.8;font-size:12px}.bvplayer-controller{position:absolute;bottom:0;left:0;right:0;width:100%;height:98px;color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;visibility:hidden;opacity:0;transform:translateY(100%);will-change:visibility,opacity,transform;transition:all .3s cubic-bezier(.455,.03,.515,.955)}.bvplayer-controller.bvplayer-common-is-visible{visibility:visible;opacity:1;transform:translateY(0)}.bvplayer-controller_mask{position:absolute;bottom:0;height:100%;width:100%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom}.bvplayer-controller_inner{position:absolute;bottom:0;left:0;right:0;width:100%;height:41px;padding:0 20px;display:flex;align-items:stretch;justify-content:space-between}.bvplayer-controller_inner_bar{display:block}.bvplayer-controller_inner_bar *{vertical-align:middle}.bvplayer-controller_inner_left{cursor:default}.bvplayer-controller_inner_right{cursor:default}.bvplayer-controller_button{cursor:pointer;display:inline-block;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:36px;height:100%;border:none;outline:none;padding:0;background:none;color:inherit}.bvplayer-controller_button:not(:last-child){margin-right:8px}.bvplayer-controller_button>*{transition:all .2s ease-in-out;opacity:.8}.bvplayer-controller_button:hover>*{opacity:1}.bvplayer-controller_volume{display:inline-block}.bvplayer-controller_volume--active .bvplayer-slider,.bvplayer-controller_volume:hover .bvplayer-slider{width:45px!important}.bvplayer-controller_volume--active .bvplayer-slider_thumb,.bvplayer-controller_volume:hover .bvplayer-slider_thumb{transform:scale(1)!important}.bvplayer-controller_volume--active .bvplayer-slider_suffix,.bvplayer-controller_volume:hover .bvplayer-slider_suffix{visibility:visible}.bvplayer-controller_volume .bvplayer-controller_button{margin-right:5px}.bvplayer-controller_volume .bvplayer-slider{display:inline-block;width:0}.bvplayer-controller_volume .bvplayer-slider_thumb{transform:scale(0)}.bvplayer-controller_volume .bvplayer-slider_suffix{visibility:hidden}.bvplayer-video{display:block;pointer-events:none;box-sizing:border-box;width:100%;height:100%}.bvplayer-player{position:relative;height:100%;width:100%;background-color:#000;overflow:hidden}.bvplayer-player *{box-sizing:border-box}.bvplayer-player .bvplayer-video{position:absolute}.bvplayer-player .bvplayer-modal{min-width:120px;min-height:100px}.bvplayer-player-fit--contain .bvplayer-video{-o-object-fit:contain;object-fit:contain}.bvplayer-player-fit--fill .bvplayer-video{-o-object-fit:fill;object-fit:fill}.bvplayer-player-fit--cover .bvplayer-video{-o-object-fit:cover;object-fit:cover}.bvplayer-player-fit--scale-down .bvplayer-video{-o-object-fit:scale-down;object-fit:scale-down}.bvplayer-player-fit--none .bvplayer-video{-o-object-fit:none;object-fit:none}.bvplayer-player_info-modal_content{width:280px;min-height:180px;display:flex;flex-direction:column}.bvplayer-player_info-modal_section:not(:last-child){margin-bottom:16px}.bvplayer-player_info-modal_section_title{display:inline-block;font-weight:bold;font-size:12px;margin-bottom:8px;margin-left:16px}.bvplayer-player_info-modal_section_main{width:100%;display:flex;flex-direction:column;align-items:end}.bvplayer-player_info-modal_list{min-width:210px;font-size:12px}.bvplayer-player_info-modal_list_item{white-space:nowrap}.bvplayer-player_info-modal_list_item:not(:last-child){margin-bottom:8px}.bvplayer-player_info-modal_list_item_label{display:inline-block;width:90px;margin-right:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.bvplayer-player_info-modal_list_item_value{display:inline-block;white-space:normal;word-break:break-all}
1
+ .tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:currentColor;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:currentColor;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:currentColor;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:currentColor;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}.tippy-box[data-animation=shift-away][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=top]{transform:translateY(10px)}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=bottom]{transform:translateY(-10px)}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=left]{transform:translateX(10px)}.tippy-box[data-animation=shift-away][data-state=hidden][data-placement^=right]{transform:translateX(-10px)}.bvplayer-common-flex-space{display:inline-block;flex:1}.tippy-box[data-theme~=bvplayer]{background-color:#2e3e4e;color:#fffc;padding:0;margin:0}.tippy-box[data-theme~=bvplayer] .tippy-content{font-size:12px}.tippy-box[data-theme~=bvplayer] .tippy-arrow{outline:none}.tippy-box[data-theme~=bvplayer][data-placement^=right] .tippy-content{padding:0 5px}.tippy-box[data-theme~=bvplayer][data-placement^=right] .tippy-arrow:before{transform:translateY(-2px) scale(.65);border-right-color:#2e3e4e}.tippy-box[data-theme~=bvplayer][data-placement^=top] .tippy-content{padding:3px 5px}.tippy-box[data-theme~=bvplayer][data-placement^=top] .tippy-arrow:before{border-top-color:#2e3e4e}.bvplayer-icon{display:inline-block;height:22px;width:100%;vertical-align:middle}.bvplayer-icon svg{height:100%;width:100%}.bvplayer-button{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;border:0;line-height:0;display:inline-block;padding:3px 5px;border-radius:5px;color:inherit}.bvplayer-button .bvplayer-icon{height:1em}.bvplayer-button--text{background:none}.bvplayer-button--default{outline:none}.bvplayer-button--primary{color:#fffc;background-color:#2e3e4e99}.bvplayer-input{font-size:inherit;font-family:inherit;padding:2px 4px;background-color:#fff;border:1px solid #8b8a8b;border-radius:3px;transition:box-shadow .18s ease-in-out}.bvplayer-input:not(textarea){line-height:1}.bvplayer-input[readonly]{cursor:not-allowed;border-style:dotted;color:#777}.bvplayer-input[disabled]{border-color:#ccc;background-color:#eee;cursor:not-allowed}.bvplayer-input:focus{border-color:#68747d;box-shadow:0 0 3px 1px #d5d9dc80;outline:1px solid transparent}.bvplayer-modal{position:absolute;top:0;left:0;padding:12px 16px;font-size:14px;border:1px solid #2b303b;border-radius:3px;background:rgba(22,27,29,.8);color:#fff;box-shadow:0 0 20px -6px #000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);overflow:hidden;visibility:hidden;opacity:0;transform:scale(0);will-change:transform,opacity;transition:all .3s cubic-bezier(.6,-.28,.735,.045)}.bvplayer-modal.bvplayer-common-is-visible{visibility:visible;opacity:1;transform:scale(1);transition:all .2s cubic-bezier(.785,.135,.15,.86)}.bvplayer-modal--center{top:50%;left:50%;margin:auto;transform:translate(-50%,-50%) scale(0)}.bvplayer-modal--center.bvplayer-common-is-visible{transform:translate(-50%,-50%)}.bvplayer-modal_title-bar{display:flex;justify-content:space-between;margin-bottom:8px;font-size:16px}.bvplayer-modal_title-bar_close{cursor:pointer}.bvplayer-modal_body{padding:8px;overflow:hidden;overflow-y:auto}.bvplayer-spinner{position:absolute;top:0;left:0;height:100%;width:100%}.bvplayer-spinner>span{display:inline-block;position:absolute;top:50%;left:50%;margin:-18px 0 0 -18px;height:36px;width:36px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIg0KICAgICB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCiAgICAgICAgPHJlY3QgeD0iMCIgeT0iNy42NDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNC43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8L3JlY3Q+DQogICAgPHJlY3QgeD0iOCIgeT0iNS4xNDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxOS43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4NCiAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICA8cmVjdCB4PSIxNiIgeT0iNy4zNTg0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNS4yODMyIiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIg0KICAgICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgNTsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICAgIDwvc3ZnPg==);mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIg0KICAgICB2aWV3Qm94PSIwIDAgMjQgMzAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwIDUwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCiAgICAgICAgPHJlY3QgeD0iMCIgeT0iNy42NDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNC43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMHMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iaGVpZ2h0IiBhdHRyaWJ1dGVUeXBlPSJYTUwiIHZhbHVlcz0iMTA7IDIwOyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjBzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8L3JlY3Q+DQogICAgPHJlY3QgeD0iOCIgeT0iNS4xNDE2IiB3aWR0aD0iNCIgaGVpZ2h0PSIxOS43MTY4IiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlPg0KICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJoZWlnaHQiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgMjA7IDEwIiBiZWdpbj0iMC4xNXMiIGR1cj0iMC42cyINCiAgICAgICAgICAgICAgICAgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiPjwvYW5pbWF0ZT4NCiAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ieSIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyA1OyAxMCIgYmVnaW49IjAuMTVzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICA8cmVjdCB4PSIxNiIgeT0iNy4zNTg0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxNS4yODMyIiBvcGFjaXR5PSIwLjIiPg0KICAgICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9Im9wYWNpdHkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIwLjI7IDE7IC4yIiBiZWdpbj0iMC4zcyIgZHVyPSIwLjZzIg0KICAgICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImhlaWdodCIgYXR0cmlidXRlVHlwZT0iWE1MIiB2YWx1ZXM9IjEwOyAyMDsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InkiIGF0dHJpYnV0ZVR5cGU9IlhNTCIgdmFsdWVzPSIxMDsgNTsgMTAiIGJlZ2luPSIwLjNzIiBkdXI9IjAuNnMiDQogICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGU+DQogICAgICAgIDwvcmVjdD4NCiAgICAgIDwvc3ZnPg==)}.bvplayer-spinner>span svg{height:100%}.bvplayer-mask{height:100%;width:100%;position:absolute;top:0;left:0;display:grid;align-content:center;justify-content:center;place-content:center;background-color:#000;color:#fff;font-size:14px}.bvplayer-slider{cursor:pointer;position:relative;width:100%;height:3px;line-height:3px;background:#aaa;transition:all .3s ease-in-out}.bvplayer-slider_inner{position:absolute;bottom:0;left:0;height:100%;transition:all .1s ease;background:#fff}.bvplayer-slider_thumb{cursor:pointer;position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;transition:all .3s ease-in-out;background:#fff}.bvplayer-slider_suffix{position:absolute;visibility:visible;display:inline-block;width:calc(100% + 28px);text-align:right;color:#fff;opacity:.8;font-size:12px}.bvplayer-video{display:block;box-sizing:border-box;width:100%;height:100%}.bvplayer-video_screen{pointer-events:none;width:100%;height:100%}.bvplayer-controller{position:absolute;bottom:0;left:0;right:0;width:100%;height:98px;color:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;visibility:hidden;opacity:0;transform:translateY(100%);will-change:visibility,opacity,transform;transition:all .3s cubic-bezier(.455,.03,.515,.955)}.bvplayer-controller.bvplayer-common-is-visible{visibility:visible;opacity:1;transform:translateY(0)}.bvplayer-controller_mask{position:absolute;bottom:0;height:100%;width:100%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom}.bvplayer-controller_inner{position:absolute;bottom:0;left:0;right:0;width:100%;height:41px;padding:0 20px;display:flex;align-items:stretch;justify-content:space-between}.bvplayer-controller_inner_bar{display:block}.bvplayer-controller_inner_bar *{vertical-align:middle;pointer-events:auto}.bvplayer-controller_inner_left{cursor:default}.bvplayer-controller_inner_right{cursor:default}.bvplayer-controller_button{cursor:pointer;display:inline-block;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:36px;height:100%;border:none;outline:none;padding:0;background:none;color:inherit}.bvplayer-controller_button:not(:last-child){margin-right:8px}.bvplayer-controller_button>*{transition:all .2s ease-in-out;opacity:.8}.bvplayer-controller_button:hover>*{opacity:1}.bvplayer-controller_volume{display:inline-block}.bvplayer-controller_volume--active .bvplayer-slider,.bvplayer-controller_volume:hover .bvplayer-slider{width:45px!important}.bvplayer-controller_volume--active .bvplayer-slider_thumb,.bvplayer-controller_volume:hover .bvplayer-slider_thumb{transform:scale(1)!important}.bvplayer-controller_volume--active .bvplayer-slider_suffix,.bvplayer-controller_volume:hover .bvplayer-slider_suffix{visibility:visible}.bvplayer-controller_volume .bvplayer-controller_button{margin-right:5px}.bvplayer-controller_volume .bvplayer-slider{display:inline-block;width:0}.bvplayer-controller_volume .bvplayer-slider_thumb{transform:scale(0)}.bvplayer-controller_volume .bvplayer-slider_suffix{visibility:hidden}.bvplayer-ptz{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;visibility:hidden}.bvplayer-ptz.bvplayer-common-is-visible{visibility:visible}.bvplayer-ptz.bvplayer-common-is-visible .bvplayer-ptz_control{opacity:1;transform:translate(-50%,0)}.bvplayer-ptz-control-button{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;border:0;padding:3px 5px;border-radius:3px;overflow:hidden;color:#fffc;opacity:1;transform:scale(1);transition:all .3s cubic-bezier(.075,.82,.165,1)}.bvplayer-ptz-control-button--press{transform:scale(.9);opacity:.8}.bvplayer-ptz-speed-slider{width:20px;height:100%;display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bvplayer-ptz-speed-slider_header,.bvplayer-ptz-speed-slider_footer{position:relative;font-size:12px;margin-bottom:1px}.bvplayer-ptz-speed-slider_header:before,.bvplayer-ptz-speed-slider_footer:before{content:"";position:absolute;bottom:0;left:0;width:100%;border-bottom:1px solid rgba(255,255,255,.45);transform:scaleX(.3)}.bvplayer-ptz-speed-slider_header:after,.bvplayer-ptz-speed-slider_footer:after{content:attr(data-text);position:absolute;font-size:12px;opacity:.8}.bvplayer-ptz-speed-slider_header:after{right:-10px;top:-7px}.bvplayer-ptz-speed-slider_footer:after{right:-20px;top:-10px}.bvplayer-ptz-speed-slider_main{height:100%;position:relative;overflow:hidden;text-align:center}.bvplayer-ptz-speed-slider-track{display:inline-block;width:2px;height:100%;background-color:#ffffff73;border-radius:3px}.bvplayer-ptz-speed-slider-thumb{cursor:pointer;display:inline-block;position:absolute;top:0;left:50%;transform:translateX(-50%);display:flex;padding:4px 5px;border-radius:2px;background-color:#2e3e4e;color:#fffc;box-shadow:#00000080 0 2px 4px,#00000040 0 2px 4px}.bvplayer-ptz-speed-slider-thumb span{display:inline-block;height:4px;width:1px;background-color:#fff}.bvplayer-ptz-speed-slider-thumb span:not(:last-child){margin-right:3px}.bvplayer-ptz_control{opacity:0;pointer-events:auto;position:absolute;left:50%;bottom:40px;transform:translate(-50%,calc(100% + 40px));will-change:transform opacity;transition:all .3s cubic-bezier(.455,.03,.515,.955);display:flex;justify-content:space-between;height:25%;min-height:110px;max-height:150px;width:60%;max-width:380px;overflow:hidden;padding:8px 12px;font-size:12px;color:#fff;background:rgba(22,27,29,.4);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);border:1px solid rgba(255,255,255,.2);border-radius:3px;box-shadow:0 1px 5px #000000b3}.bvplayer-ptz_control>:not(:last-child){margin-right:8px}.bvplayer-ptz_control_direction-grid{position:relative;display:grid;grid-template-rows:repeat(3,minmax(25px,1fr));grid-template-columns:repeat(3,minmax(25px,1fr));grid-gap:8px;gap:8px;width:35%;min-width:100px;max-width:170px;overflow:hidden}.bvplayer-ptz_control_direction-grid_item{outline:none}.bvplayer-ptz_control_speed-option{flex:1;overflow:hidden;text-align:left;padding:6px 0}.bvplayer-ptz_control_camera-option{display:flex;flex-direction:column;justify-content:center;overflow:hidden}.bvplayer-ptz_control_camera-option_item{white-space:nowrap}.bvplayer-ptz_control_camera-option_item:not(:last-child){margin-bottom:8px}.bvplayer-ptz_control_camera-option_item_label{display:inline-block;width:40px;margin-right:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:top;-moz-text-align-last:justify;text-align-last:justify}.bvplayer-ptz_control_camera-option_item_value{display:inline-block;white-space:normal;word-break:break-all}.bvplayer-ptz_control_camera-option_item_value>:not(:last-child){margin-right:8px}.bvplayer-ptz_control_direction-button{height:100%;width:100%;max-width:60px;max-height:60px;background-color:#2e3e4ecc;box-shadow:#00000029 0 3px 6px,#0000003b 0 3px 6px}.bvplayer-ptz_control_direction-button .bvplayer-icon{height:50%;min-height:18px}.bvplayer-ptz_control_direction-button.bvplayer-ptz-control-button--press{box-shadow:#0000000d 0 0 0 1px}.bvplayer-ptz_control_operator-button{padding:2px;background-color:#2e3e4ecc;box-shadow:#00000029 0 3px 6px,#0000003b 0 3px 6px}.bvplayer-ptz_control_operator-button .bvplayer-icon{height:16px}.bvplayer-ptz_control_close-button{position:absolute;top:2px;right:2px;font-size:16px;padding:0;will-change:transform;transition:transform .3s}.bvplayer-ptz_control_close-button:hover{transform:scale(1.1)}.bvplayer-player{position:relative;height:100%;width:100%;background-color:#000;overflow:hidden}.bvplayer-player *{box-sizing:border-box}.bvplayer-player .bvplayer-video{position:absolute}.bvplayer-player .bvplayer-modal{min-width:120px;min-height:100px}.bvplayer-player-fit--contain .bvplayer-video_screen{-o-object-fit:contain;object-fit:contain}.bvplayer-player-fit--fill .bvplayer-video_screen{-o-object-fit:fill;object-fit:fill}.bvplayer-player-fit--cover .bvplayer-video_screen{-o-object-fit:cover;object-fit:cover}.bvplayer-player-fit--scale-down .bvplayer-video_screen{-o-object-fit:scale-down;object-fit:scale-down}.bvplayer-player-fit--none .bvplayer-video_screen{-o-object-fit:none;object-fit:none}.bvplayer-player_info-modal_content{width:280px;min-height:180px;display:flex;flex-direction:column}.bvplayer-player_info-modal_section:not(:last-child){margin-bottom:16px}.bvplayer-player_info-modal_section_title{display:inline-block;font-weight:bold;font-size:12px;margin-bottom:8px;margin-left:16px}.bvplayer-player_info-modal_section_main{width:100%;display:flex;flex-direction:column;align-items:end}.bvplayer-player_info-modal_list{min-width:210px;font-size:12px}.bvplayer-player_info-modal_list_item{white-space:nowrap}.bvplayer-player_info-modal_list_item:not(:last-child){margin-bottom:8px}.bvplayer-player_info-modal_list_item_label{display:inline-block;width:90px;margin-right:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.bvplayer-player_info-modal_list_item_value{display:inline-block;white-space:normal;word-break:break-all}