萤石云 iOSSDK,移植跨平台相关工程
JLChen
2021-10-19 feb1c3628a4d5da3c85bd3f3dae3be22ed4f5625
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
//
//  EZPlayer.h
//  EzvizOpenSDK
//
//  Created by DeJohn Dong on 15/9/16.
//  Copyright (c) 2015年 Ezviz. All rights reserved.
//
 
#import <UIKit/UIKit.h>
 
@class EZDeviceRecordFile;
@class EZCloudRecordFile;
@class EZPlayer;
@class EZPlayerExParamInfo;
 
/**
 *  预览清晰度
 */
typedef NS_ENUM(NSInteger, EZVideoQuality) {
    EZVideoQualityLow    = 0,  //流畅
    EZVideoQualityMiddle = 1,  //均衡
    EZVideoQualityHigh   = 2   //高清
};
 
/* 播放器EZPlayer的状态消息定义 */
typedef NS_ENUM(NSInteger, EZMessageCode) {
    PLAYER_REALPLAY_START = 1,        //直播开始
    PLAYER_VIDEOLEVEL_CHANGE = 2,     //直播流清晰度切换中
    PLAYER_STREAM_RECONNECT = 3,      //直播流取流正在重连
    PLAYER_VOICE_TALK_START = 4,      //对讲开始
    PLAYER_VOICE_TALK_END = 5,        //对讲结束
    PLAYER_STREAM_START = 10,         //录像取流开始
    PLAYER_PLAYBACK_START = 11,       //录像回放开始播放
    PLAYER_PLAYBACK_STOP = 12,        //录像回放结束播放
    PLAYER_PLAYBACK_FINISHED = 13,    //录像回放被用户强制中断
    PLAYER_PLAYBACK_PAUSE = 14,       //录像回放暂停
    PLAYER_NET_CHANGED = 21,          //播放器检测到wifi变换过
    PLAYER_NO_NETWORK = 22,           //播放器检测到无网络
    PLAYER_CLOUD_IFRAME_CHANGED = 23, //云存储快放时,由全帧快放切换到抽帧快放的提示回调
    PLAYER_PLAYSPEED_LOWER = 24,      //云存储快放时的降速通知(存在两次降速:当前倍速大于4倍速时,降到4倍速;当前为4倍速时,降为1倍速)
};
 
 
/**
 *  回放速率
 */
typedef NS_ENUM(NSInteger, EZPlaybackRate) {
    EZOPENSDK_PLAY_RATE_1_16 = 9,  //以1/16倍速度播放
    EZOPENSDK_PLAY_RATE_1_8 = 7,   //以1/8倍速度播放
    EZOPENSDK_PLAY_RATE_1_4 = 5,   //以1/4倍速度播放
    EZOPENSDK_PLAY_RATE_1_2 = 3,   //以1/2倍速播放
    EZOPENSDK_PLAY_RATE_1 = 1,     //以正常速度播放
    EZOPENSDK_PLAY_RATE_2 = 2,     //以2倍速播放
    EZOPENSDK_PLAY_RATE_4 = 4,     //以4倍速度播放
    EZOPENSDK_PLAY_RATE_8 = 6,     //以8倍速度播放
    EZOPENSDK_PLAY_RATE_16 = 8,    //以16倍速度播放
    EZOPENSDK_PLAY_RATE_32 = 10,   //以32倍速度播放
};
 
/// 萤石播放器delegate方法
@protocol EZPlayerDelegate <NSObject>
 
@optional
/**
 *  播放器播放失败错误回调
 *
 *  @param player 播放器对象
 *  @param error  播放器错误
 */
- (void)player:(EZPlayer *)player didPlayFailed:(NSError *)error;
 
/**
 *  播放器消息回调
 *
 *  @param player      播放器对象
 *  @param messageCode 播放器消息码,请对照EZOpenSDK头文件中的EZMessageCode使用
 */
- (void)player:(EZPlayer *)player didReceivedMessage:(NSInteger)messageCode;
 
/**
 *  该方法废弃于v4.8.8版本,底层库不再支持。请使用getStreamFlow方法
 *  收到的数据长度(每秒调用一次)
 *
 *  @param player     播放器对象
 *  @param dataLength 播放器流媒体数据的长度(每秒字节数)
 */
- (void)player:(EZPlayer *)player didReceivedDataLength:(NSInteger)dataLength DEPRECATED_MSG_ATTRIBUTE("use getStreamFlow instead");
 
/**
 *  收到的画面长宽值
 *
 *  @param player 播放器对象
 *  @param height 高度
 *  @param width  宽度
 */
- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width;
 
 
/**
 播放过程中 回调解码数据
 重要:该回调会比较频繁(一秒若干次),同时直接由播放库线程回调上来,请勿在方法中做耗时操作
 重要:回调的数据的内存是由播放库内部分配并管理的,在使用时,请同步处理回调的data;如需异步处理,请拷贝该数据
 
 @param player 播放器对象
 @param data 播放库解码出的数据
 @param width 视频宽度
 @param height 视频高度
 */
- (void)player:(EZPlayer *)player didDecodedData:(NSData *)data width:(NSInteger)width height:(NSInteger)height;
 
@end
 
/// 此类为萤石播放器类
@interface EZPlayer : NSObject
 
/// EZPlayer关联的delegate
@property (nonatomic, weak) id<EZPlayerDelegate> delegate;
 
/// 是否让播放器处理进入后台,YES:自动处理;NO:不处理,默认为YES
@property (nonatomic) BOOL backgroundModeByPlayer;
 
/**
 *  根据设备序列号和通道号创建EZPlayer对象
 *
 *  @param deviceSerial 设备序列号
 *  @param cameraNo     通道号
 *
 *  @return EZPlayer对象
 */
+ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
//for 国标
+ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial strCameraNo:(NSString *)strCameraNo;
/**
 *  根据url构造EZPlayer对象 (主要用来处理视频广场的播放)
 *
 *  @param url 播放url
 *
 *  @return EZPlayer对象
 */
+ (instancetype)createPlayerWithUrl:(NSString *)url;
 
 
/**
 局域网设备创建播放器接口
 
 @param userId 用户id,登录局域网设备后获取
 @param cameraNo 通道号
 @param streamType 码流类型 1:主码流 2:子码流
 @return EZPlayer对象
 */
+ (instancetype)createPlayerWithUserId:(NSInteger) userId cameraNo:(NSInteger) cameraNo streamType:(NSInteger) streamType;
 
/**
 *  销毁EZPlayer
 *
 *  @return YES/NO;
 */
- (BOOL)destoryPlayer;
 
/**
 *  设置使用硬件解码器优先,需在startRealPlay之前调用
 *
 *  @param HDPriority 是否硬解优先
 */
-(void)setHDPriority:(BOOL)HDPriority;
 
/**
 获取当前的软硬解情况,在码流正常播放后调用
 
 @return 1:软解 2:硬解 0:出错
 */
- (int) getHDPriorityStatus;
 
/**
 *  设置设备归属业务来源,需要在预览回放前调用  国标设备使用
 *
 *  @param bizType 类型       国标为 bizType='GB28181'
 */
-(void)setBizType:(NSString *)bizType;
 
/**
 *  平台id 国标设备使用
 *
 *  @param platformId 类型
*/
-(void)setPlatformId:(NSString *)platformId;
 
/**
 *  设置播放器的view
 *
 *  @param playerView 播放器view
 */
- (void)setPlayerView:(UIView *)playerView;
 
/**
 *  开始播放,异步接口,返回值只是表示操作成功,不代表播放成功
 *
 *  @return YES/NO
 */
- (BOOL)startRealPlay;
 
/**
 *  停止播放,异步接口,返回值只是表示操作成功
 *
 *  @return YES/NO
 */
- (BOOL)stopRealPlay;
 
/**
 *  设置播放器解码密码
 *
 *  @param verifyCode 设备验证码
 */
- (void)setPlayVerifyCode:(NSString *)verifyCode;
 
/**
 *  开启声音
 *
 *  @return YES/NO
 */
- (BOOL)openSound;
 
/**
 *  关闭声音
 *
 *  @return YES/NO
 */
- (BOOL)closeSound;
 
/**
 获取播放组件内部的播放库的port
 
 @return 播放库的port,可能为-1(无效值)
 */
- (int) getInnerPlayerPort;
 
/**
 获取当前已播放的总流量,单位字节
 eg.计算每秒的流量:
 NSInteger a = [self getStreamFlow];
 //1s后调用
 NSInteger b = [self getStreamFlow];
 NSInteger perSecondFlow = b - a;
 
 @return 流量值
 */
- (NSInteger) getStreamFlow;
 
/**
 *  开始TTS对讲,异步接口,返回值只是表示操作成功,不代表播放成功
 *
 *  @return YES/NO
 */
- (BOOL)startVoiceTalk;
 
/**
 *  开始TTS对讲,异步接口,返回值只是表示操作成功,不代表播放成功
 *  针对于NVR对讲使用
 *  @return YES/NO
 */
