# 音频管理
Juphoon音视频能力平台及终端的媒体引擎支持音频质量保障能力,Juphoon RTC SDK提供视频通话过程中访客端实现音频管理的功能。
# 1. 控制音频流上传
通话中的成员可通过调用 enableUploadAudioStream (opens new window) 方法来开启关闭发送本地音频流。
/**
* 开启/关闭发送本地音频流
*
* 通话中调用该方法可开启或关闭发送本地音频流。开启后,通话中的成员将听见本端声音;关闭后,通话中成员将听不见本端声音 <br>
* 通话中调用此方法成功后,服务器会更新状态并同步给通话中所有成员,即所有成员会收到 {@link JRTCGuestCallback#onMemberUpdate onMemberUpdate} 或 {@link JRTCAgentCallback#onMemberUpdate onMemberUpdate} 回调,具体可关注 {@link JRTCRoomParticipant#isAudio audio} 和 {@link JRTCRoomParticipant#isAudio audio} <br>
* 通话中调用此方法不影响接收其他成员的音频流
* @param enable 开启/关闭发送本地音频流
* - true: 开启,即发送本地音频流
* - false: 关闭,即不发送本地音频流
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean enableUploadAudioStream(boolean enable);
通话中成员音频流变化通过实现 JRTCGuestCallback (opens new window) 中的 onMemberUpdate (opens new window) 接口上报。
/**
* 通话中成员属性更新回调
*
* 常用的有 {@link JRTCRoomParticipant.ChangeParam#volume 音量值}、{@link JRTCRoomParticipant.ChangeParam#audio 音频上传状态}、{@link JRTCRoomParticipant.ChangeParam#video 视频上传状态}等。<br>
* 例如当通话中有成员关闭视频传输,通话中所有成员都会收到此回调。
* @param participant 属性更新的成员对象
* @param changeParam 更新的属性对象
*/
void onMemberUpdate(JRTCRoomParticipant participant, ChangeParam changeParam);
示例代码:
// 关闭音频流发送
guest.enableUploadAudioStream(false);
// 开启音频流发送
guest.enableUploadAudioStream(true);
// 通话中其他成员属性更新回调
public void onMemberUpdate(JRTCRoomParticipant part, JRTCRoomParticipant.ChangeParam param) {
if(param.audio){
if(part.isAudio){
//该成员音频流打开
} else{
//该成员音频流关闭
}
}
};
# 2. 自定义音频输入
通话中可以自定义从外部音频文件作为音频源输入,使用场景举例:比如共享本地音频。
/**
* 开始/结束播放本地音频文件作为音频源输入
* @note 如果用户正在通话中,该音频将播放到通话内,通话中所有成员包括自己都能听到
*
* @param enable - true: 开始输入,当输入完成后会收到 {@link JRTCMediaDeviceCallback#onFileAudioInputDidFinish() onFileAudioInputDidFinish} 回调通知
* - false: 结束输入,会收到 {@link JRTCMediaDeviceCallback#onFileAudioInputDidFinish() onFileAudioInputDidFinish} 回调通知
* @param filePath 音频文件路径,支持pcm,wav的格式(需要单声道,采样率16K音频文件)
* @param loop 是否循环播放
* @note 重复调用会覆盖
* @return 接口调用结果
* - true: 接口调用成功,
* - false: 接口调用异常
*/
public abstract boolean enableAudioInputFromFile(boolean enable, String filePath, boolean loop);
/**
* 暂停/继续本地文件音频源输入
*
* @param suspend
* - true 暂停
* - false 继续
* @return 调用是否正常
* - true:正常执行调用流程
* - false:调用异常
*/
public abstract boolean suspendAudioInputFromFile(boolean suspend);
音频输入播放结束(非循环播放结束或者主动停止播放),会收到 JRTCMediaDeviceCallback (opens new window) 的onFileAudioInputFinish (opens new window)回调通知
/**
* 本地文件音频源输入完成回调
*/
void onFileAudioInputDidFinish();
示例代码:
// 开始分享本地文件音频输入到通话内
mediaDevice.enableAudioInputFromFile(true, "/sdcard/1.pcm", true);
mediaDevice.enableAudioInputFromFile(false, "", true);
void onFileAudioInputFinish() {
// 分享本地文件音频输入到通话结束
}
# 3. 本地音频播放
通话中可以播放一段本地音频,使用场景举例:比如播放来电铃声。
/**
* 开始播放音频
*
* - 当播放音频文件完成后会收到 {@link JRTCMediaDeviceCallback#onRingPlayFinish() onRingPlayFinish} 回调通知
* @param filePath 音频文件路径,支持pcm,wav的格式(需要单声道,采样率16K音频文件)
* @param isLoop 是否循环播放
* @return 播放音频结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean startRing(String filePath, boolean isLoop);
/**
* 结束播放音频
*
* - 会收到 {@link JRTCMediaDeviceCallback#onRingPlayFinish() onRingPlayFinish} 回调通知
* @return 关闭音频结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean stopRing();
音频播放结束会收到 JRTCMediaDeviceCallback (opens new window) 的 onRingPlayFinish (opens new window) 回调通知
/**
* 音频播放完成回调
*/
void onRingPlayFinish();
示例代码:
// 开始播放本地音频
mediaDevice.startRing("/sdcard/1.pcm", true);
// 结束播放本地音频
mediaDevice.stopRing();
void onRingPlayFinish() {
// 本地音频播放结束
}
# 4. 音频异常回调
通过实现 JRTCMediaDeviceCallback (opens new window) 的 onAudioError (opens new window) 接口监听音频异常回调,具体原因查看参数 error 描述。
/**
* 音频异常回调
* @param error 报错信息
*/
void onAudioError(String error);
# 5. 开启或关闭本地麦克风的增益
/**
* 开启或关闭本地麦克风的增益(软件增益),默认开启
* @note 需要在建立通话后调用
*
* @param enable 回调对象
*
* @return 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
public abstract boolean enableMicAgc(boolean enable);