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