- (BOOL)startVoiceTalkNeedVoiceChannel:(BOOL)needVoiceChannel;
 
/**
 *  开始Qos对讲,异步接口,返回值只是表示操作成功,不代表播放成功
 *
 *  @return YES/NO
 */
- (BOOL)startVoiceTalkByQos;
 
/**
 *  停止对讲,异步接口,返回值只是表示操作成功
 *
 *  @return YES/NO
 */
- (BOOL)stopVoiceTalk;
 
/**
 预览时开始本地录像预录制功能,异步方法
 
 @param path 文件存储路径
 @return YES/NO
 */
- (BOOL)startLocalRecordWithPathExt:(NSString *)path;
 
 
/**
 结束本地录像预录制,并生成mp4录制文件,异步方法
 
 @param complete 操作是否成功 YES/NO
 */
- (void)stopLocalRecordExt:(void (^)(BOOL ret))complete;
 
 
/**
 *  半双工对讲专用接口,是否切换到听说状态
 *
 *  @param isPressed 是否只说状态
 *
 *  @return YES/NO
 */
- (BOOL)audioTalkPressed:(BOOL)isPressed;
 
/**
 *  开始云存储远程回放,异步接口,返回值只是表示操作成功,不代表播放成功
 *  @param cloudFile 云存储文件信息
 *
 *  @return YES/NO
 */
- (BOOL)startPlaybackFromCloud:(EZCloudRecordFile *)cloudFile;
 
/**
 *  开始远程SD卡回放,异步接口,返回值只是表示操作成功,不代表播放成功
 *
 *  @param deviceFile SD卡文件信息
 *
 *  @return YES/NO
 */
- (BOOL)startPlaybackFromDevice:(EZDeviceRecordFile *)deviceFile;
 
/**
 *  暂停远程回放播放
 */
- (BOOL)pausePlayback;
 
/**
 *  继续远程回放播放
 */
- (BOOL)resumePlayback;
 
/**
 *  根据偏移时间播放
 *
 *  @param offsetTime 录像偏移时间
 */
- (void)seekPlayback:(NSDate *)offsetTime;
 
/**
 *  获取当前播放时间进度
 *
 *  @return 播放进度的NSDate数据
 */
- (NSDate *)getOSDTime;
 
/**
 *  停止远程回放
 */
- (BOOL)stopPlayback;
 
/**
 *  直播画面抓图
 *
 *  @param quality 抓图质量(0~100),数值越大图片质量越好,图片大小越大
 *
 *  @return image
 */
- (UIImage *)capturePicture:(NSInteger)quality;
 
/**
 获取内部播放器句柄。建议每次使用播放器句柄时均调用此方法获取,并进行有效性判断。
 
 @return 小于0为无效值,大于等于0为有效值
 */
- (int) getPlayPort;
 
/**
 获取当前取流方式:
 
 @return 
 */
- (int) getStreamFetchType;
 
/**
sd卡及云存储倍速回放接口
1.支持抽帧快放的设备最高支持16倍速快放(所有取流方式,包括P2P)
2.不支持抽帧快放的设备,仅支持内外网直连快放,最高支持8倍
3.HCNetSDK取流没有快放概念,全速推流,只改变播放库速率
4.注意区别:
   老SD卡回放以及HCNetSDK回放,设置完通过返回值返回成功还是失败,没有其他消息
   新协议的云存储回放以及支持seek、continue的设备d新SD卡回放,设置完通过返回值返回成功还是失败,如果成功,
   则后续还有一条EZVideoPlayerMessageStart异步消息表示成功再次取流
   返回其他错误码表示失败 (新协议云存储和新SD卡回放返回EZ_ERROR_NEED_RETRY 表示需要重试)
 
@param rate    回放速度,具体参考 EZ_PLAY_BACK_RATE
@param mode 回放时的抽帧控制,当前仅云存储支持。0: 4倍速全帧,8倍速以上抽帧   1:抽帧   2:全帧  (如设备回放当前不支持,传入0即可)
@return YES/NO
 */
- (BOOL) setPlaybackRate:(EZPlaybackRate) rate mode:(NSUInteger)mode;
 
/**
 设置全双工对讲时的模式,对讲成功后调用
 
 @param routeToSpeaker YES:使用扬声器 NO:使用听筒
 */
- (void) changeTalkingRouteMode:(BOOL) routeToSpeaker;
 
/// //扩展参数 UIKit专用
/// @param exParamInfo EZPlayerExParamInfo
- (void) setExParamInfo:(EZPlayerExParamInfo *) exParamInfo;
 
@end