NIMNetCallManagerProtocol.h
23.9 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
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
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
//
// NIMNetCallManagerProtocol.h
// NIMLib
//
// Created by Netease.
// Copyright (c) 2015 Netease. All rights reserved.
//
#import <CoreMedia/CMSampleBuffer.h>
#import <NIMSDK/NIMPlatform.h>
#import "NIMAVChatDefs.h"
NS_ASSUME_NONNULL_BEGIN
@class NIMNetCallOption;
@class NIMNetCallMeeting;
@class NIMNetCallRecordingInfo;
@class NIMNetCallUserInfo;
@class NIMNetCallAudioFileMixTask;
@class NIMNetCallVideoCaptureParam;
/**
* 发起通话Block
*
* @param error 发起通话结果, 如果成功error为nil
* @param callID 发起通话的call id, 如果发起失败则为0
*/
typedef void(^NIMNetCallStartHandler)(NSError * __nullable error, UInt64 callID);
/**
* 响应通话请求Block
*
* @param error 响应通话请求结果, 如果成功error为nil
* @param callID 响应通话的call id
*/
typedef void(^NIMNetCallResponseHandler)(NSError * __nullable error, UInt64 callID);
/**
* 预订或者加入多人会议请求Handler
*
* @param meeting 预订或者加入的多人会议
* @param error 预订或者加入多人会议请求结果, 如果成功 error 为 nil
*/
typedef void(^NIMNetCallMeetingHandler)(NIMNetCallMeeting *meeting, NSError * __nullable error);
/**
* 网络通话状态
*/
typedef NS_ENUM(NSInteger, NIMNetCallStatus){
/**
* 已连接
*/
NIMNetCallStatusConnect,
/**
* 已断开
*/
NIMNetCallStatusDisconnect,
};
/**
* 网络通话控制类型
*/
typedef NS_ENUM(NSInteger, NIMNetCallControlType){
/**
* 开启了音频
*/
NIMNetCallControlTypeOpenAudio = 1,
/**
* 关闭了音频
*/
NIMNetCallControlTypeCloseAudio = 2,
/**
* 开启了视频
*/
NIMNetCallControlTypeOpenVideo = 3,
/**
* 关闭了视频
*/
NIMNetCallControlTypeCloseVideo = 4,
/**
* 切换到视频模式
*/
NIMNetCallControlTypeToVideo = 5,
/**
* 同意切换到视频模式,用于切到视频模式需要对方同意的场景
*/
NIMNetCallControlTypeAgreeToVideo = 6,
/**
* 拒绝切换到视频模式,用于切到视频模式需要对方同意的场景
*/
NIMNetCallControlTypeRejectToVideo = 7,
/**
* 切换到音频模式
*/
NIMNetCallControlTypeToAudio = 8,
/**
* 占线
*/
NIMNetCallControlTypeBusyLine = 9,
/**
* 没有可用摄像头
*/
NIMNetCallControlTypeNoCamera = 10,
/**
* 应用切换到了后台
*/
NIMNetCallControlTypeBackground = 11,
/**
* 收到呼叫请求的反馈,通常用于被叫告诉主叫可以播放回铃音了
*/
NIMNetCallControlTypeFeedabck = 12,
/**
* 开始录制
*/
NIMNetCallControlTypeStartRecord = 13,
/**
* 结束录制
*/
NIMNetCallControlTypeStopRecord = 14,
};
/**
* 视频通话使用的摄像头
*/
typedef NS_ENUM(NSInteger, NIMNetCallCamera){
/**
* 前置摄像头
*/
NIMNetCallCameraFront,
/**
* 后置摄像头
*/
NIMNetCallCameraBack,
};
/**
* 音视频聊天相关回调
*/
@protocol NIMNetCallManagerDelegate <NSObject>
@optional
/**
* 被叫收到呼叫(振铃)
*
* @param callID call id
* @param caller 主叫帐号
* @param type 呼叫类型
* @param extendMessage 扩展消息, 透传主叫发起通话时携带的该信息
*/
- (void)onReceive:(UInt64)callID
from:(NSString *)caller
type:(NIMNetCallMediaType)type
message:(nullable NSString *)extendMessage;
/**
* 主叫收到被叫响应
*
* @param callID call id
* @param callee 被叫帐号
* @param accepted 是否接听
*/
- (void)onResponse:(UInt64)callID
from:(NSString *)callee
accepted:(BOOL)accepted;
/**
* 对方挂断电话
*
* @param callID call id
* @param user 对方帐号
*/
- (void)onHangup:(UInt64)callID
by:(NSString *)user;
/**
* 这通呼入通话已经被该帐号其他端处理
*
* @param callID 呼入通话的call id
* @param accepted 是否被接听
*/
- (void)onResponsedByOther:(UInt64)callID
accepted:(BOOL)accepted;
/**
点对点通话建立成功
@param callID call id
*/
- (void)onCallEstablished:(UInt64)callID;
/**
通话异常断开
@param callID call id
@param error 断开的原因,如果是 nil 表示正常退出
*/
- (void)onCallDisconnected:(UInt64)callID
withError:(nullable NSError *)error;
/**
* 收到对方网络通话控制信息,用于方便通话双方沟通信息
*
* @param callID 相关网络通话的call id
* @param user 对方帐号
* @param control 控制类型
*/
- (void)onControl:(UInt64)callID
from:(NSString *)user
type:(NIMNetCallControlType)control;
/**
* 当前通话网络状态
*
* @param status 网络状态
* @param user 网络状态对应的用户;如果是自己,表示自己的发送网络状态
*/
- (void)onNetStatus:(NIMNetCallNetStatus)status
user:(NSString *)user;
/**
* 本地摄像头预览就绪
*
* @param displayView 本地摄像头预览层
*/
- (void)onLocalDisplayviewReady:(UIView *)displayView;
/**
* 本地视频采集方向切换完成回调
*
* @param orientation 采集方向
*/
-(void)onCameraOrientationSwitchCompleted:(NIMVideoOrientation)orientation;
/**
* 摄像头方向切换完成回调
*
* @param cameraType 摄像头方向
*/
-(void)onCameraTypeSwitchCompleted:(NIMNetCallCamera)cameraType;
/**
* 视频清晰度切换完成回调
*
* @param videoQuality 清晰度
*/
-(void)onCameraQualitySwitchCompleted:(NIMNetCallVideoQuality)videoQuality;
/**
* 远程视频YUV数据就绪
*
* @param yuvData 远程视频YUV数据, 紧凑型 (stride 等于 width)
* @param width 远程视频画面宽度
* @param height 远程视频画面长度
* @param user 远程视频画面属于的用户
*
* @discussion 将YUV数据直接渲染在OpenGL上比UIImageView贴图占用更少的cpu
*/
- (void)onRemoteYUVReady:(NSData *)yuvData
width:(NSUInteger)width
height:(NSUInteger)height
from:(NSString *)user API_UNAVAILABLE(macos);;
/**
* 远程视频 SampleBuffer 数据就绪
*
* @param sampleBuffer 远程视频 SampleBuffer 数据
* @param user 远程视频画面属于的用户
*
*/
- (void)onRemoteVideo:(CMSampleBufferRef)sampleBuffer
from:(NSString *)user API_UNAVAILABLE(ios);;
/**
* 远程视频画面就绪
*
* @param image 远程视频画面
*
* @discussion 如果你已经使用onRemoteYUVReady:width:height:得到的YUV数据渲染画面, 不要实现该委托以优化性能
*/
- (void)onRemoteImageReady:(CGImageRef)image;
/**
* 录制成功开始
*
* @param callID 录制的相关网络通话的call id
* @param fileURL 录制的文件路径
* @param userId 录制用户对象的id
*/
- (void)onRecordStarted:(UInt64)callID
fileURL:(NSURL *)fileURL
uid:(NSString *)userId;
/**
* 录制发生了错误
*
* @param error 错误
* @param callID 录制错误相关网络通话的call id
* @param userId 录制用户对象的id
*/
- (void)onRecordError:(NSError *)error
callID:(UInt64)callID
uid:(NSString *)userId;
/**
* 录制成功结束
*
* @param callID 录制的相关网络通话的call id
* @param fileURL 录制的文件路径
* @param userId 录制用户对象的id
*/
- (void)onRecordStopped:(UInt64)callID
fileURL:(NSURL *)fileURL
uid:(NSString *)userId;
/**
* 网络通话服务器录制信息
*
* @param info 录制信息
*/
- (void)onNetCallRecordingInfo:(NIMNetCallRecordingInfo *)info;
/**
* 用户加入了多人会议
*
* @param uid 用户 id
* @param meeting 用户加入的会议
*/
- (void)onUserJoined:(NSString *)uid
meeting:(NIMNetCallMeeting *)meeting;
/**
* 用户离开了多人会议
*
* @param uid 用户 id
* @param meeting 用户离开的会议
*/
- (void)onUserLeft:(NSString *)uid
meeting:(NIMNetCallMeeting *)meeting;
/**
* 会议发生了错误
*
* @param error 错误信息
* @param meeting 发生错误的会议
*/
- (void)onMeetingError:(NSError *)error
meeting:(NIMNetCallMeeting *)meeting;
/**
* 自己当前音量
*
* @param volume 音量
*/
-(void)onMyVolumeUpdate:(UInt16)volume;
/**
* 正在说话的用户信息汇报
*
* @param report 用户信息,包含音量,如果为空,表示没有说话的人
*/
- (void)onSpeakingUsersReport:(nullable NSArray<NIMNetCallUserInfo *> *)report;
/**
当前语音文件混音任务完成回调
*/
- (void)onAudioMixTaskCompleted;
/**
当前音效播放完成回调
*/
- (void)onSoundEffectPlayCompleted;
/**
互动直播状态回调
@param code 互动直播状态码
*/
- (void)onBypassStreamingStatus:(NIMBypassStreamingStatus)code;
/**
* 摄像头开关状态回调
*
* @param running 开启状态
*/
- (void)onCameraRunning:(BOOL)running;
/**
* 资源释放完毕通知
*/
- (void)onResourceFreed;
/**
* 会话时长
*
* @param timeDuration 时长 单位:毫秒
*/
- (void)onSessionTimeDuration:(UInt64)timeDuration;
@end
/**
* 网络通话协议
*/
@protocol NIMNetCallManager <NSObject>
/**
* 主叫发起通话 - 新接口
*
* @param callees 被叫帐号列表, 现在只支持传入一个被叫
* @param type 呼叫类型
* @param option 开始通话附带的选项, 可以为空。如果需要 SDK 自动开启摄像头,需要指定 option 的视频采集参数 videoCaptureParam
* @param completion 发起通话结果回调
*/
- (void)start:(NSArray<NSString *> *)callees
type:(NIMNetCallMediaType)type
option:(nullable NIMNetCallOption *)option
completion:(nullable NIMNetCallStartHandler)completion;
/**
* 被叫响应呼叫
*
* @param callID call id
* @param accept 是否接听
* @param option 开始通话附带的选项, 可以为空。如果需要 SDK 自动开启摄像头,需要指定 option 的视频采集参数 videoCaptureParam
* @param completion 响应呼叫结果回调
*
* @discussion 被叫拒绝接听时, 主叫不需要再调用hangup:接口
*/
- (void)response:(UInt64)callID
accept:(BOOL)accept
option:(nullable NIMNetCallOption *)option
completion:(nullable NIMNetCallResponseHandler)completion;
/**
* 挂断通话
*
* @param callID 需要挂断电话的call id, 如果尚未获取到call id就填0
*
* @discussion 被叫在响应呼叫之前不要调用挂断接口
*/
- (void)hangup:(UInt64)callID;
/**
* 预订多人会议
*
* @param meeting 预订的多人会议
* @param completion 预订会议结果
*/
- (void)reserveMeeting:(NIMNetCallMeeting *)meeting
completion:(nullable NIMNetCallMeetingHandler)completion;
/**
* 加入多人会议
*
* @param meeting 需要加入的多人会议
* @param completion 加入会议结果
*
* @discussion 如果需要 SDK 自动开启摄像头,需要在 meeting 中指定 option 的视频采集参数 videoCaptureParam
*/
- (void)joinMeeting:(NIMNetCallMeeting *)meeting
completion:(nullable NIMNetCallMeetingHandler)completion;
/**
* 离开多人会议
*
* @param meeting 需要离开的多人会议
*
* @discussion 当所有加入的人都离开了某会议, 该会议对应的名称才可以被重复预订
*
*/
- (void)leaveMeeting:(NIMNetCallMeeting *)meeting;
/**
* 开始视频采集。用于需要在开始音视频通话之前开启视频采集的场景
*
* @param param 视频采集参数
*
* @return 开始是否成功
*
* @discussion 视频采集开始以后无法再调用该接口进行更新设置。需要先停止采集以后才能再次开始
*/
- (BOOL)startVideoCapture:(NIMNetCallVideoCaptureParam *)param;
/**
* 设置视频采集方向
*
* @param orientation 需要设置的方向
*
* @return 设置是否成功
*
* @discussion 用于互动直播场景。只能在开始视频采集以后调用
*/
- (BOOL)setVideoCaptureOrientation:(NIMVideoOrientation)orientation;
/**
* 停止视频采集。用于在网络通话的自动停止视频采集选项 stopVideoCaptureOnLeave 未开启时主动管理采集的关闭操作
*/
- (void)stopVideoCapture;
/**
* 切换网络通话摄像头
*
* @param camera 选择的摄像头
*
* @discussion 切换网络通话类型将丢失该设置
*/
- (void)switchCamera:(NIMNetCallCamera)camera API_UNAVAILABLE(macos);
/**
* 设置摄像头关闭
*
* @param disable 是否关闭
*
* @return 设置是否成功
*
* @discussion 仅支持当前为视频模式时进行此设置, 切换网络通话类型将丢失该设置
*/
- (BOOL)setCameraDisable:(BOOL)disable;
/**
* 通话中切换视频质量
*
* @param quality 期望的视频质量
*
* @return 是否设置成功. 如果用户尚未加入, 则无法设置
*/
- (BOOL)switchVideoQuality:(NIMNetCallVideoQuality)quality;
/**
* 改变自己在会议中的角色
*
* @param actor 是否为发言者角色, 发言者发送音视频数据, 非发言者不发送音视频数据
*
* @return 设置是否成功
*/
- (BOOL)setMeetingRole:(BOOL)actor;
/**
* 指定某用户设置是否对其静音
*
* @param mute 是否静音, 静音后将听不到该用户的声音
* @param uid 用户 uid
*
* @return 是否设置成功. 如果用户尚未加入, 则无法设置
*/
- (BOOL)setAudioMute:(BOOL)mute forUser:(NSString *)uid;
/**
* 指定某用户设置是否接收其视频
*
* @param mute 是否拒绝视频, 拒绝后将没有该用户视频数据回调
* @param uid 用户uid
*
* @return 是否设置成功. 如果用户尚未加入, 则无法设置
*/
- (BOOL)setVideoMute:(BOOL)mute forUser:(NSString *)uid;
/**
设置禁止发送视频
@param mute 是否禁止发送视频
@return 是否设置成功. 如果用户尚未加入, 则无法设置
*/
- (BOOL)setVideoSendMute:(BOOL)mute;
/**
* 发送网络通话的控制信息,用于方便通话双方沟通信息
*
* @param callID 控制信息相关通话的call id
* @param type 控制类型
*/
- (void)control:(UInt64)callID
type:(NIMNetCallControlType)type;
/**
* 设置网络通话麦克风静音
*
* @param mute 是否开启麦克风静音
*
* @return 开启麦克风静音是否成功
*
* @discussion 该设置不影响伴音发送, 切换网络通话类型将丢失该设置
*/
- (BOOL)setMute:(BOOL)mute;
/**
* 设置是否关闭语音发送,包含伴音
*
* @param mute 是否关闭语音发送
*
* @return 设置是否成功
*
*/
- (BOOL)setAudioSendMute:(BOOL)mute;
/**
* 设置网络通话扬声器模式
*
* @param useSpeaker 是否开启扬声器
*
* @return 开启扬声器是否成功
*
* @discussion 切换网络通话类型将丢失该设置
*/
- (BOOL)setSpeaker:(BOOL)useSpeaker API_UNAVAILABLE(macos);
/**
* 切换网络通话类型
*
* @param type 通话类型
*
* @discussion 切换通话类型会丢失这些设置: 静音模式, 扬声器模式, 摄像头关闭, 切换摄像头
*/
- (void)switchType:(NIMNetCallMediaType)type;
/**
* 设置视频最大编码码率
*
* @param bitrate 最大编码码率 (bps)
*
* @return 是否设置成功
*/
- (BOOL)setVideoMaxEncodeBitrate:(NSUInteger)bitrate;
/**
* 切换视频编码器
*
* @param codec 视频编码器
*
* @return 是否设置成功. 如果用户尚未加入, 则无法设置
*
* @discussion 硬编码设置仅在iOS8及以上系统有效
*
*/
- (BOOL)switchVideoEncoder:(NIMNetCallVideoCodec)codec;
/**
* 切换视频解码器
*
* @param codec 视频解码器
*
* @return 是否设置成功. 如果用户尚未加入, 则无法设置
*
* @discussion 硬解码设置仅在iOS8及以上系统有效
*
*/
- (BOOL)switchVideoDecoder:(NIMNetCallVideoCodec)codec;
/**
* 选择视频调控策略
*
* @param videoAdaptiveStrategy 视频调控策略
*
* @return 是否设置成功.
*/
- (BOOL)selectVideoAdaptiveStrategy:(NIMAVChatVideoAdaptiveStrategy)videoAdaptiveStrategy;
/**
* 发送视频 SampleBuffer
*
* @param buffer 只支持包含以下三种 CVPixelBuffer 数据格式的 sampleBuffer: kCVPixelFormatType_32BGRA、kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange、kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
*
* @discussion 可以发送SDK回调上来的视频数据,也可以发送自定义视频数据 自定义数据输入不能超过720P
*
* @return 发送结果
*/
- (nullable NSError *)sendVideoSampleBuffer:(CMSampleBufferRef)buffer;
/**
* 互动直播设置主画面
*
* @param uid 被设置的用户id
*
* @param completion 完成回调 如果设置成功 error 为 nil
*
* @discussion 在互动直播下,动态切换布局,设置用户为主画面,只有互动直播主播可以设置
*/
- (void)setAsMainArea:(NSString *)uid completion:(void(^)(NSError * __nullable error))completion;
/**
* 切换互动直播推流地址
*
* @param url 推流地址
*
* @return 是否设置成功
*/
- (BOOL)switchBypassStreamingUrl:(NSString *)url;
/**
开始混音任务
@param task 文件混音任务
@return 结果, 如果成功开始了, 返回 nil
@discussion 开始新的任务会结束正在进行中的任务
*/
- (nullable NSError *)startAudioMix:(NIMNetCallAudioFileMixTask *)task;
/**
更新混音任务
@param task 文件混音任务
@return 结果, 如果成功开始了, 返回 nil
@discussion 可以更新循环播放次数和音量等
*/
- (nullable NSError *)updateAudioMix:(NIMNetCallAudioFileMixTask *)task;
/**
暂停混音
@return 是否成功
*/
- (BOOL)pauseAudioMix;
/**
恢复混音
@return 是否成功
*/
- (BOOL)resumeAudioMix;
/**
结束混音
@return 是否成功
*/
- (BOOL)stopAudioMix;
/**
获取当前进行中的混音任务
@return 混音任务. 如果没有当前任务则返回 nil
*/
- (nullable NIMNetCallAudioFileMixTask *)currentAudioMixTask;
/**
播放音效,用于在混音时播放短暂的音效
@param task 音效任务。其中的 sendVolume 参数在播放音效中无效
@return 结果, 如果成功开始了, 返回 nil
*/
- (nullable NSError *)playSoundEffect:(NIMNetCallAudioFileMixTask *)task;
/**
打开耳返
*/
- (void)startEarBack;
/**
关闭耳返
*/
- (void)stopEarBack;
/**
调节耳返音量
@param volume 耳返音量 接受输入值为 0 到 10
@return 是否调节成功
*/
- (BOOL)changeEarBackVolume:(NSUInteger)volume;
/**
* 获得当前视频通话的本地预览层
*
* @return 预览层
*/
- (nullable UIView *)localPreview;
/**
* 本地截图. 截取自己下一帧待发送的画面
*
* @param result 截图结果
*
* @discussion 如果截图失败, result 中 image 为 nil
*/
- (void)snapshotFromLocalVideoCompletion:(void(^)(UIImage * __nullable image))result;
/**
* 获取正在进行中的网络通话call id
*
* @return call id, 如果没有正在进行中的通话则返回0
*/
- (UInt64)currentCallID;
/**
* 获取当前网络通话中某用户的网络状态
*
* @param user 用户. 可以传入自己的 id 以获取自己的发送网络状况
*
* @return 网络状态
*/
- (NIMNetCallNetStatus)netStatus:(NSString *)user;
/**
* 开始MP4文件录制, 录制通话过程中自己的音视频内容到MP4文件
*
* @param filePath 录制文件路径, SDK不负责创建目录, 请确保文件路径的合法性,
* 也可以传入nil, 由SDK自己选择文件路径
* @param videoBitrate 录制文件视频码率设置, 可以不指定, 由SDK自己选择合适的码率
*
* @param userId 录制用户对象的id
*
* @return 是否允许开始录制
*
* @discussion 只有通话连接建立以后才允许开始录制
*/
- (BOOL)startRecording:(nullable NSURL *)filePath
videoBitrate:(UInt32)videoBitrate
uid:(NSString *)userId;
/**
* 停止MP4文件录制
*
* @param userId 录制用户对象的id
*
* @return 是否接受停止录制请求
*/
- (BOOL)stopRecordingWithUid:(NSString *)userId;
/**
开始通话录音. 录制通话中所有参与者的声音, 包含混音任务播放的声音, 录制成 aac 或者 wav 文件
@param filePath 录制文件路径, 不包含文件类型后缀. 包含文件类型后缀的完整文件路径可以在开始录制以后通过 currentAudioRecordingFilePath 查询.
@discussion SDK不负责创建目录, 请确保文件路径的合法性, 也可以传入 nil, 由 SDK 自己选择文件路径
@param error 错误. 如果开始通话录音失败, 此处回填错误码
@return 开始通话录音的结果.
*/
- (BOOL)startAudioRecording:(nullable NSURL *)filePath
error:(NSError * __nullable *)error;
/**
结束通话录音
*/
- (void)stopAudioRecording;
/**
获取当前通话录音文件路径
@return 当前通话录音文件路径. 如果没有进行中的通话录音则返回 nil
*/
- (nullable NSURL *)currentAudioRecordingFilePath;
/**
* 获得 SDK 网络通话网络层log 文件路径
*
* @return SDK 网络通话 log
*/
- (NSString *)netCallLogFilepath;
/**
* 添加网络通话委托
*
* @param delegate 网络通话委托
*/
- (void)addDelegate:(id<NIMNetCallManagerDelegate>)delegate;
/**
* 移除网络通话委托
*
* @param delegate 网络通话委托
*/
- (void)removeDelegate:(id<NIMNetCallManagerDelegate>)delegate;
/**
选择滤镜类型
@param type 滤镜类型
@return 是否设置成功
*/
- (BOOL)selectBeautifyType:(NIMNetCallFilterType)type;
/**
改变焦距 实际放大倍数
@param scale 放大倍数
@return 是否设置成功
*/
- (BOOL)changeLensPosition:(float)scale API_UNAVAILABLE(macos);
/**
设置闪光灯开关
@param isFlashOn 是否开启闪光灯
*/
- (void)setCameraFlash:(BOOL)isFlashOn API_UNAVAILABLE(macos);
/**
设置预览镜像
@param isMirrorOn 是否开启预览镜像
*/
- (void)setPreViewMirror:(BOOL)isMirrorOn ;
/**
设置编码镜像
@param isMirrorOn 是否开启编码镜像
*/
- (void)setCodeMirror:(BOOL)isMirrorOn API_UNAVAILABLE(macos);
/**
设置对焦模式
@param mode 对焦模式
@return 是否设置成功
*/
- (BOOL)setFocusMode:(NIMNetCallFocusMode)mode API_UNAVAILABLE(macos);
/**
获取摄像头支持的最大放大倍数
* @return 放大倍数
*/
- (CGFloat)getMaxZoomScale API_UNAVAILABLE(macos);
/**
添加静态水印
@param image 水印图片
@param rect 水印具体位置和大小(x,y根据location位置,计算具体的位置信息)
@param location 水印位置
@return 是否设置成功
*/
- (BOOL)addWaterMark:(UIImage*)image
rect:(CGRect)rect
location:(NIMNetCallWaterMarkLocation)location API_UNAVAILABLE(macos);
/**
添加动态水印
@param imageArray 动态图像数组
@param count 播放速度的快慢:count代表count帧显示同一张图
@param looped 是否循环,不循环就显示一次
@param rect 具体位置和大小(x,y根据location位置,计算具体的位置信息)
@param location 位置
@return 是否设置成功
*/
- (BOOL)addDynamicWaterMarks:(NSArray*)imageArray
fpsCount:(unsigned int)count
loop:(BOOL)looped
rect:(CGRect)rect
location:(NIMNetCallWaterMarkLocation)location API_UNAVAILABLE(macos);
/**
* 清除水印
*/
- (void)cleanWaterMark API_UNAVAILABLE(macos);
/**
手动对焦
@param devicePoint 点
*/
- (void)changeNMCVideoPreViewManualFocusPoint:(CGPoint)devicePoint API_UNAVAILABLE(macos);
/**
设置对比度滤镜强度,支持自然 粉嫩 怀旧 黑白模式
@param value 值 [0-4] 默认为 1
@return 是否设置成功
*/
- (BOOL)setContrastFilterIntensity:(float)value API_UNAVAILABLE(macos);
/**
设置磨皮滤镜强度,支持自然 粉嫩 怀旧 黑白模式
@param value 值 [0-1] 默认为 0
@return 是否设置成功
*/
- (BOOL)setSmoothFilterIntensity:(float)value API_UNAVAILABLE(macos);
@end
NS_ASSUME_NONNULL_END