BBASMRTCRoomAdapterProtocol.h 6.59 KB
//
//  BBASMRTCRoomAdapterProtocol.h
//  BBAMNP
//
//  Created by baidu on 2020/4/8.
//  Copyright © 2020 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BBASMRTCConvertModel.h"
#import "BBASMRTCRoomConfig.h"
#import <AVFoundation/AVFoundation.h>

NS_ASSUME_NONNULL_BEGIN

/// RTCRoom-实时音视频协议,宿主可以自行实现RTCRoom能力
@protocol BBASMRTCRoomAdapterProtocol <NSObject>

@optional

/// 初始化RTC实例
/// @param config 开发者设置的参数
- (instancetype)initWithConfig:(BBASMRTCRoomConfig *)config;

/// 创建房间
/// @param appId 由云平台提供,全局唯一,用于识别应用
/// @param tokenStr 云后台校验参数
/// @param delegate rtcRoom的代理,用于接收rtc的各种状态回调
- (void)creatRTCRoomWithAppID:(NSString *)appId
                     tokenStr:(NSString *)tokenStr
                     delegate:(id)delegate;

/// 设置参数
/// @param config 参数
- (void)setUpParams:(BBASMRTCRoomConfig *)config;

#pragma mark -- 登录/退出房间

/// 登录房间,登录房间成功,在同一个房间的人能进行相互音视频聊天,如果失败,会通过onErrorInfoUpdate call back 返回错误信息
/// @param roomName 房间名,长度不可超过 255 byte
/// @param userId  用户id,每个房间的用户ID必须唯一
/// @param displayName displayName 用户昵称
/// @return 是否登录成功,YES 成功,NO 失败
- (BOOL)enterRoomWithRoomName:(NSString *)roomName
                       userID:(NSInteger)userId
                  displayName:(NSString *)displayName;

/// 退出房间,退出后会停止音视频采集,断开与房间服务器的连接,取消音视频的传输,销毁音视频传输通道以及释放其他资源
/// @return 是否退登成功,YES 成功,NO 失败
- (BOOL)logoutRtcRoom;

#pragma mark -- 用户信息

/// 获取房间用户列表
/// @return 用户列表
- (NSArray *)getRemoteUserList;

/// 获取用户语音激励信息
/// @return 用户语音激励信息,包含用户音量大小
- (NSDictionary*)getRemoteAudioLevels;

#pragma mark -- 发布/订阅流

/// 发布本地音视频流, 流发布在roomId指定的房间,同一房间内的用户可以相互订阅流,默认在发布流的同时,订阅该房间其他用户的流;
- (void)publishLocalStream;

/// 取消发布本地音视频流
- (void)unpublishLocalStream;

/// 订阅远端音视频流,用于订阅同一房间的其他用户的流
/// @param streamingIds 要订阅的其他用户的流id列表(即其他用户id列表)
- (void)subscribeRemoteStream:(NSArray<NSNumber *> *)streamingIds;

/// 取消订阅远端音视频流,停止已经订阅的流
/// @param streamingIds 要停止订阅的流id列表(即其他用户id列表)
- (void)unsubscribeRemoteStream:(NSArray<NSNumber *> *)streamingIds;

#pragma mark -- 视图控制

/// 设置指定远端画面暂停/恢复播放,暂停时画面停留在最后一帧
/// @param state YES:播放,NO:暂停
/// @param userId 远端用户id
- (void)setRemoteVideoPlayState:(BOOL)state userId:(NSInteger)userId;

/// 设置指定远端画面静音/恢复播放
/// @param state YES:播放,NO:暂停
/// @param userId 远端用户id
- (void)setRemoteAudioPlayState:(BOOL)state userId:(NSInteger)userId;

#pragma mark -- 画面

/// 开启/关闭摄像头,在关闭摄像头后,本地无法预览,且不传输本地视频数据给对方
/// @param mute YES:关闭摄像头,NO:打开摄像头
- (void)cameraMute:(BOOL)mute;

