maple-rtc 音视频SDK集成文档 - iOS

简介:

maple-rtc 为蓝蘑云推出的实时音视频会议系统,包括了实时音频,视频,变声,美颜等功能,适用于娱乐,游戏,教育等实时音视频场景中;


一:下载SDK

1.1 iOS音视频SDK

maple-rtc iOS sdk 目录结构如下:

1.2 iOS音视频demo源码下载

演示的iOS 音视频maple-rtc-iOS-1v1-sample源码;


二:基本API说明

iOS SDK 主要基于object-c 语言调用,包括以下类:

BMediaKit 包含所有由应用程序调用的主要方法
BMediaDelegate 采用 delegate 方法用于向应用程序发送回调通知

接口调用流程图

音频调用接口流程图:

视频调用接口流程图:

BMediaKit 接口类

注:调用 BMediaKit 的接口最好在同一个线程进行,不建议在不同的线程同时调用。

初始化BMediaKit实例(sharedEngineWithAppId)

+ (instancetype)sharedEngineWithAppId:(NSString * _Nonnull)appId
                         delegate:(id<BMediaDelegate> _Nullable)delegate;

该方法初始化 BMediaKit 为一个单例

注意事项:

输入参数:

appId:

delegate:

返回值:

示例代码
self.mBMediaKit = [BMediaKit sharedEngineWithAppId:"6638******fdd2" delegate:self];

设置参数(setParameter)

- (void) setParameter:(NSString * _Nonnull)key withValue:(NSString * _Nonnull)value;

该方法用于设置SDK特殊的参数;

输入参数:

key:

value:

返回值:

示例代码

[self.mBMediaKit setParameter:@"abc" withValue:@"abc"];

设置频道模式(setChannelProfile)

- (int) setChannelProfile:(NSInteger)profile;

该方法用于设置频道模式(profile).

注意事项:

输入参数:

profile:

返回值:

示例代码
int ret = [self.mBMediaKit setChannelProfile:CHANNEL_PROFILE_VOICE_VIDEO];

设置视频会议属性(setVideoConferenceProfile)

- (int) setVideoConferenceProfile:(NSInteger)profile;

该方法用于设置视频会议属性(profile).

注意事项:

输入参数:

profile:

返回值:

示例代码

int ret = [self.mBMediaKit setVideoConferenceProfile:VIDEO_CONFERENCE_PROFILE_MCU];

设置媒体属性(setMediaProfile)

- (int) setMediaProfile:(NSInteger)audioProfile withVideo:(NSInteger)videoProfile;

该方法用于设置媒体模式.

注意事项:

params

audioProfile:

videoProfile:

返回值:

示例代码

int ret = [self.mBMediaKit setMediaProfile:AUDIO_PROFILE_VOICE_STANDARD withVideo: VIDEO_PROFILE_480P];

设置加入频道用户Id(setJoinChannelUserId)

- (int) setJoinChannelUserId:(NSString * _Nonnull)uid;

该方法用于设置加入频道用户Id.

注意事项:

输入参数:

uid:

返回值

示例代码
int ret = [self.mBMediaKit setJoinChannelUserId:@"123"];

查询SDK版本号(getSdkVersion)

+ (NSUInteger)getSdkVersion;

该方法返回SDK版本号。

输入参数:

返回值

示例代码
NSUInteger version = [BMediaKit getSdkVersion];

加入频道(joinChannel)

- (int)joinChannel:(NSString * _Nonnull)channelId;

该方法允许用户加入频道。如果频道尚未建立,调用该方法可以自动创建频道。 同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。使用不同 App ID 的应用程序是不能互通的。如果已在通话中,用户必须调用 leaveChannel 退出当前通话,才能进入下一个频道。

注意事项:

输入参数:

channelId:

返回值

示例代码
int ret = [self.mBMediaKit joinChannel:@"123"];

带uid加入频道(joinChannel)

- (int)joinChannel:(NSString * _Nonnull)channelId
                uid:(NSString * _Nonnull)uid;

该方法允许用户加入频道。如果频道尚未建立,调用该方法可以自动创建频道。 同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。使用不同 App ID 的应用程序是不能互通的。如果已在通话中,用户必须调用 leaveChannel 退出当前通话,才能进入下一个频道。

注意事项:

输入参数:

