通过阅读本文,您可以了解到iOS端音视频通话的集成方法。
环境要求
iOS端具体环境要求,更多信息,请参见使用限制。
前提条件
- 环境中已安装Xcode 9.0或以上版本,更多信息,请参见Xcode。
- 您需要持有Apple开发证书或个人账号。
操作步骤
Demo目录结构说明
RTC把业务代码封装到RTCBeaconTower的库中,因此只需在Podfile中指定RTCBeaconTower库的路径,RTCBeaconTower就可以以本地第三方库的形式移植到其他项目中。如下所示:
pod 'RTCBeaconTower', :path => 'RTCBeaconTower'
## pod 'RTCBeaconTower' 说明项目依赖RTCBeaconTower库
## path => 'RTCBeaconTower' 指明RTCBeaconTower库的位置(相对于Podfile)
API说明
API | 描述 |
---|---|
sharedInstance | 获取AliRTCBeaconTower的实例对象,初始化RTC SDK。 |
destorySharedInstance | 销毁AliRTCBeaconTower的实例对象,销毁后需要再调用sharedInstance接口再次初始化实例。 |
login | 根据输入的房间号、用户名加入RTC频道。 |
logout | 退出RTC频道。 |
setDelegate | 设置监听。 |
enterSeat | 连麦。 |
leavelSeat | 断开连麦。 |
switchCamera | 切换前后摄像头。 |
muteLocalCamera | 是否停止本地视频采集。 |
muteLocalMic | 是否停止本地音频采集。 |
setLocalViewConfig | 为本地预览设置参数及绘制窗口。 |
setRemoteViewConfig | 为远端的视频设置参数及绘制窗口。 |
startPreview | 开始本地预览。 |
stopPreview | 停止本地预览。 |
configRemoteAudio | 设置是否拉取音频流。 |
configRemoteCameraTrack | 设置是否拉取camera视频流。 |
configRemoteScreenTrack | 设置是否拉取screen视频流。 |
displayName | 获取用户名。 |
enableSpeakPhone | 设置是否开启扬声器。 |
subscribe | 手动拉视频和音频流。 |
API | 描述 |
---|---|
onRemoteUserOffLineNotify | 远端用户下线的通知。 |
onRemoteUserOnLineNotify | 远端用户上线的通知。 |
onEnterSeatResult | 用户上麦的通知。 |
onLeaveSeatResult | 用户下麦的通知。 |
onRoomDestroy | 房间被销毁的回调。 |
onOccurError | 错误信息的通知。 |
onOccurWarning | 警告信息的通知。 |
onSDKError | SDK发生异常需要销毁实例。 |
onJoinChannelResult | 加入房间的通知。 |
onLeaveChannelResult | 离开房间的通知。 |
onRemoteTrackAvailableNotify | 远端用户音视频流发生变化时的回调。 |
onSubscribeChangedNotify | 订阅情况发生变化时的回调。 |
onUserAudioMuted | 用户取消音频的通知。 |
onUserVideoMuted | 用户取消视频的通知。 |
onNetworkQualityChanged | 网络质量变化时的回调。 |
onUpdateRoleNotifyWithOldRole | 角色切换成功的通知。 |
功能实现接口
- sharedInstance:获取AliRTCBeaconTower的实例对象,初始化RTC SDK。
/** * @brief 获取单例 * @return AliRTCBeaconTower 单例对象 */ + (AliRTCBeaconTower *) sharedInstance;
- destorySharedInstance:销毁AliRTCBeaconTower的实例对象,销毁后需要再调用sharedInstance接口再次初始化实例。
/// 销毁RTC SDK - (void)destroySharedInstance;
- login:根据输入的房间号、用户名加入RTC频道。
/** * @brief 加入频道 * @param authInfo 频道号 * @param name 任意用于显示的用户名称,不是User ID */ - (void)login:(AliRtcAuthInfo *)authInfo name:(NSString *)name;
- logout:退出RTC频道。
/// 离开频道 - (void)logout;
- setDelegate:设置监听。
- (void)setDelegate:(id<RTCVideoliveRoomDelegate> _Nullable)delegate;
- enterSeat:连麦。
/// 连麦 - (int)enterSeat;
- leavelSeat:断开连麦。
//断开连麦 - (void)leaveSeat;
- switchCamera:切换前后摄像头。
/** * @brief 切换前后摄像头 * @return 0表示Success 非0表示Failure * @note 只有iOS和android提供这个接口 */ - (int)switchCamera;
- muteLocalCamera:是否停止本地视频采集。
/** * @brief 是否将停止本地视频采集 * @param mute YES表示停止视频采集;NO表示恢复正常 * @param track 需要停止采集的track * @return 0表示Success 非0表示Failure * @note 发送黑色的视频帧。本地预览也呈现黑色。采集,编码,发送模块仍然工作,只是视频内容是黑色帧 */ - (int)muteLocalCamera:(BOOL)mute forTrack:(AliRtcVideoTrack)track;
- muteLocalMic:是否停止本地音频采集。
/** * @brief mute或unmute本地音频采集 * @param mute YES表示本地音频采集空帧;NO表示恢复正常 * @note mute是指采集和发送静音帧。采集和编码模块仍然在工作 * @return 0表示成功放入队列,-1表示被拒绝 */ - (int)muteLocalMic:(BOOL)mute;
- setLocalViewConfig:为本地预览设置参数及绘制窗口。
/** * @brief 为本地预览设置参数以及绘制窗口 * @param viewConfig 包含了窗口以及渲染方式 * @param track must be AliVideoTrackCamera * @return 0表示Success,非0表示Failure * @note 支持joinChannel之前和之后切换窗口。如果viewConfig或者viewConfig中的view为nil,则停止渲染 * 如果在播放过程中需要重新设置render mode,请保持canvas中其他成员变量不变,仅修改renderMode * 如果在播放过程中需要重新设置mirror mode,请保持canvas中其他成员变量不变,仅修改mirrorMode */ - (int)setLocalViewConfig:(AliVideoCanvas *_Nullable)viewConfig forTrack:(AliRtcVideoTrack)track;
- setRemoteViewConfig:为远端的视频设置参数及绘制窗口。
/** * @brief 为远端的视频设置参数及绘制窗口 * @param canvas canvas包含了窗口以及渲染方式 * @param uid User ID。从App server分配的唯一标示符 * @param track 需要设置的track * @return 0表示Success,非0表示Failure * @note 支持joinChannel之前和之后切换窗口。如果canvas为nil或者view为nil,则停止渲染相应的流 * 如果在播放过程中需要重新设置render mode,请保持canvas中其他成员变量不变,仅修改renderMode * 如果在播放过程中需要重新设置mirror mode,请保持canvas中其他成员变量不变,仅修改mirrorMode */ - (int)setRemoteViewConfig:(AliVideoCanvas *)canvas uid:(NSString *)uid forTrack:(AliRtcVideoTrack)track;
- startPreview:开始本地预览。
/** * @brief 开始本地预览 * @return 0表示Success 非0表示Failure * @note 如果没有设置view,则无法预览。可以在joinChannel之前就开启预览 * 会自动打开摄像头 */ - (int)startPreview;
- stopPreview:停止本地预览。
/** * @brief 停止本地预览 * @return 0表示Success 非0表示Failure * @note leaveChannel会自动停止本地预览 * 会自动关闭摄像头 (如果正在publish camera流,则不会关闭摄像头) */ - (int)stopPreview;
- configRemoteAudio:设置是否拉取音频流。
/** * @brief 设置是否拉取音频流 * @param uid userId 从App server分配的唯一标示符 * @param enable YES: 拉取; NO: 不拉取 * @note 可以在joinChannel之前或者之后设置。如果已经订阅该用户的流,需要调用subscribe:(NSString *)uid onResult:才生效 */ - (void)configRemoteAudio:(NSString *)uid enable:(BOOL)enable;
- configRemoteCameraTrack:设置是否拉取camera视频流。
/** * @brief 设置是否拉取camera视频流 * @param uid userId 从App server分配的唯一标示符。 * @param master 是否优先拉取大流 * @param enable YES: 拉取; NO: 不拉取 * @note 可以在joinChannel之前或者之后设置。如果已经订阅该用户的流,需要调用subscribe:(NSString *)uid onResult:才生效 */ - (void)configRemoteCameraTrack:(NSString *)uid preferMaster:(BOOL)master enable:(BOOL)enable;
- configRemoteScreenTrack:设置是否拉取screen视频流。
/** * @brief 设置是否拉取screen视频流 * @param uid uerId从App server分配的唯一标示符 * @param enable YES: 拉取; NO: 不拉取 * @note 可以在joinChannel之前或者之后设置。如果已经订阅该用户的流,需要调用subscribe:(NSString *)uid onResult:才生效 */ - (void)configRemoteScreenTrack:(NSString *)uid enable:(BOOL)enable;
- displayName:获取用户名。
/// 获取用户名 /// @param userid userId - (NSString *)displayName:(NSString *)userid;
- enableSpeakPhone:设置是否开启扬声器。
- (int)enableSpeakPhone:(BOOL)enable;
- subscribe:手动拉视频和音频流。
/** * @brief 手动拉视频和音频流 * @param uid User ID。不允许为nil * @param onResult 当subscribe执行结束后调用这个回调 * @note 如果需要手动选择拉取的流,调用configRemoteAudio, configRemoteTrack, * configRemoteScreenTrack来设置。缺省是拉取audio和camera track * 如果需要unsub所有的流,先通过configRemoteAudio, configRemoteTrack, * configRemoteScreenTrack来清除设置,然后调用subscribe */ - (void)subscribe:(NSString *)uid onResult:(void (^)(NSString *uid, AliRtcVideoTrack vt, AliRtcAudioTrack at))onResult;
回调接口
- onRemoteUserOffLineNotify:远端用户下线的通知。
/// 远端用户下线通知 /// @param uid 用户id - (void)onRemoteUserOffLineNotify:(NSString *)uid;
- onRemoteUserOnLineNotify:远端用户上线的通知。
/// 远端用户上线通知 /// @param uid 用户id - (void)onRemoteUserOnLineNotify:(NSString *)uid;
- onEnterSeatResult:用户上麦的通知。
/// 自己上麦通知 /// @param errorCode 结果 - (void)onEnterSeatResult:(int)errorCode;
- onLeaveSeatResult:用户下麦的通知。
/// 自己下线通知 /// @param errorCode 结果 - (void)onLeaveSeatResult:(int)errorCode;
- onRoomDestroy:房间被销毁的回调。
/// 房间被销毁通知 - (void)onRoomdestroy;
- onOccurError:错误信息的通知。
/** * @brief 如果engine出现error,通过这个回调通知app * @param error Error type */ - (void)onOccurError:(int)error;
- onOccurWarning:警告信息的通知。
/** * @brief 如果engine出现warning,通过这个回调通知app * @param warn Warning type */ - (void)onOccurWarning:(int)warn;
- onSDKError:SDK发生异常需要销毁实例。
/** * @brief 如果engine出现严重error,通过这个回调通知app * @param error 错误类型 */ - (void)onSDKError:(int)error;
- onJoinChannelResult:加入房间的通知。
/** * @brief 加入频道结果 * @param result 加入频道结果,成功返回0,失败返回错误码 * @note 此回调等同于joinChannel接口的block,二者择一处理即可 */ - (void)onJoinChannelResult:(int)result authInfo:(AliRtcAuthInfo *)authInfo;
- onLeaveChannelResult:离开房间的通知。
/** * @brief 离开频道结果 * @param result 离开频道结果,成功返回0,失败返回错误码 * @note 调用leaveChannel接口后返回,如果leaveChannel后直接调用destroy,将不会收到此回调 */ - (void)onLeaveChannelResult:(int)result;
- onRemoteTrackAvailableNotify:远端用户音视频流发生变化时的回调。
/** * @brief 当远端用户的流发生变化时,返回这个消息 * @note 远方用户停止推流,也会发送这个消息 */ - (void)onRemoteTrackAvailableNotify:(NSString *)uid audioTrack:(AliRtcAudioTrack)audioTrack videoTrack:(AliRtcVideoTrack)videoTrack;
- onSubscribeChangedNotify:当订阅情况发生变化时的回调。
/** * @brief 当订阅情况发生变化时,返回这个消息 */ - (void)onSubscribeChangedNotify:(NSString *)uid audioTrack:(AliRtcAudioTrack)audioTrack videoTrack:(AliRtcVideoTrack)videoTrack;
- onUserAudioMuted:用户取消音频的通知
/** * @brief 用户muteAudio通知 * @param uid 执行muteAudio的用户 * @param isMute YES:静音 NO:未静音 */ - (void)onUserAudioMuted:(NSString *)uid onUserAudioMuted:(BOOL)isMute;
- onUserVideoMuted:用户取消视频通知。
/** * @brief 用户muteVideo通知 * @param uid 执行muteVideo的用户 * @param isMute YES:推流黑帧 NO:正常推流 */ - (void)onUserVideoMuted:(NSString *)uid videoMuted:(BOOL)isMute;
- onNetworkQualityChanged:网络质量变化时的回调。
/** * @brief 网络质量变化时发出的消息 * @param uid 网络质量发生变化的uid * @param upQuality 上行网络质量 * @param downQuality 下行网络质量 * @note 当网络质量发生变化时触发,uid为@""时代表self的网络质量变化 */ - (void)onNetworkQualityChanged:(NSString *)uid onNetworkQualityChanged:(AliRtcNetworkQuality)upQuality downNetworkQuality:(AliRtcNetworkQuality)downQuality;
- onUpdateRoleNotifyWithOldRole:角色切换成功的通知。
/** * @brief 当用户角色发生变化化时通知 * @param oldRole 变化前角色类型 * @param newRole 变化后角色类型 * @note 调用setClientRole方法切换角色成功时触发此回调 */ - (void)onUpdateRoleNotifyWithOldRole:(AliRtcClientRole)oldRole newRole:(AliRtcClientRole)newRole;