TRTCLiveRoom 是基于腾讯云实时音视频(TRTC)和即时通信 IM 服务组合而成的,支持以下功能:
- 主播创建新的直播间开播,观众进入直播间观看。
- 主播和观众进行视频连麦互动。
- 两个不同房间的主播 PK 互动。
- 支持发送各种文本消息和自定义消息,自定义消息可用于实现弹幕、点赞和礼物。
TRTCLiveRoom 是一个开源的 Class,依赖腾讯云的两个闭源 SDK,具体的实现过程请参见 视频连麦直播(Flutter)。
API | 描述 |
---|---|
sharedInstance | 获取单例对象。 |
destroySharedInstance | 销毁单例对象。 |
registerListener | 设置事件回调。 |
unRegisterListener | 设置事件回调所在的线程。 |
login | 登录。 |
logout | 登出。 |
setSelfProfile | 修改个人信息。 |
API | 描述 |
---|---|
createRoom | 创建房间(主播调用),若房间不存在,系统将自动创建一个新房间。 |
destroyRoom | 销毁房间(主播调用)。 |
enterRoom | 进入房间(观众调用)。 |
exitRoom | 离开房间(观众调用)。 |
getRoomInfos | 获取房间列表的详细信息。 |
getAnchorList | 获取房间内所有的主播列表,enterRoom() 成功后调用才有效。 |
getRoomMemberList | 获取房间内所有的成员信息,enterRoom() 成功后调用才有效。 |
API | 描述 |
---|---|
startCameraPreview | 开启本地视频的预览画面。 |
stopCameraPreview | 停止本地视频采集及预览。 |
startPublish | 开始直播(推流)。 |
stopPublish | 停止直播(推流)。 |
startPlay | 播放远端视频画面,可以在普通观看和连麦场景中调用。 |
stopPlay | 停止渲染远端视频画面。 |
API | 描述 |
---|---|
requestJoinAnchor | 观众请求连麦。 |
responseJoinAnchor | 主播处理连麦请求。 |
kickoutJoinAnchor | 主播踢除连麦观众。 |
API | 描述 |
---|---|
requestRoomPK | 主播请求跨房 PK。 |
responseRoomPK | 主播响应跨房 PK 请求。 |
quitRoomPK | 退出跨房 PK。 |
API | 描述 |
---|---|
switchCamera | 切换前后摄像头。 |
setMirror | 设置是否镜像展示。 |
muteLocalAudio | 静音本地音频。 |
muteRemoteAudio | 静音远端音频。 |
muteAllRemoteAudio | 静音所有远端音频。 |
API | 描述 |
---|---|
getAudioEffectManager | 获取背景音乐音效管理对象 TXAudioEffectManager。 |
API | 描述 |
---|---|
getBeautyManager | 获取美颜管理对象 TXBeautyManager。 |
API | 描述 |
---|---|
sendRoomTextMsg | 在房间中广播文本消息,一般用于弹幕聊天。 |
sendRoomCustomMsg | 发送自定义文本消息。 |
API | 描述 |
---|---|
onError | 错误回调。 |
onWarning | 警告回调。 |
onKickedOffline | 其他用户登录了同一账号,被踢下线。 |
API | 描述 |
---|---|
onEnterRoom | 本地进房回调。 |
onUserVideoAvailable | 远端用户是否存在可播放的主路画面(一般用于摄像头)。 |
onRoomDestroy | 房间被销毁的回调。 |
API | 描述 |
---|---|
onAnchorEnter | 收到新主播进房通知。 |
onAnchorExit | 收到主播退房通知。 |
onAudienceEnter | 收到观众进房通知。 |
onAudienceExit | 收到观众退房通知。 |
API | 描述 |
---|---|
onRequestJoinAnchor | 主播收到观众连麦请求时的回调。 |
onAnchorAccepted | 主播同意观众的连麦请求。 |
onAnchorRejected | 主播拒绝观众的连麦请求。 |
onKickoutJoinAnchor | 连麦观众收到被踢出连麦的通知。 |
API | 描述 |
---|---|
onRequestRoomPK | 收到请求跨房 PK 通知。 |
onRoomPKAccepted | 主播接受跨房Pk请求。 |
onRoomPKRejected | 主播拒绝跨房Pk请求。 |
onQuitRoomPK | 收到断开跨房 PK 通知。 |
API | 描述 |
---|---|
onRecvRoomTextMsg | 收到文本消息。 |
onRecvRoomCustomMsg | 收到自定义消息。 |
获取 TRTCLiveRoom 单例对象。
static Future<TRTCLiveRoom> sharedInstance()
销毁 TRTCLiveRoom 单例对象。
?销毁实例后,外部缓存的 TRTCLiveRoom 实例无法再使用,需要重新调用 sharedInstance 获取新实例。
static void destroySharedInstance()
TRTCLiveRoom 事件回调,您可以通过 TRTCLiveRoomDelegate 获得 TRTCLiveRoom 的各种状态通知。
void registerListener(VoiceListenerFunc func);
?registerListener 是 TRTCLiveRoom 的代理回调。
移除组件事件监听接口。
void unRegisterListener(VoiceListenerFunc func);
登录。
Future<ActionCallback> login(
int sdkAppId, String userId, String userSig, TRTCLiveRoomConfig config);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
sdkAppId | int | 您可以在实时音视频控制台 >【应用管理】> 应用信息中查看 SDKAppID。 |
userId | String | 当前用户的 ID,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符(-)和下划线(_)。 |
userSig | String | 腾讯云设计的一种安全保护签名,获取方式请参考 如何计算 UserSig。 |
config | TRTCLiveRoomConfig | 全局配置信息,请在登录时初始化,登录之后不可变更。
|
登出。
Future<ActionCallback> logout();
修改个人信息。
Future<ActionCallback> setSelfProfile(String userName, String avatarURL);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
name | String | 昵称。 |
avatarURL | String | 头像地址。 |
创建房间(主播调用)。
Future<ActionCallback> createRoom(int roomId, RoomParam roomParam);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
roomId | int | 房间标识,需要由您分配并进行统一管理。多个 roomID 可以汇总成一个直播间列表,腾讯云暂不提供直播间列表的管理服务,请自行管理您的直播间列表。 |
roomParam | TRTCCreateRoomParam | 房间信息,用于房间描述的信息,例如房间名称,封面信息等。如果房间列表和房间信息都由您的服务器自行管理,可忽略该参数。 |
主播开播的正常调用流程如下:
- 【主播】调用
startCameraPreview()
打开摄像头预览,此时可以调整美颜参数。 - 【主播】调用
createRoom()
创建直播间,房间创建成功与否会通过 ActionCallback 通知给主播。 - 【主播】调用
starPublish()
开始推流。
销毁房间(主播调用)。主播在创建房间后,可以调用该函数来销毁房间。
Future<ActionCallback> destroyRoom();
进入房间(观众调用)。
Future<ActionCallback> enterRoom(int roomId);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
roomId | int | 房间标识。 |
观众观看直播的正常调用流程如下:
- 【观众】向您的服务端获取最新的直播间列表,可能包含多个直播间的 roomID 和房间信息。
- 【观众】观众选择一个直播间,并调用
enterRoom()
进入该房间。 - 【观众】调用
startPlay(userId)
并传入主播的 userId 开始播放。
- 若直播间列表已包含主播端的 userId 信息,观众端可直接调用
startPlay(userId)
即可开始播放。 - 若在进房前暂未获取主播的 userId,观众端在进房后会收到
TRTCLiveRoomDelegate
中的onAnchorEnter(userId)
的事件回调,该回调中携带主播的 userId 信息,再调用startPlay(userId)
即可播放。
离开房间。
Future<ActionCallback> exitRoom();
获取房间列表的详细信息,房间信息是主播在创建 createRoom()
时通过 roomInfo 设置的。
?如果房间列表和房间信息都由您自行管理,可忽略该函数。
Future<RoomInfoCallback> getRoomInfos(List<String> roomIdList);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
roomIdList | List<Integer> | 房间号列表。 |
获取房间内所有的主播列表,enterRoom()
成功后调用才有效。
Future<UserListCallback> getAnchorList();
获取房间内所有的观众信息,enterRoom()
成功后调用才有效。
Future<UserListCallback> getRoomMemberList(int nextSeq)
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
nextSeq | int | 分页拉取标志,第一次拉取填0,回调成功如果 nextSeq 不为零,需要分页,传入再次拉取,直至为0。 |
开启本地视频的预览画面。
Future<void> startCameraPreview(bool isFrontCamera, int viewId);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
isFront | bool | true:前置摄像头;false:后置摄像头。 |
viewId | int | 视频view的回调id。 |
停止本地视频采集及预览。
Future<void> stopCameraPreview();
开始直播(推流),适用于以下场景:
- 主播开播的时候调用
- 观众开始连麦时调用
Future<void> startPublish(String? streamId);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
streamId | String | 用于绑定直播 CDN 的 streamId,如果您希望观众通过直播 CDN 进行观看,需要指定当前主播的直播 streamId。 |
停止直播(推流),适用于以下场景:
- 主播结束直播时调用
- 观众结束连麦时调用
Future<void> stopPublish();
播放远端视频画面,可以在普通观看和连麦场景中调用。
Future<void> startPlay(String userId, int viewId);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 需要观看的用户id。 |
viewId | int | 视频view的回调id。 |
普通观看场景
- 若直播间列表已包含主播端的 userId 信息,观众端可以直接在
enterRoom()
成功后调用startPlay(userId)
播放主播的画面。 - 若在进房前暂未获取主播的 userId,观众端在进房后会收到
TRTCLiveRoomDelegate
中的onAnchorEnter(userId)
的事件回调,该回调中携带主播的 userId 信息,再调用startPlay(userId)
即可播放主播的画面。
直播连麦场景
发起连麦后,主播会收到来自 TRTCLiveRoomDelegate
中的 onAnchorEnter(userId)
回调,此时使用回调中的 userId 调用 startPlay(userId) 即可播放连麦画面。
停止渲染远端视频画面。需在 onAnchorExit()
回调时,调用该接口。
Future<void> stopPlay(String userId);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 对方的用户信息。 |
观众请求连麦。
Future<ActionCallback> requestJoinAnchor();
主播和观众的连麦流程如下:
- 【观众】调用
requestJoinAnchor()
向主播发起连麦请求。 - 【主播】会收到
TRTCLiveRoomDelegate
的onRequestJoinAnchor()
回调通知。 - 【主播】调用
responseJoinAnchor()
决定是否接受来自观众的连麦请求。 - 【观众】会收到 responseCallback 回调通知,该通知会携带主播的处理结果。
- 【观众】如果请求被同意,则调用
startCameraPreview()
开启本地摄像头。 - 【观众】然后调用
startPublish()
正式进入推流状态。 - 【主播】一旦观众进入连麦状态,主播会收到
TRTCLiveRoomDelegate
的onAnchorEnter()
通知。 - 【主播】主播调用
startPlay()
即可看到连麦观众的视频画面。 - 【观众】如果直播间里已有其他观众正在跟主播连麦,新加入的连麦观众会收到
onAnchorEnter()
通知,调用startPlay()
播放其他连麦者的视频画面。
主播处理连麦请求。主播在收到 TRTCLiveRoomDelegate
的 onRequestJoinAnchor()
回调后需要调用此接口来处理观众的连麦请求。
Future<ActionCallback> responseJoinAnchor(String userId, bool agreee);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 观众 ID。 |
agree | bool | true:同意;false:拒绝。 |
主播踢除连麦观众。主播调用此接口踢除连麦观众后,被踢连麦观众会收到 TRTCLiveRoomDelegate
的 onKickoutJoinAnchor()
回调通知。
Future<ActionCallback> kickoutJoinAnchor(String userId);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 连麦观众 ID。 |
主播请求跨房 PK。
Future<ActionCallback> requestRoomPK(int roomId, String userId);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
roomId | int | 被邀约房间 ID。 |
userId | String | 被邀约主播 ID。 |
主播和主播之间可以跨房间 PK,两个正在直播中的主播 A 和 B 之间的跨房 PK 流程如下:
- 【主播 A】调用
requestRoomPK()
向主播 B 发起连麦请求。 - 【主播 B】会收到
TRTCLiveRoomDelegate
的onRequestRoomPK()
回调通知。 - 【主播 B】调用
responseRoomPK()
决定是否接受主播 A 的 PK 请求。 - 【主播 B】如果接受主播 A 的要求,等待
TRTCLiveRoomDelegate
的onAnchorEnter()
通知,然后调用startPlay()
来显示主播 A 的视频画面。 - 【主播 A】会收到
onRoomPKAccepted
或onRoomPKRejected
回调通知。 - 【主播 A】如果请求被同意,等待
TRTCLiveRoomDelegate
的onAnchorEnter()
通知,然后调用startPlay()
显示主播 B 的视频画面。
主播响应跨房 PK 请求。主播响应后,对方主播会收到 requestRoomPK
传入的 responseCallback
回调。
Future<ActionCallback> responseRoomPK(String userId, bool agree);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 发起 PK 请求的主播 ID。 |
agree | bool | true:同意;false:拒绝。 |
退出跨房 PK。PK 中的任何一个主播退出跨房 PK 状态后,另一个主播会收到 TRTCLiveRoomDelegate
的 onQuitRoomPk()
回调通知。
Future<ActionCallback> quitRoomPK();
切换前后摄像头。
Future<void> switchCamera(bool isFrontCamera);
设置是否镜像展示。
Future<void> setMirror(bool isMirror);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
isMirror | bool | 开启/关闭镜像。 |
静音本地音频。
Future<void> muteLocalAudio(bool mute);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
mute | bool | true:开启静音;false:关闭静音。 |
静音远端音频。
Future<void> muteRemoteAudio(String userId, bool mute);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 远端的用户 ID。 |
mute | bool | true:开启静音;false:关闭静音。 |
静音所有远端音频。
Future<void> muteAllRemoteAudio(bool mute);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
mute | bool | true:开启静音;false:关闭静音。 |
获取背景音乐音效管理对象 TXAudioEffectManager。
getAudioEffectManager();
获取美颜管理对象 TXBeautyManager。
getBeautyManager();
通过美颜管理,您可以使用以下功能:
- 设置“美颜风格”、“美白”、“红润”、“大眼”、“瘦脸”、“V脸”、“下巴”、“短脸”、“小鼻”、“亮眼”、“白牙”、“祛眼袋”、“祛皱纹”、“祛法令纹”等美容效果。
- 调整“发际线”、“眼间距”、“眼角”、“嘴形”、“鼻翼”、“鼻子位置”、“嘴唇厚度”、“脸型”。
- 设置人脸挂件(素材)等动态效果。
- 添加美妆。
- 进行手势识别。
在房间中广播文本消息,一般用于弹幕聊天。
Future<ActionCallback> sendRoomTextMsg(String message);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
message | String | 文本消息。 |
发送自定义文本消息。
Future<ActionCallback> sendRoomCustomMsg(String cmd, String message);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
cmd | String | 命令字,由开发者自定义,主要用于区分不同消息类型。 |
message | String | 文本消息。 |
错误回调。
?SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
errCode | int | 错误码。 |
errMsg | String | 错误信息。 |
警告回调。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
warningCode | int | 错误码。 |
warningMsg | String | 警告信息。 |
其他用户登录了同一账号,被踢下线。
房间被销毁的回调。主播退房时,房间内的所有用户都会收到此通知。
本地进房
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
result | int | result > 0 时为进房耗时(ms),result < 0 时为进房错误码 |
远端用户是否存在可播放的主路画面(一般用于摄像头)
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 用户标识 |
available | bool | 画面是否开启 |
收到新主播进房通知。连麦观众和跨房 PK 主播进房后观众会收到新主播的进房事件,您可以调用 TRTCLiveRoom
的 startPlay()
显示该主播的视频画面。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 新进房主播 ID。 |
userName | String | 用户昵称 |
userAvatar | String | 用户头像地址 |
收到主播退房通知。房间内的主播(和连麦中的观众)会收到新主播的退房事件,您可以调用 TRTCLiveRoom
的 stopPlay()
关闭该主播的视频画面。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 退出主播 ID。 |
userName | String | 用户昵称 |
userAvatar | String | 用户头像地址 |
收到观众进房通知。
void onAudienceEnter(TRTCLiveRoomDef.TRTCLiveUserInfo userInfo);
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 进房观众信息 |
userName | String | 用户昵称 |
userAvatar | String | 用户头像地址 |
收到观众退房通知。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 退房观众信息 |
userName | String | 用户昵称 |
userAvatar | String | 用户头像地址 |
主播收到观众连麦请求时的回调。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 请求连麦用户id |
userName | String | 用户昵称 |
userAvatar | String | 用户头像地址 |
主播同意观众的连麦请求。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 主播的用户id |
主播拒绝观众的连麦请求
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 主播的用户id |
连麦观众收到被踢出连麦的通知。连麦观众收到被主播踢除连麦的消息,您需要调用 TRTCLiveRoom
的 stopPublish()
退出连麦。
收到请求跨房 PK 通知。主播收到其他房间主播的 PK 请求,如果同意 PK ,您需要等待 TRTCLiveRoomDelegate
的 onAnchorEnter()
通知,然后调用 startPlay()
来播放邀约主播的流。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 请求跨房用户id |
userName | String | 用户昵称 |
userAvatar | String | 用户头像地址 |
主播接受跨房Pk请求
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 接收跨房PK的用户id |
主播拒绝跨房Pk请求
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
userId | String | 拒绝跨房PK的用户id |
收到断开跨房 PK 通知。
收到文本消息。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
message | String | 文本消息。 |
收到自定义消息。
参数如下表所示:
参数 | 类型 | 含义 |
---|---|---|
command | String | 命令字,由开发者自定义,主要用于区分不同消息类型。 |
message | String | 文本消息。 |