-
Notifications
You must be signed in to change notification settings - Fork 28
/
IPlayerControl.java
641 lines (553 loc) · 30 KB
/
IPlayerControl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
package com.android.iplayer.interfaces;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import com.android.iplayer.base.BaseController;
import com.android.iplayer.listener.OnPlayerEventListener;
import java.io.File;
/**
* created by hty
* 2022/7/3
* Desc:控制器持有的播放器代理人,也提供给宿主调用
*/
public interface IPlayerControl<V extends BaseController> {
/**
* 设置是否循环播放
* @param loop 设置是否循环播放 true:循环播放 flase:禁止循环播放
*/
void setLoop(boolean loop);
/**
* 设置播放进度回调间隔时间
* @param millisecond 设置播放进度回调间隔时间 单位:毫秒,数字越大性能越好,越小回调越频繁
*/
void setProgressCallBackSpaceTime(int millisecond);
/**
* 设置播放状态监听
* @param listener 设置播放状态监听,如需自定义解码器,必须实现此监听
*/
void setOnPlayerActionListener(OnPlayerEventListener listener);
/**
* 设置String类型播放地址
* @param dataSource 设置String类型播放地址 网络地址:http://或https://,aw目录下地址:android.resource://" + getPackageName() + "/" + R.raw.xxx
*/
void setDataSource(String dataSource);
/**
* 设置Assets类型的播放地址
* @param dataSource 设置Assets类型的播放地址
*/
void setDataSource(AssetFileDescriptor dataSource);
/**
* 设置本地File路劲的播放地址
* @param dataSource 设置本地File路劲的播放地址,请注意先申请"存储"权限
*/
void setDataSource(File dataSource);
/**
* 设置缩放模式
* @param zoomModel 设置缩放模式 请适用IMediaPlayer类中定义的常量值
*/
void setZoomModel(int zoomModel);
/**
* 是否开启重力旋转。当系统"自动旋转"开启+正在播放生效
* @param enable 是否开启重力旋转。当系统"自动旋转"开启+正在播放生效
*/
void setAutoChangeOrientation(boolean enable);
/**
* 设置视频旋转角度
* @param degree 设置视频画面旋转角度
*/
void setDegree(int degree);
/**
* 设置播放速度
* @param speed 设置播放速度,仅在播放中设置生效。 从0.5f-2.0f
*/
void setSpeed(float speed);
/**
* 设置左右声道音量,从0.0f-1.0f
* @param leftVolume 设置左声道音量,1.0f-1.0f
* @param rightVolume 设置右声道音量,1.0f-1.0f
*/
void setVolume(float leftVolume, float rightVolume);
/**
* @param mute 设置是否静音,true:无声 false:跟随系统音量
* @return 是否静音,true:无声 false:跟随系统音量
*/
boolean setSoundMute(boolean mute);
/**
* 是否启用了静音
* @return true:启用了静音 false:未启用静音
*/
boolean isSoundMute();
/**
* 开启、关闭静音
* @return 是否静音,true:静音 false:跟随系统音量
*/
boolean toggleMute();
/**
* 设置画面镜像旋转
* @param mirror 设置画面镜像旋转 true:画面翻转 false:正常
* @return true:画面翻转 false:正常
*/
boolean setMirror(boolean mirror);
/**
* 开启、关闭画面镜像旋转
* @return 是否镜像,true:镜像音 false:正常
*/
boolean toggleMirror();
/**
* @param restoreDirection 设置当播放器在横屏状态下收到播放完成事件时是否自动还原到竖屏状态,true:自动还原到竖屏 false:保留当前屏幕方向状态
*/
void setPlayCompletionRestoreDirection(boolean restoreDirection);
/**
* @param landscapeWindowTranslucent 开始全屏前设置生效,设置当播放器在开启横屏状态下播放时是否启用全屏沉浸样式,true:启用沉浸式全屏 false:保留状态栏及菜单栏位置(隐藏状态栏及菜单栏图标及按钮),使用标准的全屏样式
*/
void setLandscapeWindowTranslucent(boolean landscapeWindowTranslucent);
/**
* 设置播放器在移动网络能否继续工作
* @param mobileNetwork 设置播放器在移动网络能否继续工作 true:允许工作 flase:禁止
*/
void setMobileNetwork(boolean mobileNetwork);
/**
* 设置是否监听并处理音频焦点事件
* @param interceptTAudioFocus 设置是否监听并处理音频焦点事件 true:拦截,并在收到音频焦点失去后暂停播放 false:什么也不处理
*/
void setInterceptTAudioFocus(boolean interceptTAudioFocus);
/**
* 设置当播放器遇到链接视频文件失败时自动重试的次数,内部自动重试次数为3次
* @param retryCount 设置当播放器遇到链接视频文件失败时自动重试的次数,内部自动重试次数为3次
*/
void setRetryCount(int retryCount);
/**
* 驾驶异步准备播放
*/
void prepareAsync();
void startPlay();
void play();
void pause();
void rePlay();
/**
* 开始\暂停播放
*/
void togglePlay();
/**
* 开始播放\暂停
*/
void playOrPause();
/**
* @param dataSource 传入播放地址 开始播放\暂停
* 在开始播放之前可调用IWindowManager.getInstance().quitGlobaWindow();结束并退出悬浮窗窗口播放
*/
void playOrPause(Object dataSource);
/**
* 关闭全屏/退出全屏时旋转Activity方向,默认开启
*/
void shutFullScreenOrientation();
/**
* 开启全屏模式播放
*/
void startFullScreen();
/**
* @param bgColor 开启全屏模式播放:横屏时播放器的背景颜色,内部默认用黑色#000000
*/
void startFullScreen(int bgColor);
/**
* 退出全屏播放
*/
void quitFullScreen();
/**
*
* 开启\退出全屏波发放
*/
void toggleFullScreen();
/**
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部15dp,右边15dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
*/
void startWindow();
/**
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部15dp,右边15dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
*/
void startWindow(boolean isAutoSorption);
/**
* @param radius 窗口的圆角 单位:像素
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部15dp,右边15dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param bgColor 窗口的背景颜色
*/
void startWindow(float radius,int bgColor);
/**
* @param radius 窗口的圆角 单位:像素
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部15dp,右边15dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param bgColor 窗口的背景颜色
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
*/
void startWindow(float radius,int bgColor,boolean isAutoSorption);
/**
* @param width 窗口播放器的宽,当小于=0时用默认
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部15dp,右边15dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param height 窗口播放器的高,当小于=0时用默认
* @param startX 窗口位于屏幕中的X轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置
*/
void startWindow(int width,int height,float startX,float startY);
/**
* @param width 窗口播放器的宽,当小于=0时用默认
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param height 窗口播放器的高,当小于=0时用默认
* @param startX 窗口位于屏幕中的X轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
*/
void startWindow(int width,int height,float startX,float startY,boolean isAutoSorption);
/**
* @param width 窗口播放器的宽,当小于=0时用默认
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param height 窗口播放器的高,当小于=0时用默认
* @param startX 窗口位于屏幕中的X轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置
* @param radius 窗口的圆角 单位:像素
*/
void startWindow(int width,int height,float startX,float startY,float radius);
/**
* @param width 窗口播放器的宽,当小于=0时用默认
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param height 窗口播放器的高,当小于=0时用默认
* @param startX 窗口位于屏幕中的X轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置
* @param radius 窗口的圆角 单位:像素
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
*/
void startWindow(int width,int height,float startX,float startY,float radius,boolean isAutoSorption);
/**
* @param width 窗口播放器的宽,当小于=0时用默认
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param height 窗口播放器的高,当小于=0时用默认
* @param startX 窗口位于屏幕中的X轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置
* @param radius 窗口的圆角 单位:像素
* @param bgColor 窗口的背景颜色
*/
void startWindow(int width,int height,float startX,float startY,float radius,int bgColor);
/**
* @param width 窗口播放器的宽,当小于=0时用默认
* 开启可拖拽的窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置)
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启
* @param height 窗口播放器的高,当小于=0时用默认
* @param startX 窗口位于屏幕中的X轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置,当小于=0时用默认
* @param startY 窗口位于屏幕中的Y轴起始位置
* @param radius 窗口的圆角 单位:像素
* @param bgColor 窗口的背景颜色
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
*/
void startWindow(int width,int height,float startX,float startY,float radius,int bgColor,boolean isAutoSorption);
/**
* 关闭窗口播放
*/
void quitWindow();
/**
* 开启\关闭可拖拽的窗口播放
*/
void toggleWindow();
/**
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow();
/**
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(boolean isAutoSorption);
/**
* @param radius 窗口的圆角 单位:像素
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param bgColor 窗口的背景颜色
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(float radius,int bgColor);
/**
* @param radius 窗口的圆角 单位:像素
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param bgColor 窗口的背景颜色
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(float radius,int bgColor,boolean isAutoSorption);
/**
* @param width 悬浮窗的宽,默认为:屏幕宽度/2+30dp
* @param height 悬浮窗的高,默认为:width*9/16
* @param startX 位于屏幕的X起始位置,如果为0第一次渲染全局悬浮窗时:屏幕宽度/2-30dp-12dp;非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* @param startY 位于屏幕的Y起始位置,如果为0第一次渲染全局悬浮窗时:播放器位于屏幕的Y轴+播放器高度+边距(12dp);非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(int width,int height,float startX,float startY);
/**
* @param width 悬浮窗的宽,默认为:屏幕宽度/2+30dp
* @param height 悬浮窗的高,默认为:width*9/16
* @param startX 位于屏幕的X起始位置,如果为0第一次渲染全局悬浮窗时:屏幕宽度/2-30dp-12dp;非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* @param startY 位于屏幕的Y起始位置,如果为0第一次渲染全局悬浮窗时:播放器位于屏幕的Y轴+播放器高度+边距(12dp);非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(int width,int height,float startX,float startY,boolean isAutoSorption);
/**
* @param width 悬浮窗的宽,默认为:屏幕宽度/2+30dp
* @param height 悬浮窗的高,默认为:width*9/16
* @param startX 位于屏幕的X起始位置,如果为0第一次渲染全局悬浮窗时:屏幕宽度/2-30dp-12dp;非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* @param startY 位于屏幕的Y起始位置,如果为0第一次渲染全局悬浮窗时:播放器位于屏幕的Y轴+播放器高度+边距(12dp);非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param radius 窗口的圆角 单位:像素
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(int width,int height,float startX,float startY,float radius);
/**
* @param width 悬浮窗的宽,默认为:屏幕宽度/2+30dp
* @param height 悬浮窗的高,默认为:width*9/16
* @param startX 位于屏幕的X起始位置,如果为0第一次渲染全局悬浮窗时:屏幕宽度/2-30dp-12dp;非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* @param startY 位于屏幕的Y起始位置,如果为0第一次渲染全局悬浮窗时:播放器位于屏幕的Y轴+播放器高度+边距(12dp);非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param radius 窗口的圆角 单位:像素
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(int width,int height,float startX,float startY,float radius,boolean isAutoSorption);
/**
* @param width 悬浮窗的宽,默认为:屏幕宽度/2+30dp
* @param height 悬浮窗的高,默认为:width*9/16
* @param startX 位于屏幕的X起始位置,如果为0第一次渲染全局悬浮窗时:屏幕宽度/2-30dp-12dp;非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* @param startY 位于屏幕的Y起始位置,如果为0第一次渲染全局悬浮窗时:播放器位于屏幕的Y轴+播放器高度+边距(12dp);非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param radius 窗口的圆角 单位:像素
* @param bgColor 窗口的背景颜色
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(int width,int height,float startX,float startY,float radius,int bgColor);
/**
* @param width 悬浮窗的宽,默认为:屏幕宽度/2+30dp
* @param height 悬浮窗的高,默认为:width*9/16
* @param startX 位于屏幕的X起始位置,如果为0第一次渲染全局悬浮窗时:屏幕宽度/2-30dp-12dp;非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* @param startY 位于屏幕的Y起始位置,如果为0第一次渲染全局悬浮窗时:播放器位于屏幕的Y轴+播放器高度+边距(12dp);非初次渲染全局悬浮窗:使用最后一次关闭窗口前的位置
* 开启可拖拽的全局悬浮窗口播放
* 默认宽为屏幕1/2+30dp,高为1/2+30dp的16:9比例,X起始位置为:播放器原宿主的右下方,距离原宿主View顶部12dp,右边12dp(如果原宿主不存在,则位于屏幕右上角距离顶部60dp位置),
* 全局悬浮窗口和局部小窗口不能同时开启
* 横屏下不允许开启,需要在取得悬浮窗权限之后再调用
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
* @param radius 窗口的圆角 单位:像素
* @param bgColor 窗口的背景颜色
* @param isAutoSorption 触摸松手后是否自动吸附到屏幕边缘(悬停时距离屏幕边缘12dp),true:自动吸附,false:保持在床后的最后位置状态
* @return true:开启悬浮窗成功 false:开启悬浮窗失败
*/
boolean startGlobalWindow(int width,int height,float startX,float startY,float radius,int bgColor,boolean isAutoSorption);
/**
* 关闭全局悬浮窗口播放
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
*/
void quitGlobalWindow();
/**
* 开启\关闭可拖拽的全局悬浮窗口播放
* 需要声明权限:
* <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
* <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
*/
void toggleGlobalWindow();
/**
* 告诉播放器进入了画中画模式
*/
void enterPipWindow();
/**
* 告诉播放器退出了画中画模式
*/
void quitPipWindow();
/**
* 试看模式下的播放完成
*/
void onCompletion();
/**
* @param continuityPlay 设置是否连续播放模式(需要在视频播放完成结束前调用),true:连续播放模式开启 false:关闭连续播放模式,播放器内部在收到continuityPlay为true的时候,不会自动退出全屏\小窗口\悬浮窗口等模式
*/
void setContinuityPlay(boolean continuityPlay);
/**
* @return 返回视频分辨率-宽,单位:像素
*/
int getVideoWidth();
/**
* @return 返回视频分辨率-高,单位:像素
*/
int getVideoHeight();
/**
* @return 返回视频文件总时长,单位:毫秒
*/
long getDuration();
/**
* @return 返回正在播放的位置,单位:毫秒
*/
long getCurrentPosition();
/**
* @return 返回缓冲进度,单位:百分比
*/
int getBuffer();
/**
* @param prepareTimeout 设置准备和读数据超时阈值,需在{@link #prepareAsync()}之前调用方可生效 准备超时阈值,即播放器在建立链接、解析流媒体信息的超时阈值
* @param readTimeout 读数据超时阈值
*/
void setTimeout(int prepareTimeout, int readTimeout);
/**
* 快进\快退
* @param msec 毫秒进度条
*/
void seekTo(long msec);
/**
* @param msec 快进\快退 毫秒进度条
* @param accurate 是否精准快进快退
*/
void seekTo(long msec,boolean accurate);
/**
* @return 播放器是否正处于工作状态(准备\开始播放\缓冲\手动暂停\生命周期暂停) true:工作中 false:空闲状态
*/
boolean isWorking();
/**
* @return 是否正处于播放中(准备\开始播放\播放中\缓冲\) true:播放中 false:不处于播放中状态
*/
boolean isPlaying();
/**
* @param context 当播放器开启转场、全局悬浮窗功能时,在业务层面设置一个当前的上下文,方便内部处理全屏、屏幕亮度调节逻辑
*/
void setParentContext(Context context);
/**
* @return 返回临时的上下文
*/
Context getParentContext();
/**
* @param videoController 设置视图控制器 继承VideoBaseController的控制器
*/
void setController(V videoController);
/**
* @return 返回播放器控制器
*/
BaseController getController();
/**
* @return 是否允许返回(横屏时先退出横屏,小窗口模式下先退出小窗口模式)
*/
boolean isBackPressed();
/**
* 尝试恢复播放
*/
void onResume();
/**
* 尝试暂停播放
*/
void onPause();
/**
* 结束播放,鉴于停止播放比较耗时,在子线程中操作
*/
void onStop();
/**
* 恢复播放器内部状态
*/
void onRecover();
/**
* 还原播放器及controller内部所有状态
*/
void onReset();
/**
* 销毁播放器
*/
void onRelease();
/**
* 销毁播放器
*/
void onDestroy();
}