JRTCSDK-iOS v2.0
API文档
|
#import <JRTCRoom.h>
构造函数 | |
(int) | - query: |
(bool) | - join:joinParam: |
(bool) | - leave |
(bool) | - enableUploadAudioStream: |
(bool) | - enableUploadVideoStream: |
(bool) | - enableAudioOutput: |
(bool) | - requestVideo:videoSize: |
(bool) | - unRequestVideo: |
(bool) | - requestScreenVideo: |
(bool) | - unRequestScreenVideo |
(bool) | - enableScreenShare:appGroupId:preferredExtension: |
(bool) | - enableCdn:keyInterval: |
(bool) | - enableRemoteRecord:recordParam: |
(bool) | - enableLocalRecord:recordParam: |
(bool) | - updateLocalRecordLayout: |
(JRTCRoomParticipant *__nullable) | - getParticipant: |
(NSString *__nullable) | - getStatistics |
(NSString *__nullable) | - getJsonStats |
(bool) | - setCustomProperty:forKey: |
(NSString *__nullable) | - getCustomProperty: |
(bool) | - sendMessage:content:toUserId: |
(int) | - inviteSipUser: |
(bool) | - setRatio: |
(bool) | - sendAudioEmptyPack: |
(bool) | - sendVideoEmptyPack: |
(bool) | - setVideoDot:info: |
类方法 | |
(JRTCRoom *__nullable) | + create:mediaDevice:callback: |
(void) | + destroy |
属性 | |
NSString * | roomId |
unsigned int | roomHandle |
NSString * | password |
RoomState | state |
NSArray * | participants |
bool | uploadLocalAudio |
bool | uploadLocalVideo |
bool | audioOutput |
NSString * | shareStreamId |
NSString * | shareUserId |
bool | localRecording |
NSString * | title |
RecordState | remoteRecordState |
CDNState | cdnState |
bool | canBindCamera |
bool | notifyVolumeChange |
![]() | |
NSString * | callId |
NSString * | bizId |
业务流水号 | |
多方通话类
+ (JRTCRoom *__nullable) create: | (JRTCClient *__nonnull) | client | |
mediaDevice: | (JRTCMediaDevice *__nonnull) | mediaDevice | |
callback: | (id< JRTCRoomCallback > __nonnull) | callback | |
创建 JRTCRoom 对象
JRTCRoom 的所有接口函数,如无特殊说明,都建议在主线程调用
state
方法获取的状态值不等于 JRTCClientStateNotInitclient | JRTCClient 对象 |
mediaDevice | JRTCMediaDevice 对象 |
callback | JRTCRoomCallback 代理对象,用于实现 JRTCRoomCallback 事件 |
JRTCClient、JRTCMediaDevice、JRTCRoomCallback 任意一个参数传空就会出现调用失败 |
+ (void) destroy |
- (bool) enableAudioOutput: | (bool) | enable |
开启/关闭音频输出
join
加入房间前设置 enable | 是否开启音频输出 |
onRoomPropertyChanged
回调- (bool) enableCdn: | (bool) | enable | |
keyInterval: | (int) | keyInterval | |
开启/关闭Cdn推流
enable | 开启/关闭Cdn推流
|
keyInterval | 推流关键帧间隔(毫秒),当参数 enable 为 true 时有效,有效值需要>=1000 |
onRoomPropertyChanged
通知- (bool) enableLocalRecord: | (bool) | enable | |
recordParam: | (JRTCRecordLocalParam *__nullable) | recordParam | |
开启/关闭本地录制
enable | 开启或关闭本地录制
|
recordParam | 本地录制参数配置,当 enable == true 时,JRTCRecordLocalParam.filePath 必须设置,其余参数不设置则使用默认配置;当 enable == false 时,recordParam 可传 nil |
- (bool) enableRemoteRecord: | (bool) | enable | |
recordParam: | (JRTCRecordRemoteParam *__nullable) | recordParam | |
开启/关闭远程录制
可通过 recordState
属性获取当前服务器录制状态。
enable | 开启或关闭远程录制
|
recordParam | 录制参数,详见 JRTCRecordRemoteParam。当 enable == false 时,可传 nil;当 enable == true 且按照默认配置进行录制可传 nil |
onRoomPropertyChanged
回调获得,具体可关注 recordState
- (bool) enableScreenShare: | (bool) | enable | |
appGroupId: | (NSString *__nullable) | appGroupId | |
preferredExtension: | (NSString *__nullable) | preferredExtension | |
开启/关闭屏幕共享
room: onRoomPropertyChanged
回调。 enable | 开启或关闭屏幕共享
|
appGroupId | 屏幕采集插件和应用所处于的同一个 groupId,如果是关闭屏幕共享可以传空,iOS 12.0 及以上(不包含 iOS 13.0 )需要传,iOS 12.0 以下传空 |
preferredExtension | 要打开的屏幕共享插件的 ID,如果是关闭屏幕共享可以传空,iOS 12.0 及以上(不包含 iOS 13.0 )需要传,iOS 12.0 以下传空 |
- (bool) enableUploadAudioStream: | (bool) | enable |
开启/关闭发送本地音频流
join
加入房间前设置onParticipantUpdate
回调enable | 开启/关闭发送本地音频流
|
onRoomPropertyChanged
回调- (bool) enableUploadVideoStream: | (bool) | enable |
开启/关闭发送本地视频流
join
加入房间前设置onParticipantUpdate
回调enable | 是否发送本地视频流
|
onRoomPropertyChanged
回调- (NSString *__nullable) getCustomProperty: | (NSString *__nonnull) | key |
获取自定义房间属性
调用此接口来获取自定义房间属性
key | 自定义属性 key |
- (NSString *__nullable) getJsonStats |
获取天赛实时统计信息
以Json字符串形式返回,包含以下信息:
{ "localActor": "[username:2333@100645.cloud.justalk.com]", // actorID "sendBWE": "1440", // 发送带宽估计 "recvBWE": "929", // 接收带宽估计 "sendBr": "16", // 发送码率 "recvBr": "772", // 接收码率 "sendJitter": "1", // 发送jitter "recvJitter": "0", // 接收jitter "sendLossRate": "0", // 发送丢包率 "recvLossRate": "0", // 接收丢包率 "encodeTime": "0", // 编码时长 "rtt":"5", // 往返延时 "audioSendBr": "19", // 音频发送码率 "videoSendBr": "0", // 视频发送码率 "audioLevel": "58", // 音量 "event":"" }
- (JRTCRoomParticipant *__nullable) getParticipant: | (NSString *__nonnull) | userId |
- (NSString *__nullable) getStatistics |
获取统计信息
以字符串形式返回,其中包含 "Config", "Network","Transport" 和 "Participants" 4个节点,统计信息具体内容如下:
{ "Config": // 音视频设置信息 { "Audio Config: // 音频设置
{
"SRTP": off, // 是否对音频RTP数据加密,以及加密会显示使用的加密协议,加密协议两端一致才会音频互通正常
"Codec": opus, // 本端设置的音频编码
"Payload": 116, // 音频payload的大小
"Bitrate": 16000, // 音频码率
"Pkt Len": 60, // 音频包长
"Nack": off, // 丢包是否允许数据包重传
"RTX": off, // 是否允许RTX技术
"FEC/RED": off, // 是否开启FEC
"AEC": on, // 是否开启回声消除
"Mode": OS, // AEC模式
"HowlSupp": Auto, // AEC HowlSupp模式
"Sts": Auto, // AEC Sts模式
"AGC": on, // 是否开启发送端自动增益
"Mode": Fixed, // 发送端AGC Mode
"Target": 3, // 发送端AGC Target
"Gain": 9, // 接收端AGC Gain
"Rx AGC": off, // 是否开启接收端自动增益
"Mode": Fixed, // 接收端AGC Mode
"Target": 3, // 接收端AGC Target
"Gain": 9, // 接收端AGC Gain
"VAD": off, // 是否开启VAD
"Mode": Mid, // VAD Mode
"ANR": off, // 是否开启发送端噪音抑制
"Mode": High, // ANR mode
"Noise": N/A, // 噪音音量
"SNR": N/A, // 信噪比
"Rx ANR": off, // 是否开启接收端噪音抑制
"Mode": Low, // 接收端ANR mode
"ARS": off, // 是否开启音频码率控制
"BR Min": N/A, // ARS码率最小值
"BR Max": N/A // ARS码率最大值
},
"Video Config": // 视频设置
{
"SRTP": off, // 是否对音频RTP数据加密,以及加密会显示使用的加密协议,加密协议两端一致才会音频互通正常
"Codec": H264-SVC, // 双方通话采用的编解码类型
"Payload": 125, // 视频Payload的大小
"Bitrate": 2250, // 视频码率,单位kbps
"Framerate": 24, // 视频帧率,单位fps
"Resolution": 1280x720, // 视频分辨率
"FEC": on|124|123, // FEC是否打开和payload的类型号
"FIR": off, // 是否允许重发关键帧
"Key Interval": 0, // 允许的最小关键帧间隔
"Repeat": 0, // 关键帧丢失是否允许重发
"NACK": off, // 丢包是否允许数据包重传
"RTX": off, // 是否允许RTX技术,RTX的payload类型
"TMMBR": off, // 是否允许带宽估计
"RPSI": off, // 是否允许RPSI技术
"Small NALU": on, // 是否允许NALU技术
"ARS": off, // 是否开启ARS自动码率检测
"BR Min": 10, // ARS发送码率下限
"BR Max": 2000, // ARS发送码率上限
"FR Min": 1, // ARS发送帧速率下限
"FR Max": 30, // ARS发送帧速率上限
"Res. Ctrl": off, // 是否允许分辨率控制
"Res. Mode": 0, // 分辨率Mode
"Fr Ctrl": on, // 是否允许帧速率控制
"CPU Load Ctrl": off, // 是否允许CPU控制
"Target": 80, // CPU控制的最大使用率
"Bw Efficient": off, // 是否采用节省带宽模式
"Error Conceal": off, // 是否允许错误隐藏技术,在解码出错的时候采用
"Enhance color": off, // 是否采用颜色增强技术
"Boost bright": off, // 是否采用亮度增强技术
"Boost contrast": off, // 是否采用对比度增强技术
"RTP Ext": CVO, // 使用的RTP扩展的类型
"Render Name": N/A, // 渲染图像的名字
"SVC": "320 180 250 640 360 600 1280 720 1400", // 会议SVC配置
"TemporalLayers": 4, // 取值1、2、3、4,会议时间层设置
"PreferMode":Clear // 偏好设置
}
},
"Network": // 网络统计信息
{
"Send Statistic: // 数据发送统计信息 { "Packets": 181|1305|0|0, // 发送的数据包的个数。正常包个数 | 探测包个数 | RED包个数 | NACK包个数 "RTT": 4, // 网络双向延时的时间,单位为毫秒 "Jitter": 2, // 网络的扰动,表征数据包抖动的时间,单位毫秒 "Lost": 2, // 丢失的数据包的个数 "LostRate": 0, // 当前的丢包率,单位百分比 "RelayLost": 0, // 服务器转发丢包率 "RelayRtt": 0, // 服务器转发往返时延,单位为毫秒 "BitRate/BWE": 16/1345, // BitRate表示当前发送的数据包的码率,单位kbps;BWE表示当前发送带宽的估计值 "AudioSend": 0|0, // 实际发送音频包次数|估计发送音频包次数 "VideoSend": 0|0, // 实际发送视频包次数|估计发送视频包次数 "ScreenSend": 0|0, // 实际发送屏幕共享包次数|估计发送屏幕共享包次数 "MaxPredKbps": 100, // 发送最大需求码率 "Server(102679111220103708)": // 选用的第一个服务器 [ 2211(1): BWE(1345|697) LOSS(0|0) OUT(A:37) IN(A:0;) ] }, "Recv Statistic": // 数据接收统计信息 { "Packets": 1423|675|0|0, // 收到的数据包的个数。正常包个数 | 探测包个数 | RED包个数 | NACK包个数 "Jitter": 1, // 网络的扰动,表征数据包乱序的时间,单位毫秒 "Lost": 0, // 丢失的数据包的个数 "Lost Ratio": 0, // 当前的丢包率,单位百分比 "BitRate/BWE":178/2291, // BitRate表示当前接收的数据包的码率,单位kbps;BWE表示当前接收带宽的估计值 "Server(102679111220103708)": // 选用的第一个服务器 [ 2211(3): BWE(1979|2150) LOSS(0|0) OUT(A:37;FPS:24,FEC:10,SUB:00f0=3456) IN(A:17;V:2273=2211[00f0]2273) ] }, } "Transport": // 运输通道 { "Local": 2.1923737535:32414, // 本地地址 "Remote": 2:11023, // 远端地址 "LastPaths": 2,2, // 最后使用通道 "Path": 2 [udp], // 通道名 "Step1": Delay/Loss(S/R): 4/0/0, // 通道质量 "Cost": 7** (best: -1) // 通道分数
}, "Participants": { "2333": // 成员为自己 { "Audio Sending Stats": // 音频发送数据统计 { "Packets": 143, // 发送的数据包的个数 "BitRate": 18.5, // 发送的数据包的码率,单位kbps "FecPrecent": 0 // 音频Fec保护百分比,N/A表示未开启FEC保护 }, "Video Sending Stats": // 视频发送数据统计 { "Packets": 19502, // 发送的数据包的个数 "Capture Res": 640x360, // 视频采集分辨率 "Capture Fr": 30, // 视频采集帧率 "FPS/IDR": [0|0|24|0]/3, // 当前视频发送帧速/已发送的视频关键帧数 "Resolution": 1280x720[0|0|0], // 当前发送图像最大尺寸。[]中为每种尺寸的帧率,取值范围为0到f(十六进制),0表示该层视频未被发送, 值越大表示该层视频帧率越高; "Bitrate/Setrate": 0/2250, // Bitrate表示当前发送的数据包的码率,单位kbps; Setrate表示视频编码的目标码率,单位kbps。 "QP": 20, // 发送当前图像的量化步长(0-51),越小图像画质越好。 "EncodeTime": 10, // 当前编码时间,可以体现终端编码时占用的CPU性能,越大表示CPU占有越高,单位毫秒 "Codec": H264-SVC, // 采用的编解码类型 "FecPrecent": 20 // 视频Fec保护百分比,N/A表示未开启FEC保护 }, "Be Subscribed Stats": // 被订阅统计信息 { "Audio": true, // 音频是否被订阅 "Video": [0|0|F|0] // [S0|S1|S2|S3]表示4个空间层被订阅 }, "Publish Stats": // 当前音视频发布状态 { "Audio": true, // 当前音频发布状态 "Video": true // 当前视频发布状态 } }, "6666": // 成员不是自己 { "Audio Receiving Stats": // 音频接收统计信息 { "Packets": 40243, // 接收的数据包的个数 "BitRate": 18.5, // 当前接收的数据包的码率,单位kbps。 "EpdRate/lr/dc": 0/0/0, // expand rate/loss rate/discard rate。neteq buffer中的扩展比例/丢包比例/丢弃比例 }, "Video Receiving Stats": // 视频接收统计信息 { "Packets": 19502, // 接收的数据包的个数 "BitRate": 161, // 当前发送的数据包的码率,单位kbps "FPS/FIR": 24/0, // 当前视频接收帧率/视频关键帧请求个数 "Resolution": 1280x720, // 当前接收分辨率 "Render FR": 24, // 当前渲染帧速率 "Codec": H264-SVC, // 采用的编解码类型 "PvMos": 4.9, // 表示过去5s平均流畅度MOS分,每5s更新一次。体现视频画面的流畅程度。1到5分,1分最差,5分最好 "SMOS": 5, // 表示当前清晰度MOS分。体现视频画面的清晰程度。1到5分,1分最差,5分最好。前5s是0,是正常现象,因为PvMos还没有值 }, "Subscribed Stats": // 订阅统计信息 { "Channel Audio": true, // 当前是否发布音频 "Audio": true, // 当前音频订阅状态 "Video": [0|0|F|0] // [S0|S1|S2|S3]表示4个空间层被订阅 } } } }
- (int) inviteSipUser: | (JRTCSipInviteParam *__nonnull) | sipParam |
邀请Sip用户,一般用于对接落地网关等
sipParam | 邀请sip用户入会的配置参数,详见 JRTCSipInviteParam |
onInviteSipUserResult
通知- (bool) join: | (NSString *__nonnull) | roomId | |
joinParam: | (JRTCRoomJoinParam *__nullable) | joinParam | |
加入房间
该方法让用户加入通话房间,在同一个房间内的用户可以互相通话。
如果用户已在房间中,必须退出当前房间,即处于空闲状态,才能进入其他房间,否则将直接返回 false,且不会收到回调通知。
roomId | 房间号
|
joinParam | JRTCRoomJoinParam 对象,传 nil 则使用默认配置 |
onJoin
回调- (bool) leave |
离开房间
onLeave
回调- (int) query: | (NSString *__nonnull) | roomId |
- (bool) requestScreenVideo: | (JRTCVideoSize *__nonnull) | videoSize |
订阅屏幕共享的视频流
videoSize | 视频请求的尺寸 |
- (bool) requestVideo: | (JRTCRoomParticipant *__nonnull) | participant | |
videoSize: | (JRTCVideoSize *__nonnull) | videoSize | |
订阅房间中其他用户的视频流
participant | JRTCRoomParticipant 成员对象 |
videoSize | 视频请求的尺寸,详见 JRTCVideoSize |
onParticipantUpdate
回调- (bool) sendAudioEmptyPack: | (bool) | b |
发送音频空包
该接口不会导致成员的 audio
属性变化,发送音频空包不代表停止发送音频流。
b | 音频发送包是否为空包
|
- (bool) sendMessage: | (NSString *__nonnull) | type | |
content: | (NSString *__nonnull) | content | |
toUserId: | (NSString *__nullable) | toUserId | |
发送房间消息,消息内容不能大于4K
消息接收方都会收到 onMessageReceived
回调
type | 消息类型 |
content | 消息内容 |
toUserId | 指定成员的用户ID,传 nil 即给通话中全部成员发送消息 |
- (bool) sendVideoEmptyPack: | (bool) | b |
发送视频空包
该接口不会导致成员的 video
属性变化,发送视频空包不代表停止发送视频流。
b | 视频发送包是否为空包
|
- (bool) setCustomProperty: | (NSString *__nonnull) | value | |
forKey: | (NSString *__nonnull) | key | |
设置房间中的自定义属性
value | 自定义属性的value值 |
key | 自定义属性的key值 |
- (bool) setRatio: | (float) | ratio |
设置本端视频宽高比
将自己的视频采集根据宽高比裁剪后进行发送,通话中其他成员收到的画面将是裁剪后的比例。
该方法不影响其他成员的画面在本端的显示比例,也不影响其他成员相互之间的画面显示比例。
必须 加入房间后 设置才能生效,即收到 onJoin
回调后设置才生效。
ratio | 视频宽高比 |
- (bool) setVideoDot: | (NSString *__nonnull) | timeSpan | |
info: | (NSString *__nonnull) | info | |
视频打点
timespan | 时间戳 |
info | 打点信息 |
- (bool) unRequestScreenVideo |
取消订阅屏幕共享的视频流
- (bool) unRequestVideo: | (JRTCRoomParticipant *__nonnull) | participant |
取消订阅房间中其他用户的视频流
participant | JRTCRoomParticipant 房间中其他成员对象 |
onParticipantUpdate
回调- (bool) updateLocalRecordLayout: | (NSArray< JRTCRecordLocalLayout * > *__nonnull) | layoutList |
更新本地录制自定义布局
layoutList | 需要更新的布局列表 |
|
readnonatomicassign |
是否音频输出
本地没有音频输出的话,就听不到房间内其他成员的声音了
|
readwritenonatomicassign |
是否可以绑定摄像头发送流
|
readnonatomicassign |
获取CDN推流状态,参见:
|
readnonatomicassign |
是否正在本地录制
|
readwritenonatomicassign |
设置是否上报音量变化,音量变化会比较频繁,默认为 true,不需要则设置为 false
|
readnonatomicstrong |
获得房间中的所有成员
|
readnonatomiccopy |
房间密码
|
readnonatomicassign |
获取远程视频录制状态,参见:
|
readnonatomicassign |
本地房间句柄
|
readnonatomiccopy |
|
readnonatomiccopy |
屏幕共享时的视频流ID,无屏幕共享时为 nil
调用 startVideo
接口渲染通话中其他成员的屏幕共享画面时使用。
|
readnonatomiccopy |
发起屏幕共享者的用户ID,无屏幕共享时为 nil
可用来判断当前通话中是否有成员发起屏幕共享。
|
readnonatomicassign |
|
readnonatomiccopy |
房间标题
|
readnonatomicassign |
是否上传本地音频数据
|
readnonatomicassign |
是否上传本地视频数据