channelId:

uid:

返回值

示例代码
int ret = [self.mBMediaKit joinChannel:@"123" uid:@"nick"];

离开频道(leaveChannel)

- (int)leaveChannel;

该方法为用户离开频道,即挂断或退出通话。通过调用 joinChannel 加入频道后,必须调用 leaveChannel 以结束通话,否则不能进行下一次通话。 不管当前是否在通话中,都可以调用 leaveChannel,没有副作用。leaveChannel 会把会话相关的所有资源释放掉。

输入参数:

返回值

示例代码
int ret = [self.mBMediaKit leaveChannel];

开启本地音频的采集和上行(startLocalAudio)

- (int) startLocalAudio;

开启本地音频的采集和上行。调用该方法后,打开录音设备,在同一频道内的其他用户听到你的声音;

params

返回值

示例代码

int ret = [self.mBMediaKit startLocalAudio];

关闭本地音频的采集和上行(stopLocalAudio)

- (int) stopLocalAudio;

开启本地音频的采集和上行。调用该方法后,关闭录音设备,在同一频道内的其他用户将无法听到你的声音,;

params

返回值

示例代码

    int ret = [self.mBMediaKit stopLocalAudio];

将自己禁音(muteLocalAudioStream)

- (int)muteLocalAudioStream:(BOOL)muted;

静音/取消静音。调用该方法后,在同一频道内的其他用户将无法听到你的声音;

输入参数:

muted:

返回值

示例代码
int ret = [self.mBMediaKit muteLocalAudioStream:YES];

静音指定用户音频(muteRemoteAudioStream)

- (int)muteRemoteAudioStream:(NSString * _Nonnull)uid mute:(BOOL)muted;

该方法用于允许/禁止播放远端指定用户的音频流。没有被禁止用户的音频流接受和播放正常;

输入参数:

uid:

muted:

返回值

示例代码
[self.mBMediaKit muteRemoteAudioStream:@"nick" mute:YES];

打开外放扬声器模式(setEnableSpeakerphone)

- (int)setEnableSpeakerphone:(BOOL)enableSpeaker;

该方法用于打开/关闭外放扬声器模式,即听筒和扬声器播放的切换;

输入参数:

enableSpeaker:

返回值

示例代码
int ret = [self.mBMediaKit setEnableSpeakerphone:YES]

调节播放信号音量(adjustPlaybackSignalVolume)

- (int)adjustPlaybackSignalVolume:(NSUInteger)volume;

该方法用于调节播放信号音量;软件调节播放信号音量,默认值为100(原始音量),最大调整为200(即原始音量的2倍),如果为小于等于0,即软件级静音,无法听到任何远端音频流;

输入参数:

volume:

返回值

示例代码
int ret = [self.mBMediaKit adjustPlaybackSignalVolume:50]

调节录音信号音量(adjustRecordingSignalVolume)

- (int)adjustRecordingSignalVolume:(NSUInteger)volume;

该方法用于调节录音信号音量;软件调节录音信号音量,默认值为100(原始音量),最大调整为400(即原始音量的4倍);如果为小于等于0,即软件级静音,对方将听不到你说话声音;

输入参数:

volume:

返回值

示例代码
int ret = [self.mBMediaKit adjustRecordingSignalVolume:50];

启用用户说话音量提示(enableAudioVolumeIndication)

- (int)enableAudioVolumeIndication:(NSInteger)interval;

该方法允许 SDK 定期向应用程序反馈当房间里所有用户说话的音量。

注意事项:

输入参数:

interval:

返回值

示例代码
int ret = [self.mBMediaKit enableAudioVolumeIndication:500]

设置本地视频显示属性(setupLocalVideo)

- (int)setupLocalVideo:(BMVideoCanvas* _Nullable)local;

该方法设置本地视频显示信息。应用程序通过调用此接口绑定本地视频流的显示视窗(view),并设置视频显示模式。

注意事项:

输入参数:

local:

Class BMVideoCanvas 描述 * view: 视频显示视窗, * renderMode: 视频显示模式, RENDERMODEHIDDEN (1): 如果视频尺寸与显示视窗尺寸不一致,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。RENDERMODEFIT(2): 如果视频尺寸与显示视窗尺寸不一致,在保持视频长宽比的前提下,将视频进行缩放后填满视窗。 * uid: 本地用户 ID,与 joinChannel 方法中的 uid 保持一致

