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

实时音视频

复制全文
下载 pdf
音频管理
播放音乐文件(混音)
复制全文
下载 pdf
播放音乐文件(混音)
如果你需要在通话过程中播放时长较长的音乐文件或PCM 数据(如背景音乐、伴奏)并将其推送给房间内的其他成员,可使用音乐播放类接口。同一时间,只能播放 4 个音乐文件。​
说明​
若需播放时长小于 20 秒的短音效,请优先使用播放音效文件。​
实现方式​
参考以下顺序,调用 API 实现此功能:​
​
​
调用目标​
非 PCM 音频文件​
PCM 音频文件​
初始化​
getMediaPlayer​
getMediaPlayer​
设置回调句柄​
setEventHandler​
setEventHandler​
启动​
open​
openWithCustomSource​
开始播放​
start​
pushExternalAudioFrame​
结束​
stop​
stop​
​
创建引擎​
创建音视频引擎类后,你可以通过调用 getMediaPlayer,传入播放器 ID 创建一个音乐播放器类。​
如果你需要将音频发送到远端,还需要加入房间并发布音频流,参考 构建 RTC 应用 获取详细步骤。​
​
Java
Swift
CPP
​
​
// 创建引擎​
EngineConfig config = new EngineConfig();​
config.appID = appId;​
config.context = applicationContext;​
rtcVideo = RTCEngine.createRTCEngine(config, rtcVideoEventHandler);​
// 开启本地音频采集​
rtcVideo.startAudioCapture();​
//播放非 PCM 文件​
mediaPlayer = rtcVideo.getMediaPlayer(PLAYER_ID);​
​
​
设置回调​
你可以通过回调感知音乐的播放状态和播放位置。​
​
Java
Swift
CPP
​
​
// handler 建议使用强引用​
mediaPlayer.setEventHandler(playerEventHandler);​
​
​
播放非 PCM 文件(mp3/aac 等)​
对同一个音频文件进行操作时,混音 ID 应保持一致。​
打开音乐文件​
​
Java
Swift
CPP
​
​
private void openMedia(String filePath) {​
MediaPlayerConfig playerConfig = new MediaPlayerConfig();​
playerConfig.startPos = 0;​
// autoPlay=true时自动播放,无需再调用 start 接口​
// autoPlay=false时,不自动播放,需要调用 start 接口​
playerConfig.autoPlay = false;​
playerConfig.playCount = 1; // 播放次数​
playerConfig.type = AudioMixingType.AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH;​
playerConfig.callbackOnProgressInterval = 500;​
mediaPlayer.open(filePath, playerConfig);​
}​
​
​
手动播放​
已经调用 open,且 auto_play = false 时,需要调用 start 播放音乐。​
​
Java
Swift
CPP
​
​
mediaPlayer.start();​
​
​
停止播放​
如果你需要在播放中主动终止播放,可以调用 stop 方法。​
​
Java
Swift
CPP
​
​
mediaPlayer.stop();​
​
​
暂停/恢复音乐​
​
Java
Swift
CPP
​
​
mediaPlayer.pause();​
mediaPlayer.resume();​
​
​
获取和设置音乐属性​
所有的混音相关设置都必须在开始播放以后,停止播放之前进行,否则不生效,包括但不限于设置播放起始位置等。​
​
Java
Swift
CPP
​
​
// 获取音量​
float volume = mediaPlayer.getVolume();​
// 设置音量​
mediaPlayer.setVolume(volume, AudioMixingType.AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH);​
​
// 文件总时长,单位 ms​
int totalTime = mediaPlayer.getTotalDuration();​
// 播放时长,单位 ms​
int playbackDuration = mediaPlayer.getPlaybackDuration();​
// 播放位置,单位 ms​
int currentPosition = mediaPlayer.getPosition();​
// 设置起播位置,单位 ms​
mediaPlayer.setPosition(position);​
​
// 音轨​
int trackCount = mediaPlayer.getAudioTrackCount();​
// 选择播放指定的音轨音乐​
mediaPlayer.selectAudioTrack(trackIndex);​
​
// 播放速度,单位:%,取值范围为[50, 200],默认值为100​
mediaPlayer.setPlaybackSpeed(speed);​
​
​
播放 PCM 文件​
启动混音​
在调用 openWithCustomSource 启动混音前,可以进行初始化设置,包括是否自动播放、播放次数等。​
​
Java
Swift
CPP
​
​
private void startPlayPCM() {​
openFile(pcmPath);​
​
MediaPlayerCustomSource source = new MediaPlayerCustomSource();​
source.mode = MediaPlayerCustomSourceMode.PUSH;​
source.type = MediaPlayerCustomSourceStreamType.RAW;​
source.provider = null;​
​
MediaPlayerConfig playerConfig = new MediaPlayerConfig();​
playerConfig.startPos = 0;​
// autoPlay=true时自动播放,无需再调用 start 接口​
// autoPlay=false时,不自动播放,需要调用 start 接口​
playerConfig.autoPlay = true;​
playerConfig.playCount = 1;​
playerConfig.type = AudioMixingType.AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH;​
playerConfig.callbackOnProgressInterval = 500;​
​
pcmPlayer.openWithCustomSource(source, playerConfig);​
startPushPCM();​
}​
​
​
推送音频数据​
调用 pushExternalAudioFrame 向 RTC 推送音频数据前,你需要按照 RTC SDK 要求对数据进行处理。以下代码片段以示例项目中提供的 PCM 音频文件为例,说明数据的格式要求。​
​
Java
Swift
CPP
​
​
Runnable pushAudioFrameTask = new Runnable() {​
@Override​
public void run() {​
// 每10ms的数据大小​
int size = 16 * 10;​
if (isFirstPush) {​
// 建议第一次时传入 200ms 的缓冲数据,避免噪音​
size = size * 20;​
isFirstPush = false;​
}​
ByteBuffer pushBuffer = ByteBuffer.allocate(size * 2);​
AudioFrame audioFrame = new AudioFrame();​
audioFrame.channel = AudioChannel.AUDIO_CHANNEL_MONO;​
audioFrame.sampleRate = AudioSampleRate.AUDIO_SAMPLE_RATE_16000;​
audioFrame.samples = size;​
​
int nRead = 0;​
if (fileData != null) {​
nRead = Integer.min(size * 2, fileDataBufferSize - fileDataOffset);​
pushBuffer.put(fileData, fileDataOffset, nRead);​
fileDataOffset += nRead;​
}​
Log.i(TAG, "offset:" + fileDataOffset + " read:" + nRead);​
if (nRead == 0) {​
stopPlayPCM();​
return;​
}​
audioFrame.buffer = pushBuffer.array();​
pcmPlayer.pushExternalAudioFrame(audioFrame);​
}​
};​
​
​
结束混音​
如果你需要在播放中主动终止播放,可以调用 stop 方法。​
​
Java
Swift
CPP
​
​
pcmPlayer.stop();​
​
​
调整混音音量​
音量设置必须在开始播放以后,停止播放之前进行,否则不生效。​
通过 setVolume 接口逐个指定混音音量。​
​
Java
Swift
CPP
​
​
pcmPlayer.setVolume(volume, AudioMixingType.AUDIO_MIXING_TYPE_PLAYOUT_AND_PUBLISH);​
​
​
示例项目​
API 参考​
说明:表格中的 macOS API 接口为 Objective-C,而示例项目中的 macOS 项目使用的是 Windows SDK 中的 API 接口。​
​
​
​
变更日志​
  • SDK 3.54:Native 平台废弃原有的混音类,分为音效混音和音乐混音,支持分别控制。​
  • SDK 3.52:支持混音播放 24kHz 的 mp3 文件。3.52 之前版本仅支持以下采样率的音乐文件:8kHz、16kHz、22.05kHz、32kHz、44.1kHz、48kHz、64kHz、96kHz、192kHz。​
  • SDK 3.45.4:支持获取混音音频文件的实际播放时长,即歌曲不受停止、跳转、倍速、卡顿影响的播放时长。​
  • SDK 3.38:支持调整音视频通话中使用的音乐文件的播放速度。​
  • SDK 3.36:全平台支持在线音频文件混音。​
  • SDK 3.32:支持设置音乐文件的声道。​
​
最近更新时间:2026.10.15 14:32:24
这个页面对您有帮助吗?
有用
有用
无用
无用