You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
595 lines
22 KiB
595 lines
22 KiB
1 year ago
|
//
|
||
|
// JCCall.h
|
||
|
// JCSDK-OC
|
||
|
//
|
||
|
// Created by maikireton on 2017/8/11.
|
||
|
// Copyright © 2017年 juphoon. All rights reserved.
|
||
|
//
|
||
|
|
||
|
#import <Foundation/Foundation.h>
|
||
|
#import "JCCallCallback.h"
|
||
|
#import "JCCallItem.h"
|
||
|
|
||
|
/**
|
||
|
* @defgroup 一对一通话模块
|
||
|
* @{
|
||
|
* 用于管理一对一通话
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
*通话参数,作为 {@link JCCall#call:video:callParam: call} 方法最后一个参数的入参
|
||
|
*/
|
||
|
@interface JCCallParam : NSObject
|
||
|
/**
|
||
|
* 透传参数
|
||
|
*
|
||
|
* 主叫方可以设置该参数,通过调用 {@link JCCall#call:video:callParam: call} 方法可传给被叫方 <br>
|
||
|
* 设置后被叫方可获取该参数,通过 JCCallItem 的 @ref JCCallItem#extraParam "extraParam" 属性获取
|
||
|
*/
|
||
|
@property (nonatomic) NSString * __nullable extraParam;
|
||
|
/**
|
||
|
* 与小系统通话使用,服务端需要的凭证,用于标识通话唯一性,此参数只有在 @ref JCCallMediaConfigModeIOT 模式生效
|
||
|
*
|
||
|
* 主叫方可以设置该参数,通过调用 {@link JCCall#call:video:callParam: call} 方法可传给被叫方 <br>
|
||
|
* 设置后被叫方可获取该参数,通过 JCCallItem 的 @ref JCCallItem#ticket "ticket" 属性获取
|
||
|
*/
|
||
|
@property (nonatomic) NSString * __nullable ticket;
|
||
|
/**
|
||
|
* 构造方法
|
||
|
*
|
||
|
* @param extraParam 透传参数,设置后被叫方可获取该参数
|
||
|
* @param ticket 与小系统通话使用,服务端需要的凭证,用于标识通话唯一性,此参数只有在 @ref JCCallMediaConfigModeIOT 模式生效
|
||
|
*/
|
||
|
+ (instancetype __nullable )callParamWithExtraParam:(NSString *__nullable)extraParam ticket:(NSString *__nullable)ticket;
|
||
|
|
||
|
@end
|
||
|
|
||
|
/**
|
||
|
* 一对一通话媒体参数配置类,在调用{@link call:video:callParam: call} 方法之前,设置 @ref JCCall#mediaConfig "mediaConfig" 属性
|
||
|
*/
|
||
|
@interface JCCallMediaConfig : NSObject
|
||
|
|
||
|
/**
|
||
|
* 音频编解码
|
||
|
*
|
||
|
* 协商优先级按顺序排列, 每个编解码用";"间隔, 注意大小写, 默认值为 "opus;AMR;G729"
|
||
|
*/
|
||
|
@property (nonatomic, strong) NSString* __nonnull audioEnableCodecs;
|
||
|
/**
|
||
|
* 回声消除模式,默认为 @ref JCCallAecModeSDE ,参见:
|
||
|
* - @ref JCCallAecModeAEC : 声学回声消除
|
||
|
* - @ref JCCallAecModeOS : 使用操作系统提供的声学回声消除功能
|
||
|
* - @ref JCCallAecModeAES : 声学回声抑制
|
||
|
* - @ref JCCallAecModeFDE : 软件自适应声学回声消除,能适应更大延时
|
||
|
* - @ref JCCallAecModeSDE : 软件自适应声学回声消除,追踪延迟精度高
|
||
|
*/
|
||
|
@property (nonatomic) JCCallAecMode audioAecMode;
|
||
|
/**
|
||
|
* 是否开启音频,默认开启
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioArsEnable;
|
||
|
/**
|
||
|
* 音频最小码率,默认值为 20 kb
|
||
|
*/
|
||
|
@property (nonatomic) int audioArsBitrateMin;
|
||
|
/**
|
||
|
* 音频最大码率,默认值为 75 kb
|
||
|
*/
|
||
|
@property (nonatomic) int audioArsBitrateMax;
|
||
|
/**
|
||
|
* 是否打开语音red抗丢包,默认开启
|
||
|
*
|
||
|
* @note 网络不稳定,一般选择打开
|
||
|
*
|
||
|
* - true: 打开,能够增加payload码率
|
||
|
* - false: 关闭,能力节省码率从而降低功耗
|
||
|
*/
|
||
|
@property (nonatomic) bool audioRed;
|
||
|
/**
|
||
|
* 是否开启噪声抑制,默认关闭
|
||
|
*
|
||
|
* @note 一般接收端声音质量好可关闭噪声抑制, 减少声音dsp处理, 降低功耗
|
||
|
*
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioRxAnr;
|
||
|
/**
|
||
|
* 是否开启rtx重传,默认关闭
|
||
|
*
|
||
|
* @note
|
||
|
* - 同FEC、NACK一起用, 能够降低功耗
|
||
|
* - 网络不稳定, 一般选择打开
|
||
|
* <p>
|
||
|
* - true: 打开
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioRtx;
|
||
|
/**
|
||
|
* 是否打开接收端声音自动增益控制,默认关闭
|
||
|
*
|
||
|
* @note 接收端声音过大过小时, 可尝试打开
|
||
|
*
|
||
|
* - true: 打开
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioRxAgc;
|
||
|
/**
|
||
|
* 是否开启回声消除,默认开启
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioQosAec;
|
||
|
/**
|
||
|
* 是否开启发送端噪声抑制,默认开启
|
||
|
*
|
||
|
* @note
|
||
|
* - 接收端声音噪声大,提高抑制等级
|
||
|
* - 接收端声音小,可在不影响声音质量情况下降低抑制等级或者关闭抑制
|
||
|
*
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioQosAnr;
|
||
|
/**
|
||
|
* 是否开启发送端声音自动增益控制,默认开启
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioQosAgc;
|
||
|
/**
|
||
|
* 是否开启静音检测,默认关闭
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool audioQosVad;
|
||
|
/**
|
||
|
* 音频打包时长,默认值为 20
|
||
|
*/
|
||
|
@property (nonatomic) int audioPacketTime;
|
||
|
/**
|
||
|
* 发送端声音自动增益控制强度,默认值为9
|
||
|
*
|
||
|
* 取值范围为[0,90],数值越大,增益强度越大。当 @ref JCCallMediaConfig.audioQosAgc "audioQosAgc" 为 true 时有效
|
||
|
*/
|
||
|
@property (nonatomic) int audioQosAgcGain;
|
||
|
|
||
|
/**
|
||
|
* 视频编解码,协商优先级按顺序排列,默认值为 "H264-SVC;H264;VP8"
|
||
|
*/
|
||
|
@property (nonatomic, strong) NSString* __nonnull videoEnableCodecs;
|
||
|
/**
|
||
|
* 视频接收宽,默认值值为 640
|
||
|
*/
|
||
|
@property (nonatomic) int videoResolutionRecvWidth;
|
||
|
/**
|
||
|
* 视频接收高,默认值为 360
|
||
|
*/
|
||
|
@property (nonatomic) int videoResolutionRecvHeight;
|
||
|
/**
|
||
|
* 视频发送宽,默认值为 640
|
||
|
*/
|
||
|
@property (nonatomic) int videoResolutionSendWidth;
|
||
|
/**
|
||
|
* 视频发送高,默认值为 360
|
||
|
*/
|
||
|
@property (nonatomic) int videoResolutionSendHeight;
|
||
|
/**
|
||
|
* 视频初始码率,默认值为 800 kb
|
||
|
*/
|
||
|
@property (nonatomic) int videoBitrate;
|
||
|
/**
|
||
|
* 发送帧率,默认值为 24
|
||
|
*/
|
||
|
@property (nonatomic) int videoSendFramerate;
|
||
|
/**
|
||
|
* 是否开启视频 ars,默认开启
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool videoArsEnable;
|
||
|
/**
|
||
|
* 视频最小码率,默认值为 50 kb
|
||
|
*/
|
||
|
@property (nonatomic) int videoArsBitrateMin;
|
||
|
/**
|
||
|
* 视频最大码率,默认值为 1500 kb
|
||
|
*/
|
||
|
@property (nonatomic) int videoArsBitrateMax;
|
||
|
/**
|
||
|
* 视频最小帧率,默认值为 1 kb
|
||
|
*/
|
||
|
@property (nonatomic) int videoArsFramerateMin;
|
||
|
/**
|
||
|
* 视频最大帧率,默认值为 30 kb
|
||
|
*/
|
||
|
@property (nonatomic) int videoArsFramerateMax;
|
||
|
/**
|
||
|
* 是否开启rfc 2198 语音fec-red,默认开启
|
||
|
*
|
||
|
* @note 开启后可以增强抗丢包能力,会增加一倍的payload码率,不会增加包头。比如Opus 55kbps增加一倍码率后,最终码率达到90kbps=55+35;Opus 10kbps增加一倍码率后,最终码率达到16kbps=10+6
|
||
|
*
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool videoRedFec;
|
||
|
|
||
|
/**
|
||
|
* 本端视频分辨率是否影响请求分辨率,默认影响
|
||
|
*
|
||
|
* 这里举个例子,有假设条件:
|
||
|
* 1. 本端默认请求是640*360的分辨率
|
||
|
* 2. 本端屏幕分辨率为360*360
|
||
|
* - 若此参数设置成 true:请求分辨率 360*360
|
||
|
* - 若此参数设置成 false: 请求分辨率 640*360
|
||
|
* <p>
|
||
|
* - true: 影响
|
||
|
* - false: 不影响
|
||
|
*/
|
||
|
@property (nonatomic) bool videoRecvFullScreen;
|
||
|
/**
|
||
|
* 是否开启视频数据以 SmallNalu 方式打包,默认开启
|
||
|
*
|
||
|
* 开启后一个包打包的数据多,减少包头的码率,从而降低功耗
|
||
|
*
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
*/
|
||
|
@property (nonatomic) bool videoSmallNalu;
|
||
|
/**
|
||
|
* 是否开启分辨率控制,默认开启
|
||
|
* - true: 开启, 分辨率随网络波动而变化
|
||
|
* - false: 关闭, 固定分辨率
|
||
|
*/
|
||
|
@property (nonatomic) bool videoResolutionControl;
|
||
|
|
||
|
/**
|
||
|
* 视频关键帧间隔(毫秒),@ref JCCallMediaConfigMode "JCCallMediaConfigModeIOT" 模式下默认为 5000
|
||
|
*
|
||
|
* 仅在 @ref JCCallMediaConfigMode "JCCallMediaConfigModeIOT" 模式下生效,其他模式下设置无效
|
||
|
*/
|
||
|
@property (nonatomic) int videoKeyPeriod;
|
||
|
|
||
|
/**
|
||
|
* 心跳间隔,默认心跳间隔为30秒
|
||
|
*
|
||
|
* 取值范围为(0,3600)。比如本端设置了心跳间隔为 X 秒,那么对端在 3*X 秒内都没有收到本端的心跳时,对端将收到 {@link JCCallCallback.onCallItemRemove:reason:description: onCallItemRemove} 通话结束的回调
|
||
|
*/
|
||
|
@property (nonatomic) int heartbeatTime;
|
||
|
|
||
|
/**
|
||
|
* 字符串信息
|
||
|
* @return 返回 JCCall 实例信息
|
||
|
*/
|
||
|
-(NSString* __nonnull)toString;
|
||
|
|
||
|
/**
|
||
|
* 根据模式生成配置参数
|
||
|
*
|
||
|
* 可通过此方法生成 JCCallMediaConfig 对象,然后在调用 {@link JCCall#call:video:callParam: call} 方法前,将 JCCallMediaConfig 对象赋值给 @ref JCCall#mediaConfig "mediaConfig" 属性
|
||
|
*
|
||
|
* @param mode 通话媒体配置模式,参见:
|
||
|
* - @ref JCCallMediaConfigMode360P : 360P
|
||
|
* - @ref JCCallMediaConfigMode720P : 720P
|
||
|
* - @ref JCCallMediaConfigModeIntelligentHardware : 智能硬件场景,比如会和手表通话等
|
||
|
* - @ref JCCallMediaConfigModeIOT : 与asr,展讯等小系统互通
|
||
|
* @return JCCallMediaConfig 通话媒体配置对象
|
||
|
*/
|
||
|
+(JCCallMediaConfig* __nonnull)generateByMode:(JCCallMediaConfigMode)mode;
|
||
|
|
||
|
@end
|
||
|
|
||
|
/**
|
||
|
* 一对一通话类
|
||
|
*
|
||
|
* 该类的所有实例方法在调用时需保证用户的登录状态为已登录
|
||
|
*/
|
||
|
@interface JCCall : NSObject
|
||
|
|
||
|
/**
|
||
|
* 获得通话对象列表
|
||
|
*
|
||
|
* 当 @ref maxCallNum > 1 时,callItems 通话对象列表中可能存在多个音频通话
|
||
|
*/
|
||
|
@property (nonatomic, readonly, strong) NSArray* __nullable callItems;
|
||
|
|
||
|
/**
|
||
|
* 最大通话数,默认值为1
|
||
|
*
|
||
|
* @note 当通话数到达最大通话数后,调用 {@link call:video:callParam: call} 接口呼出会失败,收到来电会自动拒绝
|
||
|
*/
|
||
|
@property (nonatomic) int maxCallNum;
|
||
|
|
||
|
/**
|
||
|
* 当音频接收网络状态为无网络时是否挂断,默认为 false
|
||
|
*
|
||
|
* 即 @ref JCCallItem.audioNetReceiveStatus "audioNetReceiveStatus" 状态为 @ref JCCallNetWorkDisconnected 时是否挂断
|
||
|
*
|
||
|
* - true: 挂断
|
||
|
* - false: 不挂断
|
||
|
*/
|
||
|
@property (nonatomic) bool termWhenNetDisconnected;
|
||
|
|
||
|
/**
|
||
|
* 当前的媒体配置参数
|
||
|
* @note
|
||
|
* 该属性在调用 {@link call:video:callParam: call} 方法之前设置才生效<br>
|
||
|
* JCCallMediaConfig 对象建议通过 {@link JCCallMediaConfig#generateByMode: generateByMode} 方法创建
|
||
|
*/
|
||
|
@property (nonatomic, strong) JCCallMediaConfig* __nonnull mediaConfig;
|
||
|
|
||
|
/**
|
||
|
* 创建 JCCall 对象
|
||
|
*
|
||
|
* JCCall 的所有接口函数,如无特殊说明,都建议在主线程调用
|
||
|
*
|
||
|
* @note
|
||
|
* - 调用此方法创建 JCCall 对象后,期间没有调用过 {@link destroy} 方法销毁对象,然后又重复调用此方法,会直接返回第一次创建的 JCCall 对象
|
||
|
* - 调用此方法前确保 JCClient 已完成初始化,即 @ref JCClient.state "state" 状态值不等于 @ref JCClientStateNotInit
|
||
|
*
|
||
|
* @param client JCClient 对象
|
||
|
* @param mediaDevice JCMediaDevice 对象,通过 {@link JCMediaDevice#create:callback: create} 方法创建
|
||
|
* @param callback JCCallCallback 对象,用于回调相关通知
|
||
|
* @return JCCall 对象
|
||
|
* @exception "JCClient、JCMediaDevice、JCCallCallback 任意一个参数传空就会创建失败"
|
||
|
*/
|
||
|
+(JCCall* __nullable)create:(JCClient* __nonnull)client mediaDevice:(JCMediaDevice* __nonnull)mediaDevice callback:(id<JCCallCallback> __nonnull)callback;
|
||
|
|
||
|
/**
|
||
|
* 销毁 JCCall 对象
|
||
|
*
|
||
|
* 该方法为同步调用,需要等待 JCCall 实例资源释放后才能执行其他操作,调用此方法后,你将无法再使用 JCCall 的其它方法和回调。<br>
|
||
|
* 我们 **不建议** 在 JCSDK 的回调中调用此方法销毁 JCCall 对象,否则会出现崩溃。<br>
|
||
|
* 如需在销毁后再次创建 JCCall 实例,需要等待 @ref destroy 方法执行结束后再创建实例。
|
||
|
*/
|
||
|
+(void)destroy;
|
||
|
|
||
|
/**
|
||
|
* 发起一对一呼叫
|
||
|
*
|
||
|
* 若发起的是音频呼叫,需要保证本地不存视频通话,并且本地通话数未达到最大通话数,最大通话数为:@ref maxCallNum <br>
|
||
|
* 若发起的是视频呼叫,需要保证本地不存在通话 <br>
|
||
|
* 发起呼叫成功后,会收到 {@link JCCallCallback#onCallItemAdd: onCallItemAdd} 通知 <br>
|
||
|
* 以下两种情况会收到 {@link JCCallCallback#onCallItemRemove:reason:description: onCallItemRemove} 通知:
|
||
|
* - 本端发起视频呼叫时,对方已存在通话
|
||
|
* - 本端发起音频呼叫时,对方已存在视频通话
|
||
|
*
|
||
|
* @note 在调用此接口时确保用户的登录状态为已登录
|
||
|
*
|
||
|
* @param userId 对方的用户标识
|
||
|
* @param video 是否视频呼叫
|
||
|
* - true: 视频呼叫
|
||
|
* - false: 音频呼叫
|
||
|
* @param callParam JCCallParam 通话参数对象,此参数可为空。详细定义见: JCCallParam
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)call:(NSString* __nonnull)userId video:(bool)video callParam:(JCCallParam * __nullable)callParam;
|
||
|
|
||
|
/**
|
||
|
* 挂断
|
||
|
*
|
||
|
* 调用接口成功会收到 {@link JCCallCallback#onCallItemRemove:reason:description: onCallItemRemove} 通知
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象
|
||
|
* @param reason @ref JCCallReason "挂断原因"
|
||
|
* @param description 挂断描述
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)term:(JCCallItem* __nonnull)item reason:(JCCallReason)reason description:(NSString* __nullable)description;
|
||
|
|
||
|
/**
|
||
|
* 接听
|
||
|
*
|
||
|
* 调用接口成功会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知<br>
|
||
|
* 另外还有两种情况也会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知:1、若收到的是视频呼叫,而本端选择了音频接听 2、若此路通话不是活跃的,会将此路通话设为活跃通话。<br>
|
||
|
* 调用接口失败会收到 {@link JCCallCallback.onCallItemRemove:reason:description: onCallItemRemove} 通知
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象
|
||
|
* @param video 针对视频呼入可以选择以视频接听还是音频接听
|
||
|
* - true: 视频接听
|
||
|
* - false: 音频接听
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)answer:(JCCallItem* __nonnull)item video:(bool)video;
|
||
|
|
||
|
/**
|
||
|
* 开启/取消音频输入静音
|
||
|
*
|
||
|
* @deprecated 从 v2.7.1 废弃。Juphoon 不建议你使用。如果你想开启/取消音频输入静音,请改用 {@link muteMicrophone:mute: muteMicrophone} 方法
|
||
|
*
|
||
|
* 调用成功会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知
|
||
|
*
|
||
|
* 开启后对端听不到本端的声音,通过 @ref JCCallItem#mute "mute" 来决定开启/取消静音
|
||
|
* - @ref JCCallItem#mute "mute" 为 true,即静音状态时: 取消静音
|
||
|
* - @ref JCCallItem#mute "mute" 为 false,即不是静音状态时: 开启静音
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象,此对象的通话状态必须为通话中
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)mute:(JCCallItem* __nonnull)item;
|
||
|
|
||
|
/**
|
||
|
* 开启/取消音频输入静音
|
||
|
*
|
||
|
* 开启后对端将听不到本端的声音
|
||
|
* - @ref JCCallItem#microphoneMute "microphoneMute" 为 true,即静音状态时: 取消静音
|
||
|
* - @ref JCCallItem#microphoneMute "microphoneMute" 为 false,即不是静音状态时: 开启静音
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且本地缓存的通话列表中要包含此对象,此对象的通话状态必须为通话中
|
||
|
* @param mute 是否静音
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程,会收到 {@link JCCallCallback#onCallItemUpdate:changeParam: onCallItemUpdate} 通知
|
||
|
* - false:调用失败,不会收到通知
|
||
|
*/
|
||
|
-(bool)muteMicrophone:(JCCallItem* __nonnull)item mute:(bool)mute;
|
||
|
|
||
|
/**
|
||
|
* 开启/取消音频输出静音
|
||
|
*
|
||
|
* 开启后本端将听不到远端的声音
|
||
|
* - @ref JCCallItem#speakerMute "speakerMute" 为 true,即静音状态时: 取消静音
|
||
|
* - @ref JCCallItem#speakerMute "speakerMute" 为 false,即不是静音状态时: 开启静音
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且本地缓存的通话列表中要包含此对象,此对象的通话状态必须为通话中
|
||
|
* @param mute 是否静音
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程,会收到 {@link JCCallCallback#onCallItemUpdate:changeParam: onCallItemUpdate} 通知
|
||
|
* - false:调用失败,不会收到通知
|
||
|
*/
|
||
|
-(bool)muteSpeaker:(JCCallItem* __nonnull)item mute:(bool)mute;
|
||
|
|
||
|
/**
|
||
|
* 开启/取消呼叫保持
|
||
|
*
|
||
|
* 调用成功会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知
|
||
|
*
|
||
|
* 开启呼叫保持后,通话将被挂起,通过 @ref JCCallItem#hold "hold" 来决定开启/取消呼叫保持
|
||
|
* - @ref JCCallItem#hold "hold" 为 true,即呼叫保持状态时: 取消呼叫保持
|
||
|
* - @ref JCCallItem#hold "hold" 为 false,即不是呼叫保持状态时: 开启呼叫保持
|
||
|
*
|
||
|
* @note 只针对音频,如果是视频通话则要上层处理视频逻辑
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象,此对象的通话状态必须为通话中
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)hold:(JCCallItem* __nonnull)item;
|
||
|
|
||
|
/**
|
||
|
* 开启/关闭通话录音
|
||
|
*
|
||
|
* 调用成功会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知
|
||
|
*
|
||
|
* 开启通话录音,需要保证没有在录音也没有在录制视频<br>
|
||
|
* 关闭通话录音,需要保证当前通话正在录音
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象
|
||
|
* @param enable 开启/关闭录音
|
||
|
* - true: 开启录音
|
||
|
* - false: 关闭录音
|
||
|
* @param filePath **录音文件的本地保存路径,由用户自行指定,需精确到文件名及格式,例如:/Documents/JuphoonCloud/audio.wmv。请确保目录存在且可写。**
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)audioRecord:(JCCallItem* __nonnull)item enable:(bool)enable filePath:(NSString* __nullable)filePath;
|
||
|
|
||
|
/**
|
||
|
* 开启/关闭视频通话录制
|
||
|
*
|
||
|
* 调用成功会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知
|
||
|
*
|
||
|
* 开启视频录制,需要保证 1、没有在录音 2、若是录制远端视频,要保证没有在录制远端视频,并且远端在上传视频流 3、若是录制本端视频,要保证没有在录制本端视频,并且本端在上传视频流。<br>
|
||
|
* 关闭视频录制,需要保证 1、若是关闭远端视频,要保证正在录制远端视频 2、若是关闭本端视频,要保证正在录制本端视频
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象
|
||
|
* @param enable 是否开启视频通话录制
|
||
|
* - true: 开启
|
||
|
* - false: 关闭
|
||
|
* @param remote 是否录制远端视频源
|
||
|
* - true: 录制远端视频
|
||
|
* - false: 录制本端视频
|
||
|
* @param width 录制视频宽像素
|
||
|
* @param height 录制视频高像素
|
||
|
* @param filePath **录制视频文件的本地保存路径,由用户自行指定,需精确到文件名及格式,例如:/Documents/JuphoonCloud/video.mp4。请确保目录存在且可写。**
|
||
|
* @param bothAudio 是否录制两端音频
|
||
|
* - true: 录制两端音频
|
||
|
* - false: 录制视频端音频。也就是说 remote 为 true 就录制远端音频,remote 为 false 录制本端音频。
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)videoRecord:(JCCallItem* __nonnull)item enable:(bool)enable remote:(bool)remote width:(int)width height:(int)height filePath:(NSString* __nullable)filePath bothAudio:(bool)bothAudio;
|
||
|
|
||
|
/**
|
||
|
* 切换活跃通话
|
||
|
*
|
||
|
* 调用此方法时,入参 JCCallItem 对象不是活跃的,则会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知<br>
|
||
|
* 入参 JCCallItem 对象已是活跃的,则不会收到通知
|
||
|
*
|
||
|
* @param item 需要变为活跃状态的 JCCallItem 对象
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)becomeActive:(JCCallItem* __nonnull)item;
|
||
|
|
||
|
/**
|
||
|
* 开启/关闭视频流发送
|
||
|
*
|
||
|
* 调用成功会收到 {@link JCCallCallback.onCallItemUpdate:changeParam: onCallItemUpdate} 通知
|
||
|
*
|
||
|
* 通过 JCCallItem 对象的 @ref JCCallItem.uploadVideoStreamSelf "uploadVideoStreamSelf" 状态来决定开启还是关闭视频流的发送
|
||
|
* - 若 @ref JCCallItem.uploadVideoStreamSelf "uploadVideoStreamSelf" 为 true,即已在上传视频流: 关闭视频流发送
|
||
|
* - 若 @ref JCCallItem.uploadVideoStreamSelf "uploadVideoStreamSelf" 为 false,即未上传视频流: 开启视频流发送
|
||
|
*
|
||
|
* @note 用于视频通话中
|
||
|
*
|
||
|
* @param item JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)enableUploadVideoStream:(JCCallItem* __nonnull)item;
|
||
|
|
||
|
/**
|
||
|
* 通过通话建立的通道发送数据
|
||
|
*
|
||
|
* @param item 需要发送数据的 JCCallItem 对象,不能为空,并且 @ref callItems 通话列表中要包含此对象
|
||
|
* @param type 文本消息类型,用户可以自定义,例如text,xml等
|
||
|
* @param content 文本内容
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)sendMessage:(JCCallItem * __nonnull)item type:(NSString * __nonnull)type content:(NSString * __nonnull)content;
|
||
|
|
||
|
/**
|
||
|
* 获得当前通话统计信息
|
||
|
*
|
||
|
* 统计信息以Json字符串形式返回,其中包含 "Audio"、"Video"、"Mtp" 三个键值
|
||
|
*
|
||
|
* @return 当前通话统计信息
|
||
|
*/
|
||
|
-(NSString * __nullable)getStatistics;
|
||
|
|
||
|
/**
|
||
|
* 获得当前活跃的通话
|
||
|
*
|
||
|
* 当上层收到 {@link JCCallCallback#onCallItemAdd: onCallItemAdd} 回调后,调用此方法可以获取到当前活跃的通话对象,可以使用该对象进行接听、渲染视频画面等操作。<br>
|
||
|
* 若上层在收到 {@link JCCallCallback#onCallItemAdd: onCallItemAdd} 回调前调用了此方法,将会返回 nil。
|
||
|
*
|
||
|
* @return
|
||
|
* - JCCallItem 对象:当前活跃的通话对象
|
||
|
* - nil:当前没有活跃的通话
|
||
|
*/
|
||
|
-(JCCallItem* __nullable)getActiveCallItem;
|
||
|
|
||
|
/**
|
||
|
* 发送DTMF信息
|
||
|
*
|
||
|
* @param item 需要发送数据的 JCCallItem 对象
|
||
|
* @param value @ref JCCallDtmf "DTMF值"
|
||
|
* @return 是否正常调用
|
||
|
* - true:正常执行调用流程
|
||
|
* - false:调用失败
|
||
|
*/
|
||
|
-(bool)sendDtmf:(JCCallItem *_Nonnull)item value:(JCCallDtmf)value;
|
||
|
|
||
|
@end
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|