CNBBASMVideoImpl.m
10 KB
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
//
// CNBBASMVideoImpl.m
// CNLiveNetAdd
//
// Created by CNLive on 2021/10/16.
// Copyright © 2021 cnlive. All rights reserved.
//
#import "CNBBASMVideoImpl.h"
#import <BBAMNP/BBASMVideoHandleDelegate.h>
#import <BBAMNP/BBAMNP.h>
#import <BBAMNP/BBASMPluginDef.h>
#import "CNVideoVC.h"
#import "CNPlayerManager.h"
static NSString *const kBBASMVideoAutoPlayKey = @"autoplay";
static NSString *const kBBASMVideoDirectionKey = @"direction";
static NSString *const kBBASMVideoShowNoWifiTipKey = @"showNoWifiTip";
static NSString *const kBBASMVideoUrlKey = @"videoUrl";
static NSString *const kBBASMVideoPosterImageKey = @"posterImage";
@interface CNBBASMVideoImpl()
@property (nonatomic, strong) CNVideoVC *videoPlayerViewController;
/// 播放器delegate
@property (nonatomic, weak)id <BBASMVideoHandleDelegate> delegate;
/// 小程序appId
@property (nonatomic, strong) NSString *appId;
@end
@implementation CNBBASMVideoImpl
RegisterBBASMAdapter()
/**
* @brief 创建播放器实例
* @param delegate BBASMVideoHandleDelegate
* @return 播放器实例(如果播放器实例类型是UIView或者UIView的子类,则需要加到ViewController上)
*/
- (UIViewController *)createVideoInstanceWithDelegate:(id<BBASMVideoHandleDelegate>)delegate{
self.videoPlayerViewController = [[CNVideoVC alloc] init];
self.videoPlayerViewController.view.contentMode = UIViewContentModeScaleToFill;
// 设置代理,监听播放器的回调
self.videoPlayerViewController.delegate = delegate;
return self.videoPlayerViewController;
}
/**
* @brief 设置视频播放信息
* @param videoInfo 视频信息
*/
- (void)setPlayerVideoInfo:(NSDictionary *)videoInfo{
[self.videoPlayerViewController loadVideoInfo:videoInfo];
BOOL isAutoPlay = [[videoInfo bdp_safeNumberValueForKey:kBBASMVideoAutoPlayKey] boolValue];
if (isAutoPlay) {
[self startPlay];
}else{
[self pause];
}
}
/**
* @brief 开始播放
*/
- (void)startPlay{
[CNPlayerManager shareInstance].currentActivePlayer = self.videoPlayerViewController.videoPlayer;
[self.videoPlayerViewController.videoPlayer.currentPlayerManager play];
}
/**
* @brief 暂停播放
*/
- (void)pause{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager pause];
}
/**
* @brief 继续播放
*/
- (void)resume{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager play];
}
/**
* @brief 停止播放器,内核释放 (destroy) - 默认不向外部发送停止声音事件
*/
- (void)stop{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager stop];
[_videoPlayerViewController.view removeFromSuperview];
[_videoPlayerViewController removeFromParentViewController];
_videoPlayerViewController = nil;
}
/**
* @brief 停止播放器,内核释放 (destroy)
* @param isReport 是否向外部app发送停止声音事件
*/
- (void)stopPlayerReportDeactiveAudioSession:(BOOL)isReport{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager stop];
}
/**
* @brief 重新播放,比如点击重新播放按钮
*/
- (void)replay{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager replay];
}
/**
* @brief 播放器seek到位置,默认不精确seek
* @param seconds 时间位置
*/
- (void)seek:(double)seconds{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager seekToTime:seconds completionHandler:nil];
}
/**
* @brief 播放器seek到位置
* @param seconds 时间位置
* @param accurate 是否精准(精准的话会影响性能,比如启播慢)
*/
- (void)seek:(double)seconds accurate:(BOOL)accurate{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager seekToTime:seconds completionHandler:nil];
}
/**
* @brief 播放器seek到位置,默认不精确seek
* @param seconds 时间位置
* @param completionHandler block回调
*/
- (void)seek:(double)seconds completionHandler:(void (^)(BOOL finished))completionHandler{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager seekToTime:seconds completionHandler:completionHandler];
}
/**
* @brief 播放器seek到位置
* @param seconds 时间位置
* @param accurate 是否精准(精准的话会影响性能,比如启播慢)
* @param completionHandler block回调
*/
- (void)seek:(double)seconds accurate:(BOOL)accurate completionHandler:(void (^)(BOOL finished))completionHandler{
[self.videoPlayerViewController.videoPlayer.currentPlayerManager seekToTime:seconds completionHandler:completionHandler];
}
- (void)playbackRate:(float)rate {
[self.videoPlayerViewController.videoPlayer.currentPlayerManager setRate:rate];
}
/**
* @brief 播放器进入全屏
* @param direction 全屏转屏角度
*/
- (void)enterFullScreenWithDirection:(BBASMPlayerFullScreenDirection)direction{
}
/**
* @brief 播放器进入全屏
* @param animated 动画
* @param completion block回调
*/
- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void(^)(void))completion{
}
/**
* @brief 播放器退出全屏
*/
- (void)exitFullScreenz{
}
/**
* @brief 播放器退出全屏
* @param animated 动画
* @param completion block回调
*/
- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void(^)(void))completion{
}
/**
* @brief 播放器代理
*/
- (id)delegate{
return self.videoPlayerViewController.delegate;
}
/**
* @brief 播放器视图类型,全屏视图、小窗视图、自定义视图、没有视图
*/
- (NSUInteger)currentPlayerMode{
BOOL isSmall = [self.videoPlayerViewController.videoPlayer isSmallFloatViewShow];
if (isSmall) {
return 2;
} else {
return 1;
}
}
/**
* @brief 发送弹幕信息
*/
- (void)sendDanmu:(NSDictionary *)barrage{
}
/**
* @brief 更新弹幕信息
*/
- (void)updateBarrageMeta:(NSDictionary *)barrageMeta{
}
/**
* @brief 更新弹幕列表信息
*/
- (void)updateBarrageList:(NSArray *)barrageList{
}
/**
* @brief 更新播放器的数据
*/
- (void)updateVideoInfo:(NSDictionary *)videoInfo{
[self.videoPlayerViewController updateVideoInfo:videoInfo];
}
/**
* @brief 当前播放状态
*/
- (int)currentPlayerStatus{
ZFPlayerPlaybackState playerStatus = self.videoPlayerViewController.videoPlayer.currentPlayerManager.playState;
return [self convertCurrentStatus:playerStatus];
}
/**
* @brief 是否正在播放
*/
- (BOOL)currentIsPlaying{
return self.videoPlayerViewController.videoPlayer.currentPlayerManager.isPlaying;
}
/**
* @brief 是否全屏模式
*/
- (BOOL)currentIsFullMode{
return self.videoPlayerViewController.videoPlayer.isFullScreen;
}
/**
* @brief 是否是活跃状态
*
* @return YES 是
*/
- (BOOL)currentIsActive{
return YES;
}
/**
* @brief 更新播放器frame
*/
- (void)updatePlayerFrame:(CGRect)frame {
self.videoPlayerViewController.videoPlayer.containerView.contentMode = UIViewContentModeScaleToFill;
[self.videoPlayerViewController.view setFrame:frame];
}
/**
* @brief player视图
* @return 视图
*/
- (UIView *)replayView{
return self.videoPlayerViewController.videoPlayer.containerView;
}
/**
* @brief 亮度 音量,进度手势开关
* @param enable YES 开启
*/
- (void)setBrightnessVolumeAndProgressGestureEnabled:(BOOL)enable{
}
/**
* @brief 获取当前播放视频的进度
* @return 当前视频播放进度
*/
- (CGFloat)currentPlayerTime{
return self.videoPlayerViewController.videoPlayer.currentTime;
}
/**
* @brief 当前正在播放URL
*/
- (NSURL *)currentPlayingURL{
NSURL *url = self.videoPlayerViewController.videoPlayer.currentPlayerManager.assetURL;
return url;
}
/**
* @brief 播放器的弹幕开关、弹幕信息、发送视图显示状态
* @param showSwitch YES 显示弹幕开关按钮
* @param showDisplayer YES 显示弹幕信息视图
* @param showPublisher YES 显示弹幕发送视图
*/
- (void)updateBarrageStateShowSwitch:(BOOL)showSwitch showDisplayer:(BOOL)showDisplayer showPublisher:(BOOL)showPublisher{
}
/**
* @brief 更新状态栏显示状态
* @param showStatusBar YES 显示状态栏,仅全屏下有效;NO 隐藏状态栏,仅全屏下有效
*/
- (void)updateModelWithStatusBarShow:(BOOL)showStatusBar{
}
/**
* @brief 根据屏幕样式更新控制层显示状态
* @param mode 屏幕样式
未定义:BBASMPlayerModeNone = 0;全屏:BBASMPlayerModeFull = 1;小窗:BBASMPlayerModeMini = 2;自定义大小:BBASMPlayerModeCustom = 3
*/
- (void)updatePlayerControlWithMode:(BBASMPlayerMode)mode{
if (mode == BBASMPlayerModeCustom) {
self.videoPlayerViewController.videoPlayer.isFullScreen = NO;
} else if (mode == BBASMPlayerModeFull) {
self.videoPlayerViewController.videoPlayer.isFullScreen = YES;
}
}
/**
* @brief 更新全屏转屏角度
*
* @param direction 转屏角度
*/
- (void)updateFullScreenDirection:(BBASMPlayerFullScreenDirection)direction{
}
/**
* @brief 更新是否忽略系统转屏
*
* @param ignoreOrientation 忽略系统转屏
*/
- (void)updateVideoIgnoreOrientation:(BOOL)ignoreOrientation{
}
/**
添加视图组件
@param component 视图组件
@param level 视图组件所处的层级
*/
- (void)addComponent:(UIView *)component atLevel:(NSUInteger)level{
}
/**
* @brief 控制静音
*
* @param isMuted 是否静音
*/
- (void)changeVideoPlayerMutedAndUtilMuted:(BOOL)isMuted{
}
- (void)exitFullScreen {
}
- (void)reloadBarrage {
}
- (int)convertCurrentStatus:(ZFPlayerPlaybackState)status {
switch (status) {
case ZFPlayerPlayStateUnknown:{
return BBASMPlayerStatusUnknown;
break;
}
case ZFPlayerPlayStatePlaying:{
return BBASMPlayerStatusPlaying;
break;
}
case ZFPlayerPlayStatePaused:{
return BBASMPlayerStatusPaused;
break;
}
case ZFPlayerPlayStatePlayStopped:{
return BBASMPlayerStatusCompleted;
break;
}
case ZFPlayerPlayStatePlayFailed:{
return BBASMPlayerStatusPlayFailed;
break;
}
default:
break;
}
}
@end