/// 开启/关闭摄像头自动对焦
/// @param focus YES:开启,NO:关闭
- (void)cameraFocus:(BOOL)focus;

/// 开启/禁用双手滑动调整摄像头聚焦
/// @param zoom YES:开启,NO:关闭
- (void)cameraZoom:(BOOL)zoom;

/// 切换摄像头
/// @param oriention 摄像头方向,可选值:front 、back
/// @param callback 异步返回切换完成之后的方向
- (void)switchCamera:(AVCaptureDevicePosition)oriention callback:(void (^)(AVCaptureDevicePosition position))callback;

/// 切换摄像头
/// @param callback 异步返回切换完成之后的方向
- (void)switchCameraWithCallback:(void (^)(AVCaptureDevicePosition position))callback;

/// 暂停相机预览,画面停在最后一帧
- (void)pauseCamera;

/// 恢复相机预览
- (void)resumeCamera;

/// 设置远端看到的画面的镜像效果,该属性的变化不会影响到本地画面,仅影响远端看到的画面效果
/// @param isMirror YES:镜像,NO:不镜像
-(void)enableRemoteMirror:(BOOL)isMirror;

/// 设置本地摄像头预览画面的镜像效果
/// @param isMirror YES:镜像,NO:不镜像
-(void)enableLocalMirror:(BOOL)isMirror;

/// 获取摄像头的状态
/// @return YES:前置摄像头 NO:不是前置摄像头
- (BOOL)isFrontCamera;

/// 调整基础美颜磨皮效果
/// @param level 数值
- (void)adjustBeautyBlurLevel:(CGFloat)level;

/// 调整基础美颜美白效果
/// @param level 数值
- (void)adjustBeautyWhiteLevel:(CGFloat)level;

/// 调整高级美颜大眼效果
/// @param level 数值
- (void)adjustBeautyEnlargingLevel:(CGFloat)level;

/// 调整高级美颜瘦脸效果
/// @param level 数值
- (void)adjustBeautyThinningLevel:(CGFloat)level;

/// 设置声音输出方式
/// @param mode 可选值:speaker(扬声器)或 ear(听筒)
- (void)setSoundMode:(BBASMRtcSoundMode)mode;

#pragma mark -- 声音

/// 打开/关闭麦克风,关闭麦克风,停止音频的采集
/// @param isMute YES:关闭 NO:开启 默认开启
-(void)muteMicphone:(BOOL)isMute;

/// 打开/关闭音频自动增益
/// @param enable true:开启 false:关闭 默认关闭
- (void)enableAgc:(BOOL)enable;

/// 打开/关闭音频噪声抑制
/// @param enable true:开启 false:关闭  默认false
- (void)enableAns:(BOOL)enable;


#pragma mark -- 视图管理,添加/删除

/// 添加视图
/// @param superView 视图的父view
/// @param type 视图类型,类型为local和remote
/// @param userId 用户id
- (void)addViewToSuperView:(UIView *)superView type:(BBASMRtcViewType)type userId:(NSInteger)userId;

/// 更新view和userId的绑定关系
/// @param view 视图的父view
/// @param userId 用户id
- (void)updateView:(UIView *)view userId:(NSInteger)userId;

/// 父view的大小发生了变化
/// @param superView 父view
- (void)superViewDidChange:(UIView *)superView;

/// 销毁房间
- (void)destroyRoom;

/// debug模式下打开/关闭RTC云SDK日志
- (void)rtcDebugLogEnable:(BOOL)enable;

#pragma mark -- custom commands
/**
 * @brief 房管/主播/会议主持 把某人踢出聊天室
 * @param  userId 在房间中的用户的 用户ID
 */
- (void)kickOutUserWithId:(NSInteger)userId;

@end

NS_ASSUME_NONNULL_END