返回值

示例代码
int ret = [self.mBMediaKit setupLocalVideo:[[BMVideoCanvas alloc] init:self.localVideo withMode:RENDER_MODE_HIDDEN withUid:@"nick"]];

设置远端视频显示属性(setupRemoteVideo)

- (int)setupRemoteVideo:(BMVideoCanvas* _Nullable)remote;

该方法绑定远程用户和显示视图,即设定 uid 指定的用户用哪个视图显示。调用该接口时需要指定远程视频的 uid;

注意事项:

输入参数:

remote:

Class BMVideoCanvas 描述 * view: 视频显示视窗, * renderMode: 视频显示模式, RENDERMODEHIDDEN (1): 如果视频尺寸与显示视窗尺寸不一致,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。RENDERMODEFIT(2): 如果视频尺寸与显示视窗尺寸不一致,在保持视频长宽比的前提下,将视频进行缩放后填满视窗。 * uid: 远端用户 ID,在 onUserJoinedNotice 事件中获取;

返回值

示例代码
int ret = [self.mBMediaKit setupRemoteVideo:[[BMVideoCanvas alloc] init:self.remoteVideo withMode:RENDER_MODE_HIDDEN withUid:@"nick"]];

开启视频预览(startPreview)

- (int)startPreview;

该方法用于启动本地视频预览。

注意事项:

输入参数:

返回值

示例代码
int ret = [self.mBMediaKit startPreview];

停止视频预览(stopPreview)

- (int)stopPreview;

该方法用于停止本地视频预览。

注意事项:

输入参数:

返回值

示例代码
int ret = [self.mBMediaKit stopPreview];

切换前置/后置摄像头 (switchCamera)

- (int)switchCamera;

该方法用于在前置/后置摄像头间切换。

注意事项:

输入参数:

返回值

示例代码
int ret = [self.mBMediaKit switchCamera];

设置是否打开闪光灯(enableCameraTorchOn)

- (int)enableCameraTorchOn:(BOOL)enabled;

该方法用于开关摄像头闪光灯。

注意事项:

输入参数:

enabled:

返回值

示例代码
int ret = [self.mBMediaKit enableCameraTorchOn:YES];;

暂停/恢复发送本地视频流(muteLocalVideoStream)

- (int)muteLocalVideoStream:(BOOL)muted;

该方法用于允许/禁止往网络发送本地视频流;

注意事项:

输入参数:

muted:

返回值:

示例代码

int ret = [self.mBMediaKit muteLocalVideoStream:YES];

暂停/恢复指定远端视频流(muteRemoteVideoStream)

- (int)muteRemoteVideoStream:(NSString * _Nonnull)uid mute:(BOOL)muted;

该方法用于允许/禁止播放指定远端视频流;

注意事项:

输入参数:

uid:

muted:

返回值:

示例代码

int ret = [self.mBMediaKit muteRemoteVideoStream:uid mute:NO];

暂停/恢复指定远端视频流(muteRemoteVideoStream2)

- (int)muteRemoteVideoStream2:(NSString * _Nonnull)uid mute:(BOOL)muted;

该方法用于允许/禁止播放指定远端视频流;

注意事项:

输入参数:

uid:

muted:

返回值:

示例代码

int ret = [self.mBMediaKit muteRemoteVideoStream2:uid mute:NO];

开关视频美颜功能(enableBeautify)

- (void)enableBeautify:(BOOL)enabled;

该方法用于打开/关闭视频美颜功能;

注意事项:

params

enabled:

返回值:

示例代码

int ret = [self.mBMediaKit enableBeautify:YES];

设置美颜等级(setBeautifyLevel)

- (int)setBeautifyLevel:(float)value;

该方法用于设置美颜等级功能;

注意事项:

params

value:

返回值:

示例代码

int ret = [self.mBMediaKit setBeautifyLevel:0.5];

BMediaDelegate 回调接口类

注意:

SDK 会通过代理方法 BMediaDelegate 向应用程序上报一些运行时事件。 必须在加入频道前调用 (instancetype)sharedEngineWithAppId:(NSString * _Nonnull)appId delegate:(id _Nullable)delegate;方法时传入delegate来使能回调产生。

