CNLiveMoviePlayerController.h
11.1 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
//
// CNLiveMoviePlayerController.h
//
// Created by CNLive on 16/8/5.
// Copyright © 2016年 CNLive. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import "CNLiveTypeDef.h"
@interface CNLiveMoviePlayerController : NSObject
#pragma mark - 使用视讯云平台 直接通过节目id播放
/* 初始化点播播放器 初始化成功后才能对播放器进行设置(如:自动播放、是否开启硬件解码等)和调用准备播放视频方法(prepareToPlay)
*
* 当前版本只支持单实例的CNLiveMoviePlayerController对象,多实例将导致播放异常
*
* vId 点播视频Id
* authSuccess 初始化成功block
* authFailed 初始化失败block 回调一个errorInfo的字典
*
*/
- (instancetype)initVodPlayWithVId:(NSString *)vId
authSuccess:(void(^)(void))authSuccessBlock
authFailed:(void(^)(NSDictionary *errorInfo))authFailedBlock;
/* 初始化直播播放器 初始化成功后才能对播放器进行设置(如:自动播放、是否开启硬件解码等)和调用准备播放视频方法(prepareToPlay)
*
* 当前版本只支持单实例的CNLiveMoviePlayerController对象,多实例将导致播放异常
*
* channelId 直播视频Id
* authSuccess 初始化成功block
* authFailed 初始化失败block 回调一个errorInfo的字典
*
* result 获取主播状态 YES:获取状态成功
* NO:获取失败,不影响视频播放,但是获取不到主播离开、回来、直播结束等通知。可通过
* - (void)retryToGetAnchorStatusResult:(void(^)(BOOL result))result;方法重新获取
*/
- (instancetype)initLivePlayWithChannelId:(NSString *)channelId
authSuccess:(void(^)(void))authSuccessBlock
authFailed:(void(^)(NSDictionary *errorInfo))authFailedBlock
getAnchorStatusResult:(void(^)(BOOL result))result;
/*
* 是否开启控制台输出日志(默认YES)
*/
@property (nonatomic, assign) BOOL logPrintEnable;
/* 切换视角和码率
*
* 调用此方法会获取视频的不同视角或码率,并重新加载视频(获取视频的不同视角或码率需要一定的时间,在这段时间内,播放器不会停止播放,建议将播放器设为暂停状态(pause),并展示加载视频时的UI)
*
* channelId 直播视频Id(同一视角可不传)
* rate 清晰度(1:流畅、2:标清(默认)、3:高清、4:超清)
*
*/
- (void)changeViewWithChannelId:(NSString *)channelId rate:(NSString *)rate;
/* 切换视频源
*
* 当视频不够流畅时可调用此方法
* 调用此方法会获取不同的视频源,并重新加载视频(获取其他视频源需要一定的时间,在这段时间内,播放器不会停止播放,建议将播放器设为暂停状态(pause),并展示加载视频时的UI)
*
*/
- (void)retry;
/* 重新获取主播直播状态
*
* result 重新获取主播直播状态,YES:成功 NO:失败
*
*/
- (void)retryToGetAnchorStatusResult:(void(^)(BOOL result))result;
/**
* 销毁播放器
*/
- (void)destroyPlayer;
/* 主播直播状态(只读)
*
*/
@property (nonatomic, assign, readonly) CNLiveAnchorStatus anchorStatus;
/*
* 主播直播状态改变通知
*/
FOUNDATION_EXPORT NSString *const CNLiveAnchorStatusChangedNotification NS_AVAILABLE_IOS(7_0);
#pragma mark - 普通播放器方法
/*
* 初始化播放器并设置播放地址
*/
- (instancetype)initWithContentURL:(NSURL *)url;
/* 解码方式(硬解/软解/自动)
*
* 建议系统版本高于8.0 选择硬解,或者自动选择解码方式,8.0以上的系统优先选择硬解
* 只在[prepareToPlay]调用前设置生效
*
*/
@property(nonatomic) CNLiveMovieVideoDecoderMode videoDecoderMode;
/* 重新启动拉流
*
* url 视频播放地址,该地址可以是本地地址或者服务器地址.如果为nil,则使用前一次播放地址
*
*/
- (void)reload:(NSURL *)aUrl;
/**
* timeout指定拉流超时时间,单位是秒
* prepareTimeout 建立链接超时时间,默认值是10秒
* readTimeout 拉流超时时间,默认值是30秒
*/
- (void)setTimeout:(int)prepareTimeout readTimeout:(int)readTimeout;
/*
* 播放视频时是否需要自动播放,默认值为YES
*/
@property (nonatomic) BOOL shouldAutoplay;
/* 准备视频播放
*
* MPMediaPlaybackIsPreparedToPlayDidChangeNotification, 播放器完成对视频文件的初始化时发送通知
*
*/
- (void)prepareToPlay;
/*
* 查询视频准备是否完成(只读)
*/
@property(nonatomic, readonly) BOOL isPreparedToPlay;
// Posted when the prepared state changes of an object conforming to the MPMediaPlayback protocol changes.
// This supersedes MPMoviePlayerContentPreloadDidFinishNotification.
MP_EXTERN NSString *const MPMediaPlaybackIsPreparedToPlayDidChangeNotification NS_DEPRECATED_IOS(3_2, 9_0);
/*
* 播放当前视频
*/
- (void)play;
/* 暂停播放当前视频
*
* 播放器内部监听了UIApplicationWillEnterForegroundNotification通知,该通知发生时如果视频仍然在播放,将自动调用pause暂停当前视频播放
*
* 需要APP有后台执行权限,在工程Info.plist中添加后台运行模式,设置为audio。具体是添加UIBackgroundModes项,值为audio
* 当用户点击home按钮后,播放器进入后台继续读取数据并播放音频
* 当APP回到前台后,音频继续播放。图像渲染内容保持和音频同步
* 如果在开启后台运行模式后,需要切换后台暂停,需要监听相关事件并主动调用pause操作
*
*/
- (void)pause;
/* 结束当前视频的播放
*
* 重复多次调用将会导致崩溃
* 调用stop结束当前播放,如果需要重新播放该视频,需要调用[prepareToPlay]([KSYMediaPlayback prepareToPlay])方法
* 调用stop方法后,播放器开始进入关闭当前播放的操作,操作完成将发送MPMoviePlayerPlaybackDidFinishNotification通知
*
* MPMoviePlayerPlaybackDidFinishNotification, 当播放完成将发送该通知
*
*/
- (void)stop;
/*
* 当前播放器是否在播放
*/
- (BOOL)isPlaying;
/*
* 指定播放器输出音量
* leftVolume left volume scalar [0~2.0f]
* rightVolume right volume scalar [0~2.0f]
* 输入参数超出范围将失效
*/
-(void)setVolume:(float)leftVolume rigthVolume:(float)rightVolume;
/* 播放视频的当前时刻,单位为秒
*
* 视频正常播放时,如果改变currentPlaybackTime的值,将导致播放行为跳转到新的currentPlaybackTime位置播放
* 如果在视频未播放前设置currentPlaybackTime的值,将导致播放时刻从currentPlaybackTime位置播放
*
*/
@property(nonatomic) NSTimeInterval currentPlaybackTime;
/*
* 当前视频总时长(只读)
*/
@property (nonatomic, readonly) NSTimeInterval duration;
/* 当前视频可播放长度(只读)
*
* currentPlaybackTime 标记的是播放器当前已播放的时长。
* playableDuration 标记的是播放器缓冲的时间,会稍大于currentPlaybackTime,与currentPlaybackTime的差值则是缓冲长度。
*
*/
@property (nonatomic, readonly) NSTimeInterval playableDuration;
/* 包含视频播放内容的VIEW(只读)
*
* 可以通过frame设置view大大小
* 使用[scalingMode]可以更改视频内容在VIEW中的显示情况
*
*/
@property (nonatomic, readonly) UIView *view;
/* 当前播放器的播放状态(只读)
*
* MPMoviePlaybackStateStopped, // 播放停止
* MPMoviePlaybackStatePlaying, // 正在播放
* MPMoviePlaybackStatePaused, // 播放暂停
* MPMoviePlaybackStateInterrupted, // 播放被打断
* MPMoviePlaybackStateSeekingForward, // 向前seeking中
* MPMoviePlaybackStateSeekingBackward // 向后seeking中
*
* MPMoviePlayerPlaybackDidFinishNotification,当播放完成时提供通知
* MPMoviePlayerPlaybackStateDidChangeNotification,当播放状态变化时提供通知
*
*/
@property (nonatomic, readonly) MPMoviePlaybackState playbackState;
/* 当前网络加载情况(只读)
*
* MPMovieLoadStateUnknown = 0, // 加载情况未知
* MPMovieLoadStatePlayable = 1 << 0, // 加载完成,可以播放
* MPMovieLoadStatePlaythroughOK = 1 << 1, // 加载完成,如果shouldAutoplay为YES,将自动开始播放
* MPMovieLoadStateStalled = 1 << 2, // 如果视频正在加载中
*
* MPMoviePlayerLoadStateDidChangeNotification,当加载状态变化时提供通知
*
*/
@property (nonatomic, readonly) MPMovieLoadState loadState;
/* 当前缩放显示模式
*
* MPMovieScalingModeNone, // 无缩放
* MPMovieScalingModeAspectFit, // 同比适配,某个方向会有黑边
* MPMovieScalingModeAspectFill, // 同比填充,某个方向的显示内容可能被裁剪
* MPMovieScalingModeFill // 满屏填充,与原始视频比例不一致
*
*/
@property (nonatomic) MPMovieScalingMode scalingMode;
/* 当前视频宽高(只读)
*
* 监听MPMovieNaturalSizeAvailableNotification
* 播放过程中,宽高信息可能会产生更改
*
*/
@property (nonatomic, readonly) CGSize naturalSize;
// Posted when the playback state changes, either programatically or by the user.
MP_EXTERN NSString * const MPMoviePlayerPlaybackStateDidChangeNotification;
// Posted when movie playback ends or a user exits playback.
MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishNotification;
MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishReasonUserInfoKey; // NSNumber (MPMovieFinishReason)
// Posted when the network load state changes.
MP_EXTERN NSString * const MPMoviePlayerLoadStateDidChangeNotification;
MP_EXTERN NSString * const MPMovieNaturalSizeAvailableNotification;
MP_EXTERN NSString * const MPMoviePlayerFirstVideoFrameRenderedNotification;
MP_EXTERN NSString * const MPMoviePlayerFirstAudioFrameRenderedNotification;
/* bufferTimeMax指定直播流播放时的最大缓冲时长,单位为秒
*
* 当buffer为负数时,关闭直播追赶
* 该属性仅对直播流有效
* 默认值为2秒
*
*/
@property NSTimeInterval bufferTimeMax;
/* 已经加载的数据大小(只读)
*
* 已经加载的数据大小,单位是兆
* 已经加载的全部数据大小,包括音频和视频
* 数据包括已经播放的,和当前的cache数据
*
*/
@property (nonatomic, readonly) double readSize;
/* buffer为空时,拉取数据所耗的时长(只读)
*
* 当buffer为空时,开始统计。单位为秒
*
* 当MPMoviePlayerLoadStateDidChangeNotification 通知发起
* MPMovieLoadState状态为MPMovieLoadStateStalled 开始计时
* MPMovieLoadState状态为MPMovieLoadStatePlayable 或者 MPMovieLoadStatePlaythroughOK时,结束计时
*
*/
@property (nonatomic, readonly) NSTimeInterval bufferEmptyDuration;
/* 发起cache的次数(只读)
*
* 当buffer为空时,统计一次,统计的条件为
*
* 当MPMoviePlayerLoadStateDidChangeNotification 通知发起
* MPMovieLoadState 状态为MPMovieLoadStateStalled
*
*/
@property (nonatomic, readonly) NSInteger bufferEmptyCount;
/* 截图
*
* 当前时刻的视频UIImage 图像
*
*/
- (UIImage *)thumbnailImageAtCurrentTime;
@end