You need to enable JavaScript to run this app.
文档中心
实时音视频

实时音视频

复制全文
下载 pdf
视频互动
场景搭建(Android)
复制全文
下载 pdf
场景搭建(Android)
SDK集成​
如下是一个总体接入流程,详细细节请参见 RTC服务开通指南​
​Image​​
整体实现流程​
主播与主播连麦pk​
​Image​​
主播与观众连麦互动​
​Image​​
核心功能实现​
主播开启直播和观众进房​
时序图​
​Image​​
示例代码​
​
/**​
* 加入RTC房间并初始化参数​
* @param token 加入 RTC 房间的 token​
* @param roomId 加入 RTC 房间的 id​
* @param userId 加入 RTC 房间的 userId​
* @param isHost true:业务上主播 false:业务上观众​
*/​
public void joinRTCRoom(String token, String roomId, String userId, boolean isHost) {​
// 初始化 RTCVideo 对象​
mRTCVideo = RTCVideo.createRTCVideo(applicationContext, appId, mRTCVideoEventHandler, null, null);​
// 初始化 RTCRoom 对象​
mRTCRoom = mRTCVideo.createRTCRoom(roomId);​
mRTCRoom.setRTCRoomEventHandler(mRTCRoomEventHandler);​
// 设置主播为可见,观众为隐身​
mRTCRoom.setUserVisibility(isHost);​
// 加入房间时主播需要开启麦克风、相机,观众需要关闭麦克风、相机​
if (isHost) {​
mRTCVideo.startVideoCapture();​
mRTCVideo.startAudioCapture();​
// 设置本地渲染和编码镜像​
mRTCVideo.setLocalVideoMirrorType(MirrorType.MIRROR_TYPE_RENDER_AND_ENCODER);​
} else {​
mRTCVideo.stopVideoCapture();​
mRTCVideo.stopAudioCapture();​
}​
// 设置音频路由模式​
mRTCVideo.setDefaultAudioRoute(AudioRoute.AUDIO_ROUTE_SPEAKERPHONE);​
// 开启发言者音量监听​
AudioPropertiesConfig audioPropertiesConfig = new AudioPropertiesConfig(300);​
mRTCVideo.enableAudioPropertiesReport(audioPropertiesConfig);​
// 加入房间,开始连麦,需要申请AppId和Token​
UserInfo userInfo = new UserInfo(userId, null);​
RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_INTERACTIVE_PODCAST,​
true, true, true);​
mRTCRoom.joinRoom(token, userInfo, roomConfig);​
}​
​
主播与主播连麦 PK​
时序图​
​Image​​
示例代码​
​
/**​
* 开启跨房间转推​
* @param roomId 对方 RTC 房间的 id​
* @param token 加入对方 RTC 房间所需的 token,有业务服务器生成并下发​
*/​
public void startForwardStream(String roomId, String token) {​
ForwardStreamInfo forwardStreamInfo = new ForwardStreamInfo(roomId, token);​
mRTCRoom.startForwardStreamToRooms(Collections.singletonList(forwardStreamInfo));​
}​
​
private final IRTCRoomEventHandler mRTCRoomEventHandler = new IRTCRoomEventHandler() {​
​
/**​
* 房间内新增远端媒体流流的回调​
* @param uid 用户的用户 ID​
* @param type 远端媒体流的类型​
*/​
@Override​
public void onUserPublishStream(String uid, MediaStreamType type) {​
if (type == MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO) {​
// 只关心有视频的情况​
return;​
}​
TextureView textureView = new TextureView(applicationContext);​
VideoCanvas videoCanvas = new VideoCanvas(textureView,VideoCanvas.RENDER_MODE_HIDDEN);​
RemoteStreamKey streamKey = new RemoteStreamKey(roomId,uid,StreamIndex.STREAM_INDEX_MAIN);​
mRTCVideo.setRemoteVideoCanvas(streamKey,videoCanvas);​
}​
};​
​
/**​
* 结束跨房间转推​
*/​
public void stopForwardStream() {​
mRTCRoom.stopForwardStreamToRooms();​
}​
​
主播与观众连麦互动​
时序图​
​Image​​
示例代码​
​
/**​
* 主播和观众连麦成功​
* @param userId 上麦用户的 ID​
*/​
public void onReceivedJoinInteract(String userId) {​
// loginUserId 是业务上本端登录用户的 id​
if (!TextUtils.equals(userId, loginUserId)) {​
return;​
}​
// 更新 RTC 编码分辨率、帧率、码率,具体数值可以联系技术支持。​
// 参考:https://rtc.topic.bytedance.net/set-video-publish-parameters​
VideoEncoderConfig videoEncoderConfig = new VideoEncoderConfig();​
videoEncoderConfig.width = width;​
videoEncoderConfig.height = height;​
videoEncoderConfig.frameRate = frameRate;​
videoEncoderConfig.maxBitrate = maxBitrate;​
videoEncoderConfig.minBitrate = minBitrate;​
mRTCVideo.setVideoEncoderConfig(videoEncoderConfig);​
// 观众开启相机、麦克风采集​
mRTCVideo.startVideoCapture();​
mRTCVideo.startAudioCapture();​
// 观众设置为可见状态​
mRTCRoom.setUserVisibility(true);​
// 观众开启音视频推流​
mRTCRoom.publishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_BOTH);​
}​
/**​
* 收到观众下麦​
* @param userId userID 下麦用户的 ID​
*/​
public void onReceivedLeaveInteract(String userId) {​
// loginUserId 是业务上本端登录用户的 id​
if (!TextUtils.equals(userId, loginUserId)) {​
return;​
}​
// 观众开启相机、麦克风采集​
mRTCVideo.stopVideoCapture();​
mRTCVideo.stopAudioCapture();​
// 观众设置为隐身状态​
mRTCRoom.setUserVisibility(false);​
// 观众开启音视频推流​
mRTCRoom.unpublishStream(MediaStreamType.RTC_MEDIA_STREAM_TYPE_BOTH);​
}​
​
核心功能 API 与回调参考​
API​
​
​
功能点​
API​
创建 ByteRTCVideo 实例​
createRTCVideo​
创建 ByteRTCRoom 实例​
设置用户可见性​
开启内部视频采集​
关闭内部视频采集​
开启内部音频采集​
关闭内部音频采集​
设置 RTC 编码分辨率等参数​
为采集到的视频流开启镜像​
设置当前音频播放路由​
开启音量信息提示​
加入 RTC 房间​
离开 RTC 房间​
leaveRoom​
销毁房间对象​
在当前所在房间内发布媒体流​
publishStream​
停止媒体流发布到当前所在房间中​
unpublishStream​
开始跨房间转发媒体流​
停止跨房间转发媒体流​
设置本地视频渲染​
设置远端视频渲染​
​
回调​
​
​
功能点​
回调​
本地用户加入 RTC 回调​
远端用户加入 RTC 回调​
本地用户音量回调​
远端用户音量回调​
房间内新增远端媒体流回调​
onUserPublishStream​
跨房间媒体流转发状态和错误回调​
​
​
最近更新时间:2026.09.22 14:41:51
这个页面对您有帮助吗?
有用
有用
无用
无用