QNRTCEngine
/**
* 创建 QNRTCEngine 核心类
*
* @param context Android 上下文句柄
* @return QNRTCEngine QNRTCEngine核心类单例
*/
public static QNRTCEngine createEngine(Context context);
/**
* 创建 QNRTCEngine 核心类
*
* @param context Android 上下文句柄
* @param setting 实时音视频互动配置参数
* @return QNRTCEngine QNRTCEngine核心类单例
*/
public static QNRTCEngine createEngine(Context context, QNRTCSetting setting);
/**
* 创建 QNRTCEngine 核心类
*
* @param context Android 上下文句柄
* @param eventListener 音视频通话事件监听器,该监听器包含了互动过程中的所有回调函数
* @return QNRTCEngine QNRTCEngine核心类单例
*/
public static QNRTCEngine createEngine(Context context, QNRTCEngineEventListener eventListener);
/**
* 创建 QNRTCEngine 核心类
*
* @param context Android 上下文句柄
* @param setting 实时音视频互动配置参数
* @param eventListener 音视频通话事件监听器,该监听器包含了互动过程中的所有回调函数
* @return QNRTCEngine QNRTCEngine核心类单例
*/
public static QNRTCEngine createEngine(Context context, QNRTCSetting setting, QNRTCEngineEventListener eventListener);
/**
* 创建一个 TrackInfo 的 Builder 以创建 Track
*
* @return TrackInfoBuilder TrackInfo 的 Builder
*/
public QNTrackInfoBuilder createTrackInfoBuilder();
/**
* 销毁指定 Track
*
* @param localTrack 本地 TrackInfo 对象
*/
public void destroyTrack(QNTrackInfo localTrack);
/**
* 设置是否自动订阅,默认值为 true
*
* @param autoSubscribe 是否开启自动订阅
*/
public void setAutoSubscribe(boolean autoSubscribe);
/**
* 启动相机采集,可在通话过程中调用以获取相机资源
* <p>开始采集的参数将会使用 {@link QNRTCSetting#getVideoPreviewFormat},
* 采集的状态可以通过 {@link #setCaptureVideoCallBack} 监听</p>
*/
public void startCapture();
/**
* 停止相机采集,可在通话过程中调用以释放相机资源
*/
public void stopCapture();
/**
* 设置预览窗口
* <p>设置相机在经过美颜、水印等处理后的渲染控件;控件的显示模式可以通过 {@link QNSurfaceView#setScalingType} 设置</p>
*
* @param previewWindow 预览窗口
*/
public void setCapturePreviewWindow(QNSurfaceView previewWindow);
/**
* 设置本地预览的视频数据回调,可用于接入美颜、滤镜等
*
* @param captureVideoCallBack 视频数据回调
*/
public void setCaptureVideoCallBack(QNCaptureVideoCallback captureVideoCallBack);
/**
* 设置视频 Track 的渲染窗口
* <p>设置视频 Track 在编码前的渲染控件;控件的显示模式可以通过 {@link QNSurfaceView#setScalingType} 设置</p>
*
* @param trackInfo TrackInfo 对象
* @param renderView 渲染窗口对象
*/
public void setRenderWindow(QNTrackInfo trackInfo, QNSurfaceView renderView);
/**
* 设置远端音频回调
*
* @param trackInfo 音频 TrackInfo 对象
* @param callback 音频数据回调
*/
public void setRemoteAudioCallback(QNTrackInfo trackInfo, QNRemoteAudioCallback callback);
/**
* 设置本地音频 Track 的编码后数据回调
*
* @param trackInfo 音频 TrackInfo 对象
* @param callback 音频数据回调接口
*/
public void setLocalAudioPacketCallback(QNTrackInfo trackInfo, QNLocalAudioPacketCallback callback);
/**
* 设置远端音频 Track 的解码前数据回调
*
* @param trackInfo 音频 TrackInfo 对象
* @param callback 音频数据回调接口
*/
public void setRemoteAudioPacketCallback(QNTrackInfo trackInfo, QNRemoteAudioPacketCallback callback);
/**
* 设置音频音量回调
*
* @param trackInfo 音频 TrackInfo 对象
* @param callback 音频音量回调
*/
public void setAudioVolumeCallback(QNTrackInfo trackInfo, QNAudioVolumeCallback callback);
/**
* 设置音视频通话事件监听器
*
* @param eventListener 事件监听器,该监听器包含了互动过程中的所有回调函数
*/
public void setEventListener(QNRTCEngineEventListener eventListener);
/**
* 获取房间状态
*
* @return QNRoomState 房间状态
*/
public QNRoomState getRoomState();
/**
* 加入房间
* <p>
* Note: 关于房间 Token 生成请参考 <a href="https://doc.qnsdk.com/rtn/docs/server_overview#1">https://doc.qnsdk.com/rtn/docs/server_overview#1</a></br>
* 主动加入房间只有在 QNRoomState.IDLE 才有效, 其他状态时 SDK 不处理; 重复加入为无效操作
* <p/>
* @param roomToken roomToken
*/
public void joinRoom(String roomToken);
/**
* 加入房间
* <p>
* Note: 关于房间 Token 生成请参考 <a href="https://doc.qnsdk.com/rtn/docs/server_overview#1">https://doc.qnsdk.com/rtn/docs/server_overview#1</a></br>
* 主动加入房间只有在 QNRoomState.IDLE 才有效, 其他状态时 SDK 不处理; 重复加入为无效操作
* <p/>
* @param roomToken roomToken
* @param userData 用户的更多额外数据
*/
public void joinRoom(String roomToken, String userData);
/**
* 简单接口发布,发布一路 master 的麦克风音频 Track 和一路 master 的相机视频 Track
*/
public void publish();
/**
* 简单接口取消发布,取消发布 master 的音频 Track 和 master 的视频 Track
*/
public void unPublish();
/**
* 简单接口发布纯音频,发布一路 master 的来自麦克风采集的音频 Track
*/
public void publishAudio();
/**
* 静音本地音频
*/
public void muteLocalAudio(boolean isMute);
/**
* 简单接口取消发布音频,取消发布 master 的来自麦克风采集的音频 Track
*/
public void unPublishAudio();
/**
* 简单接口发布纯视频,发布一路 master 的来自相机采集的视频 Track
*/
public void publishVideo();
/**
* mute 本地视频
*/
public void muteLocalVideo(boolean isMute);
/**
* 简单接口取消发布视频,取消发布 master 的来自相机采集的视频 Track
*/
public void unPublishVideo();
/**
* 发布多个 Tracks
*
* @param trackInfoList Tracks 的 TrackInfo 对象列表
*/
public void publishTracks(List<QNTrackInfo> trackInfoList);
/**
* 取消发布多个 Tracks
*
* @param trackInfoList Tracks 的 TrackInfo 对象列表
*/
public void unPublishTracks(List<QNTrackInfo> trackInfoList);
/**
* mute 多个 Tracks
*
* @param trackInfoList Tracks 的 TrackInfo 对象列表
*/
public void muteTracks(List<QNTrackInfo> trackInfoList);
/**
* 订阅多个 Tracks
*
* @param trackInfoList Tracks 的 TrackInfo 对象列表
*/
public void subscribeTracks(List<QNTrackInfo> trackInfoList);
/**
* 更改已经订阅 Track 的质量等级
* @see QNTrackSubConfiguration
*
* @param trackInfoList Tracks 的 TrackInfo 对象列表
*/
public void updateSubscribeTracks(List<QNTrackInfo> trackInfoList);
/**
* 取消订阅多个 Tracks
*
* @param trackInfoList Tracks 的 TrackInfo 对象列表
*/
public void unSubscribeTracks(List<QNTrackInfo> trackInfoList);
/**
* 离开房间</br>
* <p>异步接口,见 {@link QNRTCEngineEventListener#onRoomLeft()}</p>
*/
public void leaveRoom();
/**
* 获取房间内的用户列表
*/
public List<QNRTCUser> getUserList();
/**
* 是否为第一个用户
*/
public boolean isFirstUser();
/**
* 切换摄像头
*/
public void switchCamera(QNCameraSwitchResultCallback callback);
/**
* 打开闪光灯
*/
public boolean turnLightOn();
/**
* 关闭闪光灯
*/
public boolean turnLightOff();
/**
* 手动对焦
*
* @param x 对焦框的 x 坐标
* @param y 对焦框的 y 坐标
* @param viewWidth 当前预览窗口的宽
* @param viewHeight 当前预览窗口的高
*/
public void manualFocus(float x, float y, int viewWidth, int viewHeight);
/**
* 曝光补偿
*
* @param value 曝光补偿的值
*/
public void setExposureCompensation(int value);
/**
* 获取曝光补偿最大值
*
* @return 曝光补偿最大值
*/
public int getMaxExposureCompensation();
/**
* 获取曝光补偿最小值
*
* @return 曝光补偿最小值
*/
public int getMinExposureCompensation();
/**
* 设置缩放。在使用此接口前必须获取可缩放值的列表,用里面的值作为参数
*
* @param 缩放值
*/
public void setZoom(float zoom);
/**
* 获取可缩放值列表
*
* @return 可缩放值的列表,如果为空则表示不支持缩放
*/
public List<Float> getZooms();
/**
* 设置相机采集镜像,设置镜像后远端渲染和本地预览都是镜像的
*
* @param isMirrorEnabled 是否镜像
*/
public void setMirror(boolean isMirrorEnabled);
/**
* 设置本地预览镜像,设置镜像后本地预览是镜像的,远端预览还是正常的
*/
public void setPreviewMirror(boolean mirror);
/**
* mute 远端音频
*/
public void muteRemoteAudio(boolean isMute);
/**
* 设置远端音频 Track 播放音量
* <p>音量值在 0.0 - 1.f 之间为软件缩小;1.0f 为原始音量播放;大于 1.0f 且小于 10.0f 为软件放大, <br/>
* 在需要放大时,应从 1.x 开始设置用最小的放大值来取得合适的播放效果</p>
*
* @param trackId 远端 Track
* @param volume 远端 Track 播放音量【0.0 - 10.0】,默认值为 1.0
*/
public void setRemoteAudioVolume(String trackId, double volume);
/**
* 设置设备上当前音频输入设备采集后音量
* <p>音量值在 0.0 - 1.f 之间为软件缩小;1.0f 为原始音量播放;大于 1.0f 且小于 10.0f 为软件放大, <br/>
* 在需要放大时,应从 1.x 开始设置用最小的放大值来取得合适的播放效果. <br/>
* 该设置可以用于适度对采集音量做放大或者缩小 </p>
*
* @param volume 采集音量【0.0 - 10.0】,默认值为 1.0
*/
public void setLocalAudioRecordVolume(double volume);
/**
* 是否允许本地预览
*/
public void setPreviewEnabled(boolean isEnabled);
/**
* 设置美颜
*
* @param QNBeautySetting 美颜参数
*/
public void setBeauty(QNBeautySetting beautySetting);
/**
* 设置初始化或音频设备状态改变时使用的默认音频路由。
* eg. 插入/拔出音频插孔中的设备
*
* @param defaultToSpeaker 如果为 true, 则为扬声器; 如果为 false, 则为听筒
*/
public void setDefaultAudioRouteToSpeakerphone(boolean defaultToSpeaker);
/**
* 设置扬声器开关
*
* @param 如果为 true,则为开启; 如果为 false,则为关闭
*/
public void setSpeakerphoneOn(boolean on);
/**
* 设置当前订阅的远端音频 track 混音后的 PCM 数据</br>
* 数据回调不受 {@link QNRTCEngine#setSpeakerphoneOn(boolean)} 开关影响
*
* @param callback 音频数据回调
*/
public void setRemoteTracksMixedAudioCallback(QNRemoteAudioCallback callback);
/**
* 设置音频数据回调
*
* @param callback 音频数据回调
*/
public void setAudioSourceCallback(QNAudioSourceCallback callback);
/**
* 开始数据统计,默认间隔为 3s
*/
public void enableStatistics();
/**
* 开启数据统计
*
* @param periodMs 每次统计间隔时间
*/
public void enableStatistics(int periodMs);
/**
* 关闭数据统计
*/
public void disableStatistics();
/**
* 导入视频帧数据
*
* @param trackId 导入视频数据指定的 TrackId
* @param frame 视频帧数据
*/
public void pushVideoBuffer(String trackId, QNVideoFrame frame);
/**
* 导入音频数据
*
* @param buffer 音频数据,格式为 PCM 格式,48000 采样率,16 位宽,单声道
*/
public void pushAudioBuffer(byte[] buffer);
/**
* 导入音频数据
*
* @param buffer 音频数据
* @param audioFormat 音频格式
*/
public void pushAudioBuffer(byte[] buffer, QNAudioFormat audioFormat);
/**
* 创建合流任务
*
* <p>
* Note:<br/>
* 若无权限进行创建,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_NO_PERMISSION (10051) 错误码<br/>
* 若参数错误,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_INVALID_PARAMETER (10053) 错误码需要在加入房间后执行操作<br/>
* 创建成功后,将回调 QNRTCEngineEventListener#onCreateMergeJobSuccess
* <br/>
* 当有合流及单路转推切换需求时,合流必须使用自定义合流,流地址一样时切换会有抢流现象,因此需要拼接 "?serialnum=xxx" 决定流的优先级,
* serialnum 值越大,优先级越高。<br/>
* 切换成功后务必关闭之前的任务,否则会出现一路任务持续计费的情况
* </p>
*
* @param mergeJob 合流任务
*/
public void createMergeJob(QNMergeJob mergeJob);
/**
* 设置合流布局
* 若无权限进行设置,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_NO_PERMISSION (10051) 错误码
* 若参数错误,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_INVALID_PARAMETER (10053) 错误码
*
* @param addedTracks 需要合流的 QNMergeTrackOption 对象列表
* @param jobId(可选) 合流任务 ID
*/
public void setMergeStreamLayouts(List<QNMergeTrackOption> addedTracks, String jobId);
/**
* 移除合流布局
* 若无权限进行移除,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_NO_PERMISSION (10051) 错误码
* 若参数错误,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_INVALID_PARAMETER (10053) 错误码
*
* @param removedTracks 取消合流的 QNMergeTrackOption 对象列表
* @param jobId 合流任务 ID
*/
public void removeMergeStreamLayouts(List<QNMergeTrackOption> removedTracks, String jobId);
/**
* 停止合流
* <p>Note: 如果释放 SDK 时需要调用该接口关闭服务端合流任务<p/>
*
* @param mergeJobId 停止合流的合流任务 ID
*/
public void stopMergeStream(String mergeJobId);
/**
* 停止合流
* <p>Note: 如果释放 SDK 时需要调用该接口关闭服务端合流任务<p/>
*
* @param mergeJobId 停止合流的合流任务 ID
* @param delayTimeMs 延迟关闭任务的时间
*/
public void stopMergeStream(String mergeJobId, long delayTimeMs);
/**
* 创建单路流转推任务
* <p>
* Note:<br/>
* 当有合流及单路转推切换需求时,合流必须使用自定义合流,流地址一样时切换会有抢流现象,因此需要拼接 "?serialnum=xxx" 决定流的优先级,
* serialnum 值越大,优先级越高。<br/>
* 切换成功后务必关闭之前的任务,否则会出现一路任务持续计费的情况。<br/>
* 创建成功后,将会回调 QNRTCEngineEventListener##onCreateForwardJobSuccess
* <p/>
*
* @param forwardJob 转推任务
*/
public void createForwardJob(QNForwardJob forwardJob);
/**
* 停止单路流转推任务
* <p>Note: 如果释放 SDK 时需要调用该接口关闭服务端单路转推任务<p/>
*
* @param forwardJobId 停止转推任务的 ID
*/
public void stopForwardJob(String forwardJobId);
/**
* 停止单路流转推任务
* <p>Note: 如果释放 SDK 时需要调用该接口关闭服务端单路转推任务<p/>
*
* @param forwardJobId 停止转推任务的 ID
* @param delayTimeMs 延迟关闭任务的时间
*/
public void stopForwardJob(String forwardJobId, long delayTimeMs);
/**
* 设置视频水印图片
* <p>水印将会在摄像头采集数据上生效<p/>
*
* @param waterMark 水印参数配置类
*/
public void setVideoWaterMark(QNVideoWaterMark waterMark);
/**
* 切换类型为 QNSourceType.VIDEO_CAMERA 的 Track 为图片发送
*
* @param image 图片对象
*/
public void pushCameraTrackWithImage(QNImage image);
/**
* 清除水印图片
*/
public void clearVideoWaterMark();
* 释放资源
*/
public void destroy();
/**
* 踢出用户
* 若无权限进行踢人,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_NO_PERMISSION (10051) 错误码
* 若参数错误,则会在 QNRTCEngineEventListener#onError 中回调 QNErrorCode.ERROR_INVALID_PARAMETER (10053) 错误码
*
* @param userId 踢出用户的 userId
*/
public void kickOutUser(String userId);
/**
* 发送自定义消息
*
* @param users 目标用户列表,为 null 时则给房间中的所有人发消息
* @param messageId 消息ID,可以为空
* @param message 消息内容
*/
public void sendMessage(List<String> users, String messageId, String message);
/**
* 发送 SEI 信息
*
* @param trackInfos 携带 SEI 信息的 tracks 列表,仅支持视频 track 的设置
* @param message SEI 信息
* @param repeatCount SEI 信息重复次数,-1 为永久发送
*/
public void setLocalVideoSEI(List<QNTrackInfo> trackInfos, String message, int repeatCount);
/**
* 发送 SEI 信息
*
* @param trackInfos 携带 SEI 信息的 tracks 列表,仅支持视频 track 的设置
* @param message SEI 信息
* @param uuid SEI UUID, 16 个字节
* @param repeatCount SEI 信息重复次数
*/
public void setLocalVideoSEI(List<QNTrackInfo> trackInfos, String message, byte[] uuid, int repeatCount);
/**
* 设置房间类型, 需要在加入房间之前调用,否则无效,默认为通信场景,角色类型为主播
*
* @param roomType 房间类型
*/
public void setRoomType(QNRoomType roomType);
/**
* 设置用户角色
*
* @param clientRole 角色类型,当房间类型为 COMMUNICATION 时无意义,所有角色都拥有发布和订阅权限;当房间类型为 LIVE_BROADCASTING 时,BROADCASTER 角色拥有发布和订阅权限,AUDIENCE 角色仅拥有订阅权限
* @return boolean 方法调用成功
*/
public boolean setClientRole(QNClientRole clientRole);
/**
* 开始跨房推流
*
* @param configuration 跨房推流配置
* @return boolean 开始跨房推流方法调用成功
*/
public boolean startMediaRelay(QNMediaRelayConfiguration configuration);
/**
* 更新跨房推流
*
* @param configuration 跨房推流配置
* @return boolean 更新跨房推流方法调用成功
*/
public boolean updateMediaRelay(QNMediaRelayConfiguration configuration);
/**
* 停止跨房推流
*
* @return boolean 停止跨房推流方法调用成功
*/
public boolean stopMediaRelay();
/**
* 切换房间
*
* @param token 目标房间 token
* @return 切换房间方法是否调用成功
*/
public boolean switchRoom(String token);