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

实时音视频

复制全文
下载 pdf
一起看直播
场景搭建(Android)
复制全文
下载 pdf
场景搭建(Android)
SDK集成​
为了保证最佳体验效果,本场景需要集成火山引擎的RTC SDK 以及火山直播播放器(建议)。您需要在 RTC、直播的控制台开通服务,相应开通指南如下:​
1、RTC SDK总体接入流程,详细细节请参见 RTC服务开通指南​
​Image​​
2、直播播放器接入流程,详细步骤请参见接入流程​
您也可使用原有三方直播播放器来实现,但为保障最佳体验,需实现音频托管功能,具体可与火山技术支持同学联系;​
整体实现流程​
整体业务流程图​
​Image​​
核心功能实现​
创建/加入房间​
时序图​
​Image​​
示例代码​
​
/**​
* 加入RTC房间并初始化参数 ​
* @param token 加入 RTC 房间的 token​
* @param roomId 加入 RTC 房间的 id​
* @param userId 加入 RTC 房间的 用户id​
*/​
public void joinRTCRoom(String token, String roomId, String userId) {​
// 初始化 RTCVideo 对象​
mRTCVideo = RTCVideo.createRTCVideo(applicationContext, appId, mIRTCVideoEventHandler, null, null);​
​
// 初始化 RTCRoom 对象​
mRTCRoom = mRTCVideo.createRTCRoom(roomId);​
mRTCRoom.setRTCRoomEventHandler(mIRTCRoomEventHandler);​
​
// 设置可见​
mRTCRoom.setUserVisibility(true);​
​
// 加入房间时需要开启麦克风、相机,观众需要关闭麦克风、相机​
mRTCVideo.startVideoCapture();​
mRTCVideo.startAudioCapture();​
​
// 设置本地渲染和编码镜像​
mRTCVideo.setLocalVideoMirrorType(MirrorType.MIRROR_TYPE_RENDER_AND_ENCODER);​
​
// 绑定本地预览视图​
TextureView view = new TextureView(Utilities.getApplicationContext());​
VideoCanvas videoCanvas = new VideoCanvas(view, VideoCanvas.RENDER_MODE_HIDDEN);​
mRTCVideo.setLocalVideoCanvas(StreamIndex.STREAM_INDEX_MAIN, videoCanvas);​
​
// 设置音频场景类型​
mRTCVideo.setAudioScenario(AudioScenarioType.AUDIO_SCENARIO_COMMUNICATION);​
​
// 开启发言者音量监听​
AudioPropertiesConfig audioPropertiesConfig = new AudioPropertiesConfig(300);​
mRTCVideo.enableAudioPropertiesReport(audioPropertiesConfig);​
​
// 加入房间,开始连麦,需要申请AppId和Token​
UserInfo userInfo = new UserInfo(userId, null);​
RTCRoomConfig roomConfig = new RTCRoomConfig(ChannelProfile.CHANNEL_PROFILE_LW_TOGETHER,​
true, true, true);​
mRTCRoom.joinRoom(token, userInfo, roomConfig);​
}​
​
​
private final IRTCVideoEventHandler mIRTCVideoEventHandler = new IRTCVideoEventHandler() {​
/**​
* 本地用户音量回调​
*/​
@Override​
public void onLocalAudioPropertiesReport(LocalAudioPropertiesInfo[] audioPropertiesInfos) {​
super.onLocalAudioPropertiesReport(audioPropertiesInfos);​
}​
/**​
* 远端用户音量回调​
*/​
@Override​
public void onRemoteAudioPropertiesReport(RemoteAudioPropertiesInfo[] audioPropertiesInfos, int totalRemoteVolume) {​
super.onRemoteAudioPropertiesReport(audioPropertiesInfos, totalRemoteVolume);​
}​
};​
​
private final IRTCRoomEventHandler mIRTCRoomEventHandler = new IRTCRoomEventHandler() {​
/**​
* 收到 RTC 加入房间结果​
*/​
@Override​
public void onRoomStateChanged(String roomId, String uid, int state, String extraInfo) {​
super.onRoomStateChanged(roomId, uid, state, extraInfo);​
}​
​
/**​
* 远端用户加入房间回调​
*/​
@Override​
public void onUserJoined(UserInfo userInfo, int elapsed) {​
super.onUserJoined(userInfo, elapsed);​
}​
​
/**​
* 房间内新增远端摄像头/麦克风采集的媒体流的回调​
*/​
@Override​
public void onUserPublishStream(String uid, MediaStreamType type) {​
super.onUserPublishStream(uid, type);​
if (type == MediaStreamType.RTC_MEDIA_STREAM_TYPE_AUDIO) {​
return;​
}​
// 绑定远端用户视频视图 ​
TextureView view = new TextureView(Utilities.getApplicationContext());​
VideoCanvas videoCanvas = new VideoCanvas(view, VideoCanvas.RENDER_MODE_HIDDEN);​
RemoteStreamKey streamKey = new RemoteStreamKey(mRoomId,uid,StreamIndex.STREAM_INDEX_MAIN);​
mRTCVideo.setRemoteVideoCanvas(streamKey, videoCanvas);​
}​
}​
​
一起看直播​
房主发起一起看直播,观众侧同步进入一起看直播。房主、观众各自通过直播播放器拉取同一个直播流观看。​
注意:播放器接入及详细使用,请参考视频直播拉流 SDK​
时序图​
​Image​​
示例代码​
​
/**​
* 开启PCM混音​
*/​
public void startAudioMixing(int playerId){​
IMediaPlayer player = mEngine.getMediaPlayer(playerId);​
MediaPlayerCustomSource source = new MediaPlayerCustomSource(null, MediaPlayerCustomSourceMode.PUSH, MediaPlayerCustomSourceStreamType.RAW);​
player.openWithCustomSource(source, new MediaPlayerConfig(AudioMixingType.AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH, 1));​
}​
​
/** ​
* 播放器音频数据回调,推送音频数据到RTC​
*/​
public void pushAudioMixingFrame(int playerId, byte[] pcm, int samples, AudioSampleRate sampleRate, AudioChannel channel){​
// 获取RTC混音播放器​
IMediaPlayer player = mEngine.getMediaPlayer(playerId);​
// 构造音频帧​
AudioFrame frame = new AudioFrame(pcm, samples, sampleRate, channel);​
// 将播放器回调出的数据送入RTC播放​
player.pushExternalAudioFrame(frame);​
}​
​
/**​
* 关闭PCM混音​
*/​
public void stopAudioMixing(int playerId) {​
// 获取RTC混音播放器​
IMediaPlayer player = mEngine.getMediaPlayer(playerId);​
// 关闭混音​
player.stop();​
}​
​
控制台​
​Image​​
示例代码​
​
/** ​
* 打开/关闭音量闪避功能。 ​
* 开启该功能后,当检测到远端人声时,RTC 的本地的媒体播放音量会自动减弱,从而保证远端人声的清晰可辨;当远端人声消失时,RTC 的本地媒体音量会恢复到闪避前的音量水平。​
* @param enable 是否开启音量闪避​
*/​
public void enablePlaybackDucking(boolean enable) {​
mRTCVideo.enablePlaybackDucking(enable);​
}​
​
/** ​
* 调节混音的音量大小,包括音频文件混音和 PCM 混音。​
* @param playerId 混音播放器 ID​
* @param volume 混音音量相对原音量的比值。范围为 `[0, 400]`,建议范围是 `[0, 100]`。​
*/​
public void setAudioMixingVolume(int playerId, int volume) {​
IMediaPlayer player = mEngine.getMediaPlayer(playerId);​
player.setVolume(volume, AudioMixingType.AUDIO_MIXING_TYPE_PLAYOUT);​
}​
​
/** ​
* 调节本地播放的所有远端用户混音后的音量。播放音频前或播放音频时,你都可以使用此接口设定播放音量。​
* @param volume 音频播放音量值和原始音量的比值,范围是 [0, 400],单位为 %,自带溢出保护。​
*/​
public void setPlaybackVolume(int volume) {​
mRTCVideo.setPlaybackVolume(volume);​
}​
​
核心功能 API 与回调参考​
​
​
功能点​
API​
创建 RTCVideo 对象​
createRTCVideo​
创建 RTCRoom 对象​
设置用户可见性​
设置本地渲染和编码镜像​
设置本地视频渲染视图​
设置音频场景类型​
启用音频信息提示​
开启本地音频采集​
开启本地视频采集​
加入RTC 房间​
设置远端用户视频渲染视图​
开启PCM 音频数据混音​
推送 PCM 音频帧数据用于混音​
调节混音的音量大小​
调节远端用户用通话音量​
打开音量闪避功能​
离开房间​
leaveRoom​
销毁 RTCRoom 对象​
关闭内部音频采集​
关闭内部视频采集​
销毁 RTCVideo 对象​
destroy​
​
​
​
功能点​
回调​
本地用户加入 RTC 房间回调​
音频播放路由变化回调​
本地音频的相关信息回调​
订阅的远端用户的音频信息回调​
远端用户加入 RTC 房间回调​
房间内新增远端摄像头/麦克风采集的媒体流回调​
onUserPublishStream​
​
​
最近更新时间:2026.09.22 14:41:51
这个页面对您有帮助吗?
有用
有用
无用
无用