加入频道成功回调 (onJoinChannelSuccess)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onJoinChannelSuccess:(NSString* _Nonnull)channelId withUid:(NSString* _Nonnull)uid;

表示客户端登入服务器成功,且创建和分配了频道 ID 和用户 ID。频道 ID 的分配是根据 joinChanel API 中指定的频道名称。如果调用 joinChannel 时并未指定用户 ID,服务器就会随机分配一个。

回调参数

channelId:

uid:

加入频道失败回调 (onJoinChannelFailed)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onJoinChannelFailed:(MapleRtcJoinChannelFailedReason)reason;

表示客户端登入服务器失败。

回调参数

reason:

离开频道回调 (onLeaveChannel)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onLeaveChannel:(MapleRtcLeaveChannelReason)reason;

用程序调用 leaveChannel() 方法时,SDK提示应用程序离开频道成功或者失败。参数reason表示具体原因状态码。

回调参数

reason:

强行踢出频道回调 (onForceKickOutChannel)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onForceKickOutChannel:(MapleRtcKickedOutReason)reason;

由于某种原因,自己强行被系统踢下线。参数reason表示具体原因状态码。

回调参数

reason:

用户加入当前频道回调 (onUserJoinedNotice)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onUserJoinedNotice:(NSArray * _Nonnull)uids;

提示有用户加入了频道。如果该客户端加入频道时已经有人在频道中,SDK也会向应用程序上报这些已在频道中的全部用户。

回调参数

uids:

用户离开当前频道回调 (onUserOfflineNotice)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onUserOfflineNotice:(NSArray * _Nonnull)uids;

提示有用户离开了频道(或掉线)。

回调参数

uids:

发生警告回调 (onWarning)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onWarning:(MapleRtcWarningCode)warningCode;

该回调方法表示 SDK 运行时出现了(网络或媒体相关的)警告。 通常情况下,SDK上报的警告信息应用程序可以忽略,SDK 会自动恢复。

回调参数

reason:

发生错误回调 (onError)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onError:(MapleRtcErrorCode)errorCode;

表示 SDK 运行时出现了(网络或媒体相关的)错误。 通常情况下,SDK 上报的错误意味着 SDK 无法自动恢复,需要 APP 干预或提示用户。

回调参数

reason:

启用用户说话音量提示回调 (onAudioVolumeIndication)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onAudioVolumeIndication:(NSInteger)volume;

该方法允许 SDK 定期向应用程序反馈当前房间里谁在输入声音的音量。该提示默认为关闭状态,如有需要,调用 enableAudioVolumeIndication 方法触发该提示。

回调参数

volume:

volumeInfo * 类型:NSDictionary * 默认值:无 * 描述:说话者音量信息(0~255);

连接丢失回调 (onConnectionLost)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onConnectionLost:(MapleRtcWarningCode)warningCode;

连接丢失监听事件;sdk 和服务器失去了网络连接,并且尝试自动重连一段事件(15s左右)后仍未连上。回调该事件后,sdk将不会再次自动重连,需要用户手动调用leaveChannel,后再次尝试加入频道;

回调参数

远端第一帧视频解码成功提示回调 (onFirstRemoteVideoFrameSizeChanged)

- (void)rtcEngine:(BMediaKit * _Nonnull)engine onFirstRemoteVideoFrameSizeChanged:(NSString* _Nonnull)uid size:(CGSize)size;

该方法允许 SDK 向应用程序反馈远端第一帧视频解码成功的回调。当调用muteRemoteVideoStream2或者muteRemoteVideoStream后,该回调会产生;

回调参数

size:

uid:

回调状态码

状态码 描述
KC_StatusOk 200 状态正常
KC_JoinChannelFailed 4000 加入频道失败
KC_LoginSignalServerFailed 4001 登录信令服务器失败
KC_ConnectMediaServerFailed 4003 连接媒体服务器失败
KC_AppIdInvalid 4005 无效的AppId
KC_HttpRequestFailed 4006 加入频道失败
KC_LeaveChannelFailed 4100 离开频道失败
KC_KickedOutReLogin 4200 相同userId用户登录,服务器强行踢出当前用户
KC_KickedOutTimeOut 4201 客户端长时间未通知服务器状态,服务器强行踢出当前用户