Android语音SDK接入说明

1 文挡说明

1.1 功能描述

本文档旨在说明龙图BaseSDK版本语音功能说明。
本文的所述接口需要在接入龙图BaseSDK,并经过打包工具打包之后才可以使用。
语音功能的正常使用需要在游戏角色登陆成功之后才可以使用。
语音功能的接口皆需要在主线程调用。

1.2 阅读范围

本文档适用于SDK 接入人员阅读

1.3 使用说明

SDK语音功能封装了腾讯语音接口,以方便开发者接入。

2 离线语音接口使用说明

2.1 开始录音接口

  1. /**
  2. * 开始录音接口
  3. * 此接口完成的回调中会返回地址fileId及转换的文字text
  4. */
  5. public void LTBaseStartRecordingWithStreamingRecognition();

2.1.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseStartRecordingWithStreamingRecognition();

2.2 停止录音接口

  1. /**
  2. * 停止录音接口
  3. */
  4. public void LTBaseStopRecording();

2.2.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseStopRecording();

2.3 播放录音接口

  1. /**
  2. * 播放录音接口
  3. * @param fileId 录音完成以后SDK返回的fileid
  4. */
  5. public void LTBasePlayRecordedFile(String fileId);

2.3.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePlayRecordedFile(fileId);
参数 类型 说明 是否必传
fileId String 录音地址,可在录音完成回调中拿到 必传

2.4 播放变声录音接口

  1. /**
  2. * 播放变声录音接口
  3. * @param fileId 录音完成以后SDK返回的fileid
  4. * @param voiceType 变声参数
  5. */
  6. public void LTBasePlayRecordedFileVoice(String fileId, int voiceType);

2.4.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePlayRecordedFileVoice(fileId, voiceType);
参数 类型 说明 是否必传
fileId String 录音地址,可在录音完成回调中拿到 必传
voiceType int 变声参数,可在下表中获取 必传

变声参数如下:

参数名 效果说明 参数值
LTBaseParam.LTGame_VOICE_TYPE_ORIGINAL_SOUND 原声 0
LTBaseParam.LTGame_VOICE_TYPE_LOLITA 萝莉音 1
LTBaseParam.LTGame_VOICE_TYPE_UNCLE 大叔音 2
LTBaseParam.LTGame_VOICE_TYPE_INTANGIBLE 空灵 3
LTBaseParam.LTGame_VOICE_TYPE_DEAD_FATBOY 死肥宅 4
LTBaseParam.LTGame_VOICE_TYPE_HEAVY_MENTAL 重金属 5
LTBaseParam.LTGame_VOICE_TYPE_DIALECT 歪果仁 6
LTBaseParam.LTGame_VOICE_TYPE_INFLUENZA 感冒 7
LTBaseParam.LTGame_VOICE_TYPE_CAGED_ANIMAL 困兽 8
LTBaseParam.LTGame_VOICE_TYPE_HEAVY_MACHINE 重机器 9
LTBaseParam.LTGame_VOICE_TYPE_STRONG_CURRENT 强电流 10
LTBaseParam.LTGame_VOICE_TYPE_KINDER_GARTEN 幼稚园 11
LTBaseParam.LTGame_VOICE_TYPE_HUANG 小黄人 12

2.5 停止播放语音接口

  1. /**
  2. * 停止播放语音接口
  3. * 此接口用于停止播放语音。停止播放语音也会有播放完成的回调。
  4. */
  5. public void LTBaseStopPlayFile;

2.5.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseStopPlayFile();

2.6 取消录音接口

  1. /**
  2. * 取消录音接口
  3. * 调用此接口取消录音。取消之后没有回调。
  4. */
  5. public void LTBaseStopPlayFile;

2.6.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseCancelRecording();

2.7 语音回调通知接口

  1. /**
  2. * @param ltMultiMediaCallback 需要实现的回调
  3. */
  4. public void LTBaseMultiMediaListener(LTMultiMediaCallback ltMultiMediaCallback);

2.7.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaListener(new LTMultiMediaCallback() {
  2. @Override
  3. public void LTBaseMultiMediaSuccess(int i, Intent intent) {
  4. final Intent data = intent;
  5. switch (i) {
  6. case LTBaseParam.CODE_PTT_STREAMINGRECOGNITION_SUCCESS: {
  7. //语音转文字识别的文本
  8. String textString = data.getStringExtra("text");
  9. //录音在后台的 url 地址,录音在服务器存放90天
  10. String fileId = data.getStringExtra("file_id");
  11. //录音存放的本地地址
  12. String filePath = data.getStringExtra("file_path");
  13. Toast.makeText(mMainActivity, "录音成功", Toast.LENGTH_LONG).show();
  14. break;
  15. }
  16. case LTBaseParam.CODE_PTT_STREAMINGRECOGNITION_FAIL: {
  17. Log.d(TAG, "录音失败");
  18. Toast.makeText(mMainActivity, "录音失败", Toast.LENGTH_LONG).show();
  19. break;
  20. }
  21. case LTBaseParam.CODE_PTT_PLAY_SUCCESS: {
  22. Log.d(TAG, "播放语音成功");
  23. break;
  24. }
  25. case LTBaseParam.CODE_PTT_PLAY_FAIL: {
  26. Log.d(TAG, "播放语音失败");
  27. break;
  28. }
  29. }
  30. }
  31. @Override
  32. public void LTBaseMultiMediaFail(int i, String s) {
  33. Log.d(TAG, "语音SDK异常");
  34. }
  35. });
参数 类型 说明
LTBaseParam.CODE_PTT_STREAMINGRECOGNITION_SUCCESS int 录音成功
LTBaseParam.CODE_PTT_STREAMINGRECOGNITION_FAIL int 录音失败
LTBaseParam.CODE_PTT_PLAY_SUCCESS int 播放录音成功
LTBaseParam.CODE_PTT_PLAY_FAIL int 播放录音失败

2.8 获取录音时长接口

  1. /**
  2. * 获取录音文件的时长 单位:毫秒
  3. * @param filePath 录音本地存储路径 录音完成以后SDK返回的filePath
  4. */
  5. public int LTVoiceGetVoiceFileDuration(String filePath);

2.8.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTVoiceGetVoiceFileDuration(filePath);
参数 类型 说明 是否必传
filePath String 录音本地地址,可在录音完成回调中拿到 必传

2.9 获取语音消息麦克风实时音量接口

  1. /**
  2. * 获取语音消息麦克风实时音量接口
  3. * 此接口用于获取麦克风实时音量,返回值为 int 类型,值域为0到100。
  4. */
  5. public int LTBasePttGetMicLevel();

2.9.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePttGetMicLevel();

2.10 设置语音消息录制音量接口

  1. /**
  2. * 设置语音消息录制音量接口
  3. * 此接口用于设置离线语音录制音量,值域为0到200。
  4. * 设置小于100相当于音量缩小,100为音量不增不减,大于100为扩大音量,最高200音量扩大4倍
  5. */
  6. public void LTBasePttSetMicVolume(int volume);

2.10.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePttSetMicVolume(int volume);

2.11 获取语音消息录制音量接口

  1. /**
  2. * 获取语音消息录制音量接口
  3. * 此接口用于获取离线语音录制音量。返回值为 int 类型,值域为0到200。
  4. */
  5. public int LTBasePttGetMicVolume();

2.11.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePttGetMicVolume();

2.12 获取语音消息扬声器实时音量接口

  1. /**
  2. * 获取语音消息扬声器实时音量接口
  3. * 此接口用于获取扬声器实时音量。返回值为 int 类型,值域为0到100。
  4. */
  5. public int LTBasePttGetSpeakerLevel();

2.12.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePttGetSpeakerLevel();

2.13 设置语音消息播放音量接口

  1. /**
  2. * 设置语音消息播放音量接口
  3. * 此接口用于设置离线语音播放音量,值域为0到200。
  4. * 设置小于100相当于音量缩小,100为音量不增不减,大于100为扩大音量,最高200音量扩大4倍
  5. */
  6. public void LTBasePttSetSpeakerVolume(int volume);

2.13.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePttSetSpeakerVolume(int volume);

2.14 获取语音消息播放音量接口

  1. /**
  2. * 获取语音消息播放音量接口
  3. * 此接口用于获取离线语音播放音量。返回值为 int 类型,值域为0到200。
  4. */
  5. public int LTBasePttGetSpeakerVolume();

2.14.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBasePttGetSpeakerVolume();

3 实时语音接口使用说明

3.1 进入房间接口

说明:实时语音相关接口的调用都需要以进入房间为基础

  1. /**
  2. * 实时语音需要先进入房间,进入房间默认不打开麦克风和扬声器
  3. * @param roomId 房间号 最大支持127字符
  4. * @param roomType 音质类型(延时高低区别) LTBaseParam.CODE_ROOM_TYPE_FLUENCY:流畅音质
  5. * LTBaseParam.CODE_ROOM_TYPE_STANDARD:标准音质 LTBaseParam.CODE_ROOM_TYPE_HIGHQUALITY:高清音质
  6. * 音质类型游戏类应用建议 1:流畅音质
  7. * 进入房间事件回调通过回调通知接口返回
  8. * 回调事件为:LTBaseParam.CODE_ROOM_ENTERROOM_SUCCESS 进入房间成功
  9. * LTBaseParam.CODE_ROOM_ENTERROOM_FAIL 进入房间失败
  10. */
  11. public void LTBaseMultiMediaEnterRoom(String roomId, int roomType);

3.1.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnterRoom(String roomId, int roomType);

3.1.2 带鉴权进入房间接口

说明:实时语音相关接口的调用都需要以进入房间为基础
非特殊需求不需使用此接口

  1. /**
  2. * 实时语音需要先进入房间,进入房间默认不打开麦克风和扬声器
  3. * @param roomId 房间号 最大支持127字符
  4. * @param roomType 音质类型(延时高低区别)
  5. * @param authBuffer 鉴权码(用于相关功能的加密和鉴权)
  6. * LTBaseParam.CODE_ROOM_TYPE_FLUENCY:流畅音质
  7. * LTBaseParam.CODE_ROOM_TYPE_STANDARD:标准音质 LTBaseParam.CODE_ROOM_TYPE_HIGHQUALITY:高清音质
  8. * 音质类型游戏类应用建议 1:流畅音质
  9. * 进入房间事件回调通过回调通知接口返回
  10. * 回调事件为:LTBaseParam.CODE_ROOM_ENTERROOM_SUCCESS 进入房间成功
  11. * LTBaseParam.CODE_ROOM_ENTERROOM_FAIL 进入房间失败
  12. */
  13. public void LTBaseMultiMediaEnterRoom(String roomId, int roomType, byte[] authBuffer);

3.2 判断是否进房接口

  1. /**
  2. * 判断是否已经进入房间
  3. * @return true:已经进入房间 false:未进入房间
  4. */
  5. public boolean LTBaseMultiMediaIsRoomEntered();

3.2.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaIsRoomEntered();

3.3 退出房间接口

  1. /**
  2. * 实时语音,退出房间
  3. * 退出房间事件回调通过回调通知接口返回
  4. * 回调事件为:LTBaseParam.CODE_ROOM_EXITROOM_SUCCESS
  5. */
  6. public void LTBaseMultiMediaExitRoom();

3.3.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaExitRoom();

3.4 修改用户房间音频类型接口

  1. /**
  2. * 修改用户房间音频类型 类型参考进入房间接口
  3. * 修改事件回调通过回调通知接口返回
  4. * 回调事件为:LTBaseParam.CODE_ROOM_CHANGEROOMTYPE_COMPLETE
  5. */
  6. public void LTBaseMultiMediaChangeRoomType(int roomType);

3.4.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaChangeRoomType(int roomType);

3.5 获取用户房间音频类型接口

  1. /**
  2. * 获取用户房间音频类型
  3. * @return 类型参考进入房间接口 返回0时代表获取用户房间音频类型发生错误
  4. */
  5. public int LTBaseMultiMediaGetRoomType();

3.5.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetRoomType();

3.6 开启关闭麦克风接口

  1. /**
  2. * 开启关闭麦克风
  3. * @param isEnableMic true:打开 false:关闭
  4. */
  5. public void LTBaseMultiMediaEnableMic(boolean isEnableMic);

3.6.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableMic(boolean isEnableMic);

3.7 获取麦克风状态接口

  1. /**
  2. * 获取麦克风状态
  3. * @return 0:关闭 1:打开
  4. */
  5. public int LTBaseMultiMediaGetMicState();

3.7.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetMicState();

3.8 设置麦克风音量接口

  1. /**
  2. * 设置麦克风的音量
  3. * 当数值为0的时候表示静音,当数值为100 的时候表示音量不增不减,默认数值为100
  4. * 范围0-200
  5. */
  6. public void LTBaseMultiMediaSetMicVolume(int volume);

3.8.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaSetMicVolume(int volume);

3.9 获取麦克风音量接口

  1. /**
  2. * 获取麦克风的音量
  3. * @return 返回值为一个int类型数值,返回值为101代表没调用过接口 LTBaseMultiMediaSetMicVolume
  4. */
  5. public int LTBaseMultiMediaGetMicVolume();

3.9.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetMicVolume();

3.10 开启关闭扬声器接口

  1. /**
  2. * 开启关闭扬声器
  3. * @param isEnableSpeaker true:开启 false:关闭
  4. */
  5. public void LTBaseMultiMediaEnableSpeaker(boolean isEnableSpeaker);

3.10.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableSpeaker(boolean isEnableSpeaker);

3.11 扬声器状态获取接口

  1. /**
  2. * 扬声器状态获取
  3. * @return 0:关闭 1:打开 2:设备正在操作中
  4. */
  5. public int LTBaseMultiMediaGetSpeakerState();

3.11.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetSpeakerState();

3.12 设置扬声器音量接口

  1. /**
  2. * 设置扬声器的音量
  3. * 当数值为0时,表示静音,当数值为100时,表示音量不增不减,默认数值为 100
  4. * @param volume 范围为0-200
  5. */
  6. public void LTBaseMultiMediaSetSpeakerVolume(int volume);

3.12.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaSetSpeakerVolume(int volume);

3.13 获取扬声器音量接口

  1. /**
  2. * 获取扬声器的音量
  3. * @return 返回值为101代表没调用过接口 LTBaseMultiMediaSetSpeakerVolume
  4. */
  5. public int LTBaseMultiMediaGetSpeakerVolume();

3.13.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetSpeakerVolume();

3.14 房间成员变化

  1. /**
  2. * 此功能无需接口调用,房间成员的变化通过回调通知接口返回
  3. * 具体参考回调通知接口LTBaseParam.CODE_ROOM_USERROOM_ENTER;
  4. * LTBaseParam.CODE_ROOM_USERROOM_EXIT
  5. */

3.15 因为网络原因断开消息

  1. /**
  2. * 此功能无需接口调用,消息通过回调通知接口返回
  3. * 具体参考回调通知接口LTBaseParam.CODE_ROOM_CHANGEROOMTYPE_COMPLETE
  4. */

3.16 房间通话质量监控事件

  1. /**
  2. * 此功能无需接口调用,消息通过回调通知接口返回
  3. * 具体参考回调通知接口LTBaseParam.CODE_ROOM_QUALITY
  4. */

3.17 采集设备状态获取接口

  1. /**
  2. * 采集设备状态获取
  3. * @return true:打开 false:关闭
  4. */
  5. public boolean LTBaseMultiMediaGetAudioCaptureDeviceState();

3.17.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetAudioCaptureDeviceState();

3.18 开启关闭采集设备接口

  1. /**
  2. * 开启关闭采集设备
  3. * @param isEnableAudioCaptureDevice true:打开 false:关闭
  4. */
  5. public void LTBaseMultiMediaEnableAudioCaptureDevice(boolean isEnableAudioCaptureDevice);

3.18.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableAudioCaptureDevice(
  2. boolean isEnableAudioCaptureDevice);

3.19 音频上行状态获取接口

  1. /**
  2. * 音频上行状态获取
  3. * @return true:打开 false:关闭
  4. */
  5. public boolean LTBaseMultiMediaGetAudioSendEnabledState();

3.19.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetAudioSendEnabledState();

3.20 打开关闭音频上行接口

  1. /**
  2. * 打开关闭音频上行
  3. * @param isEnableAudioSend true:打开 false:关闭
  4. */
  5. public void LTBaseMultiMediaEnableAudioSend(boolean isEnableAudioSend);

3.20.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableAudioSend(
  2. boolean isEnableAudioSend);

3.21 麦克风实时音量接口

  1. /**
  2. * 获取麦克风实时音量,返回值为 int 类型。建议 20ms 获取一次
  3. */
  4. public int LTBaseMultiMediaGetMicLevel();

3.21.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetMicLevel();

3.22 音频上行实时音量接口

  1. /**
  2. * 获取音频上行实时音量 返回值为 int 类型,取值范围为0到100
  3. */
  4. public int LTBaseMultiMediaGetSendStreamLevel();

3.22.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetSendStreamLevel();

3.23 开启关闭播放设备接口

  1. /**
  2. * 开启关闭播放设备
  3. * @param isEnableAudioPlayDevice true:打开 false:关闭
  4. */
  5. public void LTBaseMultiMediaEnableAudioPlayDevice(boolean isEnableAudioPlayDevice);

3.23.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableAudioPlayDevice(
  2. boolean isEnableAudioPlayDevice);

3.24 播放设备状态获取接口

  1. /**
  2. * 播放设备状态获取
  3. * @return true:打开 false:关闭
  4. */
  5. public boolean LTBaseMultiMediaGetAudioPlayDeviceState();

3.24.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetAudioPlayDeviceState();

3.25 打开关闭音频下行接口

  1. /**
  2. * 打开关闭音频下行
  3. * 如果播放设备已经打开,那么会播放房间里其他人的音频数据。如果播放设备没有打开,那么仍旧 * 无声
  4. * @param isEnableAudioRecv true:打开 false:关闭
  5. */
  6. public void LTBaseMultiMediaEnableAudioRecv(boolean isEnableAudioRecv);

3.25.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableAudioRecv(
  2. boolean isEnableAudioRecv);

3.26 音频下行状态获取接口

  1. /**
  2. * 音频下行状态获取
  3. * @return true:打开 false:关闭
  4. */
  5. public boolean LTBaseMultiMediaGetAudioRecvState();

3.26.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetAudioRecvState();

3.27 扬声器实时音量接口

  1. /**
  2. * 获取扬声器实时音量
  3. * 返回值为 int 类型数值,表示扬声器实时音量。建议 20ms 获取一次
  4. */
  5. public int LTBaseMultiMediaGetSpeakerLevel();

3.27.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetSpeakerLevel();

3.28 获取房间内其他成员下行实时音量接口

  1. /**
  2. * 获取房间内其他成员下行实时音量
  3. * 返回值为 int 类型,取值范围为0到100
  4. * @param openId 此参数可以从3.31接口获取玩家openId
  5. */
  6. public int LTBaseMultiMediaGetRecvStreamLevel(String openId);

3.28.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetRecvStreamLevel(String openId);

3.29 启动耳返接口

  1. /**
  2. * 启动耳返
  3. * @param isEnableLoopBack true:打开 false:关闭
  4. */
  5. public void LTBaseMultiMediaEnableLoopBack(boolean isEnableLoopBack);

3.29.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableLoopBack(boolean isEnableLoopBack);

3.30 回调通知接口

  1. /**
  2. * 如果已经接入离线语音回调通知接口,实时语音可以和离线语音共用同一个回调通知接口
  3. * @param ltMultiMediaCallback 需要实现的回调
  4. */
  5. public void LTBaseMultiMediaListener(LTMultiMediaCallback ltMultiMediaCallback);

3.30.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaListener(new LTMultiMediaCallback() {
  2. @Override
  3. public void LTBaseMultiMediaSuccess(int i, Intent intent) {
  4. final Intent data = intent;
  5. switch (i) {
  6. //进入房间成功
  7. case LTBaseParam.CODE_ROOM_ENTERROOM_SUCCESS: {
  8. Toast.makeText(activity, "成功进入房间", Toast.LENGTH_LONG).show();
  9. break;
  10. }
  11. //进入房间失败
  12. case LTBaseParam.CODE_ROOM_ENTERROOM_FAIL: {
  13. /**
  14. * 错误码:7007:已经在其他房间
  15. * 1001:已经在进房过程中,然后又重复了此操作。建议在进房回调返回之前不要再调用进房接口
  16. * 1003:已经进房了在房间中,又调用一次进房接口
  17. */
  18. Toast.makeText(activity, "进入房间失败:code=" + data.getIntExtra("result", -1), Toast.LENGTH_LONG).show();
  19. break;
  20. }
  21. //退出了房间
  22. case LTBaseParam.CODE_ROOM_EXITROOM_SUCCESS: {
  23. Toast.makeText(activity, "退出房间", Toast.LENGTH_LONG).show();
  24. break;
  25. }
  26. //切换了房间
  27. case LTBaseParam.CODE_ROOM_SWITCHROOM_SUCCESS:
  28. Log.d(TAG, "切换了房间");
  29. int result = data.getIntExtra("result", 1);
  30. String errorInfo = data.getStringExtra("error_info");
  31. if (result == 0) {
  32. Toast.makeText(activity, "成功切换了房间", Toast.LENGTH_LONG).show();
  33. }
  34. else {
  35. Toast.makeText(activity, "switch room failed.. error info=" + errorInfo, Toast.LENGTH_SHORT).show();
  36. }
  37. break;
  38. //有成员进入了房间
  39. case LTBaseParam.CODE_ROOM_USERROOM_ENTER: {
  40. /**
  41. * listt数组会返回进入房间的成员的id
  42. * 举个例子:
  43. * 房间中有ABC三个成员,D最后进入房间,则ABC收到的user_list只有D,
  44. * 而D收到的user_list包含ABCD
  45. */
  46. String[] list = data.getStringArrayExtra("user_list");
  47. break;
  48. }
  49. //有成员退出了房间
  50. case LTBaseParam.CODE_ROOM_USERROOM_EXIT: {
  51. //list数组会返回退出房间的成员的id
  52. String[] list = data.getStringArrayExtra("user_list");
  53. break;
  54. }
  55. //有成员发送音频包
  56. case LTBaseParam.CODE_ROOM_USERROOM_HAS_AUDIO: {
  57. break;
  58. }
  59. //有成员停止发送音频包
  60. case LTBaseParam.CODE_ROOM_USERROOM_NO_AUDIO: {
  61. break;
  62. }
  63. //成功切换了房间音频类型
  64. //如需获取更多切换音频类型的状态,请参考下面表格中关于切换状态的CODE码描述
  65. case LTBaseParam.CODE_ROOM_CHANGEROOMTYPE_COMPLETE: {
  66. //type:返回切换了的音质类型,类型参考进房接口
  67. int type = data.getIntExtra("new_room_type", 0)
  68. break;
  69. }
  70. //房间因为网络等原因断开消息
  71. case LTBaseParam.CODE_ROOM_DISCONNECT: {
  72. break;
  73. }
  74. //房间通话质量监控事件
  75. case LTBaseParam.CODE_ROOM_QUALITY: {
  76. /**
  77. * data返回的参数如下
  78. * weight:范围是10 - 50,数值越低音质越差,数值为0代表初始值,无含义
  79. * loss:丢包率
  80. * delay:音频触达延迟时间(ms)
  81. */
  82. int weight = data.getIntExtra("weight", -1));
  83. double loss = data.getDoubleExtra("loss", -1));
  84. int delay = data.getIntExtra("delay", -1));
  85. break;
  86. }
  87. }
  88. }
  89. @Override
  90. public void LTBaseMultiMediaFail(int i, String s) {
  91. //语音SDK异常
  92. }
  93. });
参数 类型 说明
LTBaseParam.CODE_ROOM_ENTERROOM_SUCCESS int 进入房间成功
LTBaseParam.CODE_ROOM_ENTERROOM_FAIL int 进入房间失败
LTBaseParam.CODE_ROOM_EXITROOM_SUCCESS int 退出房间成功
LTBaseParam.CODE_ROOM_USERROOM_ENTER int 有成员进入了房间
LTBaseParam.CODE_ROOM_USERROOM_EXIT int 有成员退出了房间
LTBaseParam.CODE_ROOM_USERROOM_HAS_AUDIO int 有成员发送音频包
LTBaseParam.CODE_ROOM_USERROOM_NO_AUDIO int 有成员停止发送音频包
LTBaseParam.CODE_ROOM_DISCONNECT int 房间因为网络等原因断开消息
LTBaseParam.CODE_ROOM_QUALITY int 房间通话质量监控事件
LTBaseParam.CODE_ROOM_CHANGEROOMTYPE_COMPLETE int 表示已经在房间,音频类型切换完成
LTBaseParam.CODE_ROOM_CHANGEROOMTYPE_ENTERROOM int 表示在进房的过程中,自带的音频类型与房间不符合,被修改为所进入房间的音频类型
LTBaseParam.CODE_ROOM_CHANGEROOMTYPE_START int 表示已经在房间内,音频类型开始切换
LTBaseParam.CODE_ROOM_CHANGEROOMTYPE_REQUEST int 表示房间成员请求切换房间音频类型

3.31 获取用户ID接口

  1. /**
  2. * 获取用户ID
  3. * 此接口可用来获取用户id
  4. * 默认返回角色信息设置接口中设置的PlayerId
  5. * 与玩家在实时语音中进房后返回的成员ID一致
  6. */
  7. public String LTBaseMultiMediaGetOpenId();

3.31.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetOpenId();

3.32 设置混音路数接口

  1. /**
  2. * 接口可以设置最高混音路数,在进房前调用
  3. * 最大混音路数:20
  4. * 不调用此接口,默认为6路
  5. * 混音路数:支持同时多少人说话
  6. * @param count
  7. */
  8. public void LTBaseMultiMediaSetRecvMixStreamCount(int count);

3.32.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaSetRecvMixStreamCount(int count);

3.33 快速切换房间

说明:
调用此接口快速切换实时语音房间。此接口在进房后调用。切换房间后,不重置设备,即如果在此房间已经是打开麦克风状态,在切换房间后也会是打开麦克风状态。

  1. /**
  2. * @param roomId 将要进入的房间号
  3. * 快速切换房间事件通过回调通知接口返回
  4. * 事件为:LTBaseParam.CODE_ROOM_SWITCHROOM_SUCCESS
  5. * 回调返回值 result 0:成功切换房间 1:切换房间失败
  6. */
  7. public void LTBaseMultiMediaSwitchRoom(String roomId);

3.33.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaSwitchRoom(String roomId);

3.34 跨房连麦

说明:
调用此接口进行跨房连麦,此接口在进房后调用。调用接口后,本端可以与目标房间的目标 OpenID 用户进行连麦交流。目标房间与本端房间类型相同才能成功。

场景示例:
a 用户在 A 房间中,b 用户在 B 房间中,a 用户可以通过跨房接口与 b 进行通话,A 房间中的用户 c 说话,B 房间的 b 与 d 无法听到;A 房间中的用户 c 只能听到 A 房间的声音以及 B 房间中 b 的声音,B 房间其他人说话 c 无法听到。

  1. /**
  2. * @param roomId 将要连麦的房间号
  3. * @param openId 将要连麦的目标 OpenID
  4. * @return 0 为成功
  5. */
  6. public int LTBaseMultiMediaStartRoomSharing(String roomId, String openId);

3.34.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaStartRoomSharing(String roomId, String openId);

3.35 结束跨房连麦

  1. /**
  2. * @return 0 为成功
  3. */
  4. public int LTBaseMultiMediaStopRoomSharing();

3.35.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaStopRoomSharing();

3.36 房间内禁言

说明:
将某个 ID 加入音频数据黑名单,即不接受某人的语音, 只对本端生效,不会影响其他端。返回值为 0 表示调用成功。例如 :A,B,C 都在同一个房间开麦说话:
如果 A 设置了 C 的黑名单, 则 A 只能听见 B 的声音。
B 因为没有设置黑名单, 仍旧可以听见 A 和 C 的声音。
C 同样因为没有设置黑名单, 可以听见 A 和 B 的声音。

  1. /**
  2. * @param openId 将要禁言的目标 OpenID
  3. * @return 0 为成功
  4. */
  5. public int LTBaseMultiMediaAddAudioBlackList(String openId);

3.36.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaAddAudioBlackList(String openId);

3.37 解除房间内禁言

  1. /**
  2. * @param openId 将要解除禁言的目标 OpenID
  3. * @return 0 为成功
  4. */
  5. public int LTBaseMultiMediaRemoveAudioBlackList(String openId);

3.37.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaRemoveAudioBlackList(String openId);

3.38 获取房间号

说明:
此接口用于获取实时语音房间号,只能在进房成功之后使用。返回值为 string 字符串

  1. /**
  2. * @return 房间号
  3. */
  4. public String LTBaseMultiMediaGetRoomID();

3.38.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetRoomID();

4 范围语音接口使用说明

4.1 功能说明

范围语音是专门为吃鸡类游戏开发的定制化产品。其有别于普通小队语音房间的核心能力为:
1:提供吃鸡类游戏、大逃杀类型游戏中特有的“仅小队”或“所有人”的语音模式。
2:依托于范围判断能力,在同一个语音房间内,支持大量用户同时打开麦克风进行语音通话(范围内用户都可以开启麦克风,本端最多接收20路音频)。
3:范围语音基于实时语音接口,进房接口回调接口等皆可复用
4:使用范围语音,需使用流畅音质进入语音房间

4.2 设置范围语音队伍号

说明:通过此方法设置队伍号,必须在 EnterRoom 之前调用。
1:如果是退房后再进房,请在退房成功回调回来之后再调用设置队伍号接口。
2:在退房时,此参数不会自动重置为0,所以一旦决定调用此语音模式,请在每次 EnterRoom 之前都调用此方法设置 TeamID。

  1. /**
  2. * 设置队伍号
  3. * @param TeamID 队伍号,专供范围语音中进行上下行音频流控制
  4. */
  5. public void LTBaseMultiMediaSetRangeAudioTeamID(int itemId)

4.2.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaSetRangeAudioTeamID(int itemId);

4.3 设置语音模式

说明:通过此方法修改语音模式,可在进房前调用,也可在进房后调用。
1:在进房前调用此方法,方法将影响下一次进房。
2:在进房后调用此方法,将直接改变当前用户的语音模式。
3:在退房时,此参数不会自动重置为 MODE_WORLD,所以一旦决定调用此方法,请在每次 EnterRoom 之前都调用此方法设置语音模式。
4:不同的语音模式下,其具体的声音可达情况如下:
a. 同一小队内,无论距离多远、玩家为何种语音状态都能听见。
b. 不同小队情况下,双方开启“所有人”的语音状态情况下,在距离内可以互相听见。

  1. /**
  2. * 设置语音模式
  3. * @param rangeAudioMode 0(MODE_WORLD) 代表“所有人”,1(MODE_TEAM) 代表"仅小队"
  4. */
  5. public void LTBaseMultiMediaSetRangeAudioMode(int rangeAudioMode)

4.3.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaSetRangeAudioMode(int rangeAudioMode);

4.4 设置接收语音距离范围

说明:通过此方法用于设置接收的语音范围(距离以游戏引擎为准),只支持在进房成功后调用。
1:此方法必须配合 UpdateSelfPosition 更新声源方位联合使用。
2:此方法只需调用一次即可生效。
3:进房成功后,此接口至少调用一次。

  1. /**
  2. * 设置接收语音距离范围
  3. * 3D 音效中,音源音量的大小与音源距离有一定的衰减关系。单位距离超过 range 之后,音量衰减到几乎为零
  4. * @param range 最大可以接收音频的范围,单位为引擎距离单位
  5. */
  6. public void LTBaseMultiMediaUpdateAudioRecvRange(int range)

4.4.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaUpdateAudioRecvRange(int range);

4.5 更新声源方位

说明:更新声源方位,目的是告诉服务器本端位置,通过本端世界坐标+本端接收音频的范围,与其他端世界坐标+其他端接收音频的范围进行判断,达到范围语音效果。
1:此函数用于更新声源位置信息,只支持在进房成功后调用,且需要每帧调用,以 Unity 引擎为例,此接口需要在 Update 中调用。
2:使用范围语音一定要更新声源方位,如果不需要范围判断能力,也需要进房后调用此接口一次。
3:如果需要同时使用 3D 音效效果,此接口中的参数 axisForward、axisRight 及 axisUp 需要按照下文 3D 语音部分 进行设置。

  1. /**
  2. * 更新声源方位
  3. * @param position 自身在世界坐标系中的坐标,顺序是前、右、上
  4. * @param axisForward 自身坐标系的单位向量
  5. * @param axisRight 自身坐标系的单位向量
  6. * @param axisUp 自身坐标系的单位向量
  7. */
  8. public void LTBaseMultiMediaUpdateSelfPosition(int position[3], float axisForward[3],
  9. float axisRight[3], float axisUp[3])

4.5.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaUpdateSelfPosition(int position[3], float axisForward[3], float axisRight[3], float axisUp[3]);

4.5.2 代码示例

说明:请直接复制并调用示例代码使用此功能。
Unreal

  1. FVector cameraLocation = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0)->GetCameraLocation();
  2. FRotator cameraRotation = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0)->GetCameraRotation();
  3. int position[] = {
  4. (int)cameraLocation.X,
  5. (int)cameraLocation.Y,
  6. (int)cameraLocation.Z };
  7. FMatrix matrix = ((FRotationMatrix)cameraRotation);
  8. float forward[] = {
  9. matrix.GetColumn(0).X,
  10. matrix.GetColumn(1).X,
  11. matrix.GetColumn(2).X };
  12. float right[] = {
  13. matrix.GetColumn(0).Y,
  14. matrix.GetColumn(1).Y,
  15. matrix.GetColumn(2).Y };
  16. float up[] = {
  17. matrix.GetColumn(0).Z,
  18. matrix.GetColumn(1).Z,
  19. matrix.GetColumn(2).Z};

Unity

  1. Transform selftrans = currentPlayer.gameObject.transform;
  2. Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, selftrans.rotation, Vector3.one);
  3. int[] position = new int[3] {
  4. selftrans.position.z,
  5. selftrans.position.x,
  6. selftrans.position.y};
  7. float[] axisForward = new float[3] {
  8. matrix.m22,
  9. matrix.m02,
  10. matrix.m12 };
  11. float[] axisRight = new float[3] {
  12. matrix.m20,
  13. matrix.m00,
  14. matrix.m10 };
  15. float[] axisUp = new float[3] {
  16. matrix.m21,
  17. matrix.m01,
  18. matrix.m11 };

4.6 初始化 3D 音效引擎

说明:此函数用于初始化 3D 音效引擎,在进房后调用。在使用 3D 音效之前必须先调用此接口,只接收 3D 音效而不发出 3D 音效的用户也需要调用此接口。

  1. /**
  2. * 初始化 3D 音效引擎
  3. */
  4. public void LTBaseMultiMediaInitSpatializer()

4.6.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaInitSpatializer();

4.7 开启或关闭 3D 音效

说明:此函数用于开启或关闭 3D 音效。开启之后可以听到 3D 音效。

  1. /**
  2. * 开启或关闭 3D 音效
  3. * @param enable 开启之后可以听到 3D 音效
  4. * @param applyToTeam 3D语音是否作用于小队内部,仅 enble 为 true 时有效
  5. */
  6. public void LTBaseMultiMediaEnableSpatializer(boolean enable, boolean applyToTeam)

4.7.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaEnableSpatializer(boolean enable, boolean applyToTeam);

4.8 获取当前 3D 音效状态

说明:获取当前 3D 音效状态

  1. /**
  2. * 获取当前 3D 音效状态
  3. * @return true:开启 false:关闭状态
  4. */
  5. public boolean LTBaseMultiMediaIsEnableSpatializer()

4.8.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaIsEnableSpatializer();

4.9 自定义路由转发功能

说明:调用此接口设置音频转发规则,此接口在进房成功回调中调用,调用后此次进房生效,退房后失效。

  1. /**
  2. * 自定义路由转发
  3. * @param Sendtype 语音转发类型
  4. * @param OpenIDforSend 语音转发名单
  5. * @param Recvtype 语音接收类型
  6. * @param OpenIDforRecv 语音接收名单
  7. */
  8. public int LTBaseMultiMediaSetServerAudioRoute(int Sendtype, ArrayList<String> OpenIDforSend,
  9. int Recvtype, ArrayList<String> OpenIDforRecv)
返回值 类型 说明
0 int 设置成功
1004 int 参数错误,建议重新检查参数是否正确
1001 int 重复操作
1201 int 房间不存在
10001 以及 1005 int 建议重新调用接口一次
语音转发类型(Sendtype) 说明
LTBaseParam.CODE_ROOM_ROUTE_NOT_SEND_TO_ANYONE 本端音频上行发送到后台,但后台不转发给任何人,相当于将自己静音,此时参数 OpenIDForSend 无效,只需填 null
LTBaseParam.CODE_ROOM_ROUTE_SEND_TO_ALL 本端音频上行将转发给所有人,此时参数 OpenIDForSend 无效,只需填 null
LTBaseParam.CODE_ROOM_ROUTE_SEND_BLACK_LIST 本端音频上行将不转发给黑名单的人,黑名单由参数 OpenIDForSend 提供
LTBaseParam.CODE_ROOM_ROUTE_SEND_WHITE_LIST 本端音频上行将只转发给白名单的人,白名单由参数 OpenIDForSend 提供

说明
1:如果类型传入 CODE_ROOM_ROUTE_NOT_SEND_TO_ANYONE 以及 CODE_ROOM_ROUTE_SEND_TO_ALL ,此时的参数 OpenIDForSend 不生效,只需要填 null。
2:如果类型传入 CODE_ROOM_ROUTE_SEND_BLACK_LIST ,此时参数 OpenIDForSend 为黑名单列表,最多支持 10 个。
3:如果类型传入 CODE_ROOM_ROUTE_SEND_WHITE_LIST ,此时参数 OpenIDForSend 为白名单列表,最多支持 10 个。

语音接收类型(Recvtype) 说明
LTBaseParam.CODE_ROOM_ROUTE_NOT_RECV_FROM_ANYONE 本端不接受任何音频,相当于关闭房间内扬声器效果,此时参数 OpenIDforRecv 无效,只需填 null
LTBaseParam.CODE_ROOM_ROUTE_RECV_FROM_ALL 本端接收所有人的音频,此时参数 OpenIDforRecv 无效,只需填 null
LTBaseParam.CODE_ROOM_ROUTE_RECV_BLACK_LIST 本端不接收黑名单的人的音频声音,黑名单由参数 OpenIDforRecv 提供
LTBaseParam.CODE_ROOM_ROUTE_RECV_WHITE_LIST 本端只接收白名单的人的音频声音,白名单由参数 OpenIDforRecv 提供

说明
1:如果类型传入 CODE_ROOM_ROUTE_NOT_RECV_FROM_ANYONE 以及 CODE_ROOM_ROUTE_RECV_FROM_ALL OpenIDforRecv 不生效。
2:如果类型传入 CODE_ROOM_ROUTE_RECV_BLACK_LIST ,此时参数 OpenIDforRecv 为黑名单列表,最多支持 10 个。
3:如果类型传入 CODE_ROOM_ROUTE_RECV_WHITE_LIS ,此时参数 OpenIDforRecv 为白名单列表,最多支持 10 个。

4.9.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaSetServerAudioRoute(int Sendtype, ArrayList<String> OpenIDforSend,int Recvtype, ArrayList<String> OpenIDforRecv);

4.10 获取音频设置转发规则

说明:调用此接口获取音频转发规则。调用后接口返回规则,传入的数组参数会返回相应规则的 openId。

  1. /**
  2. * 获取音频设置转发规则
  3. * @param RouteType 获取设置类型
  4. * LTBaseParam.CODE_ROOM_TYPE_ROUTE_SEND 转发
  5. * LTBaseParam.CODE_ROOM_TYPE_ROUTE_RECV 接收
  6. *
  7. * @param OpenID 用户id 同一类型,例如白名单中的用户
  8. */
  9. public int LTBaseMultiMediaGetServerAudioRoute(int RouteType, ArrayList<String> OpenID)
语音转发返回类型 说明
LTBaseParam.CODE_ROOM_ROUTE_NOT_SEND_TO_ANYONE 本端音频上行发送到后台,但后台不转发给任何人,相当于将自己静音
LTBaseParam.CODE_ROOM_ROUTE_SEND_TO_ALL 本端音频上行将转发给所有人
LTBaseParam.CODE_ROOM_ROUTE_SEND_BLACK_LIST 本端音频上行将不转发给黑名单的人
LTBaseParam.CODE_ROOM_ROUTE_SEND_WHITE_LIST 本端音频上行将只转发给白名单的人
LTBaseParam.CODE_ROOM_ROUTE_SEND_INQUIRE_ERROR 获取出错,检查是否进入房间,是否已经初始化 SDK
语音接收返回类型 说明
LTBaseParam.CODE_ROOM_ROUTE_NOT_RECV_FROM_ANYONE 本端不接受任何音频,相当于关闭房间内扬声器效果
LTBaseParam.CODE_ROOM_ROUTE_RECV_FROM_ALL 本端接收所有人的音频
LTBaseParam.CODE_ROOM_ROUTE_RECV_BLACK_LIST 本端不接收黑名单的人的音频声音
LTBaseParam.CODE_ROOM_ROUTE_RECV_WHITE_LIST 本端只接收白名单的人的音频声音
LTBaseParam.CODE_ROOM_ROUTE_RECV_INQUIRE_ERROR 获取出错,检查是否进入房间,是否已经初始化 SDK

4.9.1 接口调用示例

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaGetServerAudioRoute(int RouteType, ArrayList<String> OpenID);

5 房间管理功能接口使用说明

5.1 功能说明

通过客户端房间管理接口,可以简单实现对房间内成员的管理、以及对房间内成员上下麦的管理。
房间管理功能在进房后才可调用,且只能修改房间内成员的状态。
所有接口的结果会通过 LTBaseParam.CODE_ROOM_MANAGEMENT_OPERATOR 回调,回调详情请参考 回调处理。

5.1 采集管理

采集管理接口包含麦克风管理、音频上行管理以及采集硬件设备管理。其中麦克风管理相当于音频上行管理加上采集硬件设备管理,区分出音频数据传输上下行与硬件设备的管理,是因为打开或者关闭采集设备,将会伴随整个设备(采集和播放)重启,如果此时 App 正在播放背景音乐,那么背景音乐的播放也会被中断。利用控制上下行的方式来实现开关麦克风效果,将不会中断播放设备。
注意:采集管理(麦克风管理、音频上行管理以及采集硬件设备管理)可以设置直接关闭,但是打开时出于个人隐私保护最好需要对方授权(腾讯方建议), 因此SDK只做回调消息通知不会直接打开采集管理;也可以接收到回调消息后直接调用设置接口打开,不去请求用户允许,这个看具体业务的策略,但这样不符合个人隐私保护

5.1.1 麦克风管理

接口说明:
调用此接口打开或关闭房间内某用户的麦克风,调用成功后,该用户的麦克风将被关闭或打开。
结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_MIC_OP 进行返回
LTBaseMultiMediaRoomManagerEnableMic 相当于同时调用 LTBaseMultiMediaRoomManagerEnableAudioSend 及 LTBaseMultiMediaRoomManagerEnableAudioCaptureDevice。
接口调用示例:

  1. /**
  2. * 麦克风管理
  3. * 调用此接口打开或关闭房间内某用户的麦克风,调用成功后,该用户的麦克风将被关闭或打开。
  4. * @param isEnabled true:打开某用户麦克风,false:关闭某用户麦克风
  5. * @param openId 用户openid (可通过接口3.31获取)
  6. * @return 0:表示接口调用成功,具体结果回调中给出
  7. */
  8. public int LTBaseMultiMediaRoomManagerEnableMic(boolean isEnabled, String openId);

5.1.2 音频上行管理

接口说明:
调用此接口打开或关闭房间内某用户的音频上行。调用成功后,该用户的音频上行将被关闭或打开,但不影响麦克风采集。
结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_AUDIO_SEND_OP进行信息返回
接口调用示例:

  1. /**
  2. * 音频上行管理
  3. * @param isEnabled true:打开某用户上行,false:关闭某用户上行
  4. * @param openId 用户openid (可通过接口3.31获取)
  5. * @return 0:表示接口调用成功,具体结果回调中给出
  6. */
  7. public int LTBaseMultiMediaRoomManagerEnableAudioSend(boolean isEnabled, String openId);

5.1.3 音频采集硬件设备管理

接口说明:
调用此接口打开或关闭房间内某用户的音频采集硬件设备。
调用成功后,该用户的音频采集硬件设备将被关闭或打开,但不影响上行

结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_CAPTURE_OP进行信息返回

接口调用示例:

  1. /**
  2. * 音频采集硬件设备管理
  3. * @param isEnabled true:打开某用户音频采集硬件设备,false:关闭某用户音频采集硬件设备
  4. * @param openId 用户openid (可通过接口3.31获取)
  5. * @return 0:表示接口调用成功,具体结果回调中给出
  6. */
  7. public int LTBaseMultiMediaRoomManagerEnableAudioCaptureDevice
  8. (boolean isEnabled, String openId);

5.2 播放管理相关接口

播放管理接口包含扬声器管理、音频下行管理以及播放硬件设备管理。其中扬声器管理相当于音频下行管理加上播放硬件设备管理。区分出音频数据传输上下行与硬件设备的管理,是因为打开或者关闭采集设备,将会伴随整个设备(采集及播放)重启,如果此时 App 正在播放背景音乐,那么背景音乐的播放也会被中断。利用控制上下行的方式来实现开关麦克风效果,不会中断播放设备。
注意:播放管理(扬声器管理、音频下行管理以及播放硬件设备管理)接口开关可直接设置,无需用户同意

5.2.1 扬声器管理

接口说明:
调用此接口打开或关闭房间内某用户的扬声器。调用成功后,该用户的扬声器将被关闭或打开,听到房间内的音频声音。
结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_SPEAKER_OP进行信息返回
LTBaseMultiMediaRoomManagerEnableSpeaker 相当于同时调用 LTBaseMultiMediaRoomManagerEnableAudioRecv 及 LTBaseMultiMediaRoomManagerEnableAudioPlayDevice。

接口调用示例:

  1. /**
  2. * 扬声器管理
  3. * @param isEnabled true :打开某用户扬声器,false:关闭某用户扬声器
  4. * @param openId 用户openid (可通过接口3.31获取)
  5. * @return 0:表示接口调用成功,具体结果回调中给出
  6. */
  7. public int LTBaseMultiMediaRoomManagerEnableSpeaker
  8. (boolean isEnabled, String openId);

5.2.2 音频下行管理

接口说明:
调用此接口打开或关闭房间内某用户的音频下行。调用成功后,该用户的音频下行将被关闭或打开,但不影响播放设备。

结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_AUDIO_REC_OP进行信息返回

接口调用示例:

  1. /**
  2. * 音频下行管理
  3. * @param isEnabled true :打开某用户音频下行,false:关闭某用户音频下行
  4. * @param openId 用户openid (可通过接口3.31获取)
  5. * @return 0:表示接口调用成功,具体结果回调中给出
  6. */
  7. public int LTBaseMultiMediaRoomManagerEnableAudioRecv
  8. (boolean isEnabled, String openId);

5.2.3 音频播放硬件设备管理

接口说明:
调用此接口打开或关闭房间内某用户的音频播放硬件设备。调用成功后,该用户的音频播放硬件设备将被关闭或打开。

结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_PLAY_OP进行信息返回

接口调用示例:

  1. /**
  2. * 音频播放硬件设备管理
  3. * @param isEnabled true :打开某用户音频播放硬件设备,false:关闭某用户音频播放硬件设备
  4. * @param openId 用户openid (可通过接口3.31获取)
  5. * @return 0:表示接口调用成功,具体结果回调中给出
  6. */
  7. public int LTBaseMultiMediaRoomManagerEnableAudioPlayDevice
  8. (boolean isEnabled, String openId);

5.3 获取成员状态接口

5.3.1 获取某人麦克风状态

接口说明:
调用此接口,获取房间内某成员的麦克风状态。

结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_GET_MIC_STATE进行信息返回
接口调用示例:

  1. /**
  2. * 获取某人麦克风状态
  3. * @param openId 用户openid (可通过接口3.31获取)
  4. * @return 0:表示接口调用成功,具体结果回调中给出
  5. */
  6. public int LTBaseMultiMediaRoomManagerGetMicState(String openId);

5.3.2 获取某人扬声器状态

接口说明:
调用此接口,获取房间内某成员的扬声器状态。

结果通过回调:LTBaseParam.CODE_ROOM_MANAGEMENT_GET_SPEAKER_STATE进行信息返回
接口调用示例:

  1. /**
  2. * 获取某人扬声器状态
  3. * @param openId 用户openid (可通过接口3.31获取)
  4. * @return 0:表示接口调用成功,具体结果回调中给出
  5. */
  6. public int LTBaseMultiMediaRoomManagerGetSpeakerState(String openId);

5.3.3 禁止某位成员操作麦克风及扬声器

接口说明:
成员进房默认为允许操作麦克风及扬声器,调用此接口可以禁止房间内的某位成员操作麦克风及扬声器,在该成员退出房间后此功能失效。

结果通过回调:LTBaseParam.CODE_ROOM_MANAGERMENT_FOBIN_OP进行信息返回

注意:此接口为true时才是禁止某人操作设备,false时允许操作设备

接口调用示例:

  1. /**
  2. * 禁止某位成员操作麦克风及扬声器
  3. * @param isEnabled true:禁止某用户操作设备,false:允许某用户操作设备
  4. * @param openId 用户openid (可通过接口3.31获取)
  5. * @return 0:表示接口调用成功,具体结果回调中给出
  6. */
  7. public int LTBaseMultiMediaRoomManagerForbidUserOperation(boolean isEnabled, String openId);

5.4 回调接口

接口说明:
回调接口与语音回调使用同一个接口返回
接口调用示例:

  1. LTBaseSDK.getInstance(mMainActivity).LTBaseMultiMediaListener(new LTMultiMediaCallback() {
  2. @Override
  3. public void LTBaseMultiMediaSuccess(int i, Intent intent) {
  4. final Intent data = intent;
  5. switch (i) {
  6. case LTBaseParam.CODE_ROOM_MANAGEMENT_OPERATOR: {
  7. Toast.makeText(activity, "语音房间管理", Toast.LENGTH_LONG).show();
  8. String SenderID = data.getStringExtra("SenderID");
  9. String ReceiverID = data.getStringExtra("ReceiverID");
  10. int OperateType = data.getIntExtra("OperateType",-1000);
  11. int Result = data.getIntExtra("Result",-1000);
  12. boolean OperateValue = data.getBooleanExtra("OperateValue",false);
  13. if (OperateType == -1000 ||Result == -1000) {
  14. return;
  15. }
  16. switch (OperateType) {
  17. case LTBaseParam.CODE_ROOM_MANAGEMENT_CAPTURE_OP:
  18. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  19. if (OperateValue){
  20. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  21. } else {
  22. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  23. }
  24. }
  25. break;
  26. case LTBaseParam.CODE_ROOM_MANAGEMENT_PLAY_OP:
  27. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  28. if (OperateValue){
  29. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  30. } else {
  31. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  32. }
  33. }
  34. break;
  35. case LTBaseParam.CODE_ROOM_MANAGEMENT_AUDIO_SEND_OP:
  36. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  37. if (OperateValue){
  38. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  39. } else {
  40. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  41. }
  42. }
  43. break;
  44. case LTBaseParam.CODE_ROOM_MANAGEMENT_AUDIO_REC_OP:
  45. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  46. if (OperateValue){
  47. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  48. } else {
  49. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  50. }
  51. }
  52. break;
  53. case LTBaseParam.CODE_ROOM_MANAGEMENT_MIC_OP:
  54. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  55. if (OperateValue){
  56. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  57. } else {
  58. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  59. }
  60. }
  61. break;
  62. case LTBaseParam.CODE_ROOM_MANAGEMENT_SPEAKER_OP:
  63. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  64. if (OperateValue){
  65. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  66. } else {
  67. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  68. }
  69. }
  70. break;
  71. case LTBaseParam.CODE_ROOM_MANAGEMENT_GET_MIC_STATE:
  72. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  73. if (OperateValue){
  74. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  75. } else {
  76. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  77. }
  78. }
  79. break;
  80. case LTBaseParam.CODE_ROOM_MANAGEMENT_GET_SPEAKER_STATE:
  81. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  82. if (OperateValue){
  83. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  84. } else {
  85. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  86. }
  87. }
  88. break;
  89. case LTBaseParam.CODE_ROOM_MANAGERMENT_FOBIN_OP:
  90. if (!LTBaseSDK.getInstance(activity).LTBaseMultiMediaGetOpenId().equals(SenderID)) {
  91. if (OperateValue){
  92. Toast.makeText(activity, "打开:" + ReceiverID, Toast.LENGTH_LONG).show();
  93. } else {
  94. Toast.makeText(activity, "关闭:" + ReceiverID, Toast.LENGTH_LONG).show();
  95. }
  96. }
  97. break;
  98. }
  99. break;
  100. }
  101. }
  102. }
  103. });

回调参数如下:

参数 类型 说明
SenderID String 事件发送者 ID,如果与自己 OpenId 相同,即为本端发送的命令
ReceiverID String 事件接收者 ID,如果与自己 OpenId 相同,即为本端接收的命令
OperateType int 事件类型
Result int 事件结果,0为成功
OperateValue Boolean 命令详情

OperateType:

参数 类型 说明
LTBaseParam.CODE_ROOM_MANAGEMENT_CAPTURE_OP int 控制采集设备硬件回调
LTBaseParam.CODE_ROOM_MANAGEMENT_PLAY_OP int 控制播放设备硬件回调
LTBaseParam.CODE_ROOM_MANAGEMENT_AUDIO_SEND_OP int 控制上行回调
LTBaseParam.CODE_ROOM_MANAGEMENT_AUDIO_REC_OP int 控制下行回调
LTBaseParam.CODE_ROOM_MANAGEMENT_MIC_OP int 控制麦克风回调
LTBaseParam.CODE_ROOM_MANAGEMENT_SPEAKER_OP int 控制扬声器回调
LTBaseParam.CODE_ROOM_MANAGEMENT_GET_MIC_STATE int 获取麦克风状态
LTBaseParam.CODE_ROOM_MANAGEMENT_GET_SPEAKER_STATE int 获取扬声器状态
LTBaseParam.CODE_ROOM_MANAGERMENT_FOBIN_OP int 禁止操作麦克风及扬声器事件

OperateValue:

成员 说明
boolValue 0:关闭命令,1:打开命令

附录

不同语音模式

不同语音模式下,玩家声音可达情况:
假设 A 玩家状态为“所有人”,对应 B 玩家在不同语音模式下声音可达情况:

假设 A 玩家状态为“仅小队“,对应 B 玩家在不同语音模式下声音可达情况:

距离与声音衰减的关系

3D 音效中,音源音量的大小与音源距离有一定的衰减关系。单位距离超过 range 之后,音量衰减到几乎为零。

错误码表

一般性错误

错误码名称 错误码值 原因及建议方案
AV_ERR_3DVOICE_ERR_NOT_INITED 7003 需要先调用 InitSpatializer 接口
AV_ERR_NET_REQUEST_FALLED 7004 网络请求失败,一般由网络状态不稳定引起,可参考 实时语音房间问题 进行排查
AV_ERR_CHARGE_OVERDUE 7005 账号欠费导致失败,需要在腾讯云控制台上查看是否欠费
AV_ERR_AUTH_FIALD 7006 鉴权失败 有以下几个原因:1. AppID 不存在或者错误,2. authbuff 鉴权错误,3. 鉴权过期
AV_ERR_IN_OTHER_ROOM 7007 已经在其它房间
AV_ERR_NO_PERMISSION 7009 要进行某个操作的时候,没有权限
AV_ERR_FILE_CANNOT_ACCESS 7010 无法访问文件
AV_ERR_FILE_DAMAGED 7011 文件被损坏
AV_ERR_SERVICE_NOT_OPENED 7012 没有在控制台开通此功能,请在控制台上开通
AV_ERR_USER_CANCELED 7013 用户主动取消此操作,例如没进房成功就进行退房操作
AV_ERR_LOAD_LIB_FAILED 7014 库文件没有正常加载,请检查库文件是否缺失
AV_ERR_SDK_NOT_FULL_UPDATE 7015 升级 SDK 时,没有升级所有的文件,导致某些模块不匹配,请全量升级 SDK
AV_ERR_3DVOICE_ERR_FILE_DAMAGED 7002 3D 音效文件未加载成功

实时语音客户端错误

错误码名称 错误码值 含义 原因 建议方案
AV_ERR_REPEATED_OPERATION 1001 重复操作 已经在进行某种操作,再次去做同样的操作,则会产生这个错误。操作类别主要有:AVContext 类、房间类、设备类、成员类。AVContext 类型的操作:StartContext/StopContext。房间类型的操作:EnterRoom/ExitRoom。设备类型的操作:打开/关闭某个设备。 等待上一个操作完成后再进行下一个操作。
AV_ERR_EXCLUSIVE_OPERATION 1002 互斥操作 已经在进行某种操作,再次去做同类型的其他操作,则会产生这个错误。 等待上一个操作完成后再进行下一个操作。
AV_ERR_HAS_IN_THE_STATE 1003 重复操作 对象已经处于某种状态,再去做使得它进入这种状态的操作时,则会产生这个错误。如已经在房间中,再去做进入房间的操作,就会产生这个错误。 由于已经处于所要状态,可以认为该操作已经成功,当作成功来处理。
AV_ERR_INVALID_ARGUMENT 1004 错误参数 调用 SDK 接口时,传入错误的参数,则会产生这个错误。如进入房间时,传入的房间类型不等于 AVRoom::ROOM_TYPE_PAIR 或 AVRoom::ROOM_TYPE_MULTI,就会产生这个错误。 详细阅读 API 文档,获取每个接口的每个参数的有效取值范围,保证传入参数的正确性并进行相应的预防处理。
AV_ERR_TIMEOUT 1005 操作超时 进行某个操作,在规定的时间内,还未返回操作结果,则会产生这个错误。多数情况下,涉及到信令传输的、且网络出问题的情况下,才容易产生这个错误。如执行进入房间操作时,30s后还没有返回进入房间操作完成的结果的话,就会产生这个错误。 确认网络是否有问题,是否能连接到外网环境,并尝试重试。
AV_ERR_NOT_IMPLEMENTED 1006 未实现 调用 SDK 接口时,如果相应的功能还未支持,则会产生这个错误。 暂不支持该功能,找其他替代方案。
AV_ERR_NOT_IN_MAIN_THREAD 1007 不在主线程 SDK 对外接口要求在主线程执行,如果业务侧调用 SDK 接口时,没有在主线程调用,则会产生这个错误。 修改业务侧逻辑,确保在主线程调用 SDK 接口。
AV_ERR_RESOURCE_IS_OCCUPIED 1008 资源被占用 当需要用到某种资源,如摄像头、屏幕等,而这些资源已经被占用了,则会产生这个错误。 确认具体要用到哪些资源,及这样资源为什么被占用了,确保在正确的时机使用 SDK 相关功能以保证资源使用不冲突。
AV_ERR_CONTEXT_NOT_EXIST 1101 AVContext 状态问题 当 AVContext 对象未处于 CONTEXT_STATE_STARTED 状态,去调用需要处于这个状态才允许调用的接口时,则会产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口时机的正确性。
AV_ERR_CONTEXT_NOT_STOPPED 1102 AVContext 状态问题 当 AVContext 对象未处于 CONTEXT_STATE_STOPPED 状态,去调用需要处于这个状态才允许调用的接口时,则会产生这个错误。如不在这种状态下,去调用 AVContext::DestroyContext 时,就会产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口的时机的正确性。
AV_ERR_ROOM_NOT_EXIST 1201 AVRoom 状态问题 当 AVRoom 对象未处于 ROOM_STATE_ENTERED 状态,去调用需要处于这个状态才允许调用的接口时,则会产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口的时机的正确性。
AV_ERR_ROOM_NOT_EXITED 1202 AVRoom 状态问题 当 AVRoom 对象未处于 ROOM_STATE_EXITED 状态,去调用需要处于这个状态才允许调用的接口时,则会产生这个错误。如不在这种状态下,去调用 AVContext::StopContext 时,就会产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口的时机的正确性。
AV_ERR_DEVICE_NOT_EXIST 1301 设备不存在 当设备不存在或者设备初始化未完成时,去使用设备,则会产生这个错误。 确认设备是否真的存在,确保设备 ID 填写的正确性,确保在设备初始化成功后再去使用设备。
AV_ERR_ENDPOINT_NOT_EXIST 1401 AVEndpoint 对象不存在 当成员没有在发语音或视频文件时,去获取它的 AVEndpoint 对象时,就可能产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口的时机的正确性。
AV_ERR_ENDPOINT_HAS_NOT_VIDEO 1402 成员没有发视频 当成员没有在发视频时,去做需要成员发视频的相关操作时,就可能产生这个错误。如当某个成员没有发送视频时,去请求他的画面,就会产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口的时机的正确性。
AV_ERR_TINYID_TO_OPENID_FAILED 1501 tinyid 转 identifier 失败 当收到某个成员信息更新的信令时,需要去把 tinyid 转成 identifier,如果 IMSDK 库相关逻辑存在问题、网络存在问题等,则会产生这个错误。 确认网络是否存在问题,查看日志确认 IMSDK 相关逻辑是否存在问题。
AV_ERR_OPENID_TO_TINYID_FAILED 1502 identifier 转 tinyid 失败 当调用 StartContext 接口时,需要去把 identifier 转成 tinyid,如果 IMSDK 库相关逻辑存在问题、网络存在问题、没有处于登录态时等,则会产生这个错误。 确认网络是否存在问题,查看日志确认 IMSDK 相关逻辑是否存在问题,确认已经成功调用 IMSDK 的登录接口。
AV_ERR_DEVICE_TEST_NOT_EXIST 1601 AVDeviceTest 状态问题 当 AVDeviceTest 对象未处于 DEVICE_TEST_STATE_STARTED 状态,去调用需要处于这个状态才允许调用的接口时,则会产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口的时机的正确性。
AV_ERR_DEVICE_TEST_NOT_STOPPED 1602 AVDeviceTest 状态问题 当 AVDeviceTest 对象未处于 DEVICE_TEST_STATE_STOPPED 状态,去调用需要处于这个状态才允许调用的接口时,则会产生这个错误。如不在这种状态下,去调用 AVContext::StopContext 时,就会产生这个错误。 修改业务侧逻辑,确保调用 SDK 接口的时机的正确性。
AV_ERR_INVITET_FAILED 1801 发送邀请失败 发送邀请时产生的失败。 邀请模块只是用于 DEMO 演示方便用,对外暂不支持邀请功能,所以业务侧不需要处理这些错误码。
AV_ERR_ACCEPTT_FAILED 1802 接受邀请失败 接受邀请时产生的失败。 邀请模块只是用于 DEMO 演示方便用,对外暂不支持邀请功能,所以业务侧不需要处理这些错误码。
AV_ERR_REFUSE_FAILED 1803 拒绝邀请失败 拒绝邀请时产生的失败。 邀请模块只是用于 DEMO 演示方便用,对外暂不支持邀请功能,所以业务侧不需要处理这些错误码。
QAV_ERR_NOT_TRY_NEW_ROOM 2001 没有尝试进入新房间,将停留在旧房间。 切换到新房间失败,但仍然在当前房间 在当前房间仍可以正常使用。
QAV_ERR_TRY_NEW_ROOM_FAILED 2002 尝试进入新房间,但失败了,旧房间也将关闭。 切换到新房间失败,同时已退出原来的房间 退出房间,重新进入。

实时语音服务端错误

错误码名称 错误码值 含义 原因 建议方案
AV_ERR_SERVER_FAILED 10001 一般错误 具体原因需要通过分析日志确认后台返回给客户端的真正错误码才能知道。 查看并确认进房 API 中的参数,如 AppID, UIN, AuthBuffer 的合法性(参照文档)。请查看控制台上的相关参数是否与本地的一致。请查看控制台是否欠费。检查开发者测试设备网络环境,是在开发者内网环境还是外网环境。
AV_ERR_SERVER_INVALID_ARGUMENT 10002 错误参数 调用 SDK 接口时,或 SDK 内部发送信令给后台时,传了错误的参数。 确保调用 SDK 接口时所传的参数的正确性。分析日志,获取后台返回给客户端的真正错误码,并联系后台同事协助解决。
AV_ERR_SERVER_NO_PERMISSION 10003 没有权限 没有权限使用某个功能。如进入房间时所带的签名错误或过期,就会产生这个错误。 确保在设置正确的权限参数后才去使用相应的功能。检查 AppID 及权限密钥是否正确。
AV_ERR_SERVER_TIMEOUT 10004 超时 进行某个操作,在规定的时间内,还未返回操作结果,则会产生这个错误。 分析日志,获取后台返回给客户端的真正错误码,并联系后台同事协助解决。
AV_ERR_SERVER_ALLOC_RESOURCE_FAILED 10005 网络错误 执行某些操作时,网络错误 看并确认进房 API 中的参数,例如 AppID, UIN, AuthBuffer 的合法性(参照文档)。如果合法,检查开发者测试设备网络环境,是在开发者内网环境还是外网环境。如果是开发者内网,请开发者探测下 url:openmsf.3g.qq.com:15000 是否能够连接上。如上 url 成功连接,请探测下 url:cloud.tim.qq.com:15000 是否能够连通。
AV_ERR_SERVER_ID_NOT_IN_ROOM 10006 不在房间内 在不在房间内时,去执行某些操作,则会产生这个错误。 确保在正确的时机使用 SDK 相关功能
AV_ERR_SERVER_NOT_IMPLEMENT 10007 未实现 调用 SDK 接口时,如果相应的功能还未支持,则会产生这个错误。 暂不支持该功能,找其他替代方案。
AV_ERR_SERVER_REPEATED_OPERATION 10008 重复操作 已经在进行某种操作,再次去做同类型的其他操作,则会产生这个错误。 等待上一个操作完成后再进行下一个操作。
AV_ERR_SERVER_ROOM_NOT_EXIST 10009 房间不存在 房间不存在时,去执行某些操作,则会产生这个错误。 确保在正确的时机使用 SDK 相关功能
AV_ERR_SERVER_ENDPOINT_NOT_EXIST 10010 成员不存在 某个成员不存在时,去执行该成员相关的操作,则会产生这个错误。 分析日志,获取后台返回给客户端的真正错误码,并联系后台同事协助解决。
AV_ERR_SERVER_INVALID_ABILITY 10011 错误能力 具体原因需要通过分析日志确认后台返回给客户端的真正错误码才能知道。 分析日志,获取后台返回给客户端的真正错误码,并联系后台同事协助解决。

语音转文字错误

错误码名称 错误码值 含义 原因 建议方案
RECORDER_PARAM_NULL 4097 录音错误 参数为空 检查代码中接口参数是否正确。
RECORDER_INIT_ERROR 4098 录音错误 初始化错误 检查设备是否被占用,或者权限是否正常,是否初始化正常。
RECORDER_RECORDING_ERR 4099 录音错误 正在录制中 确保在正确的时机使用 SDK 录制功能。
RECORDER_NODATA_ERR 4100 录音错误 没有采集到音频数据 检查麦克风设备是否正常。
RECORDER_OPENFILE_ERR 4101 录音错误 录音时,录制文件访问错误 确保文件存在,文件路径的合法性。
RECORDER_PERMISSION_MIC_ERR 4102 录音错误 麦克风未授权错误 使用 SDK 需要麦克风权限,添加权限请参考对应引擎或平台的 SDK 工程配置文档。
RECORDER_AUDIO_TOO_SHORT 4103 录音错误 录音时间太短错误 首先,限制录音时长的单位为毫秒,检查参数是否正确;其次,录音时长要1000毫秒以上才能成功录制。
RECORDER_RECORD_NOT_START 4104 录音错误 没有启动录音操作 检查是否已经调用启动录音接口。
UPLOAD_FILE_ACCESSERROR 8193 上传错误 上传文件时,文件访问错误 确保文件存在,文件路径的合法性。
UPLOAD_SIGN_CHECK_FAIL 8194 上传错误 签名校验失败错误 检查鉴权密钥是否正确,检查是否有初始化离线语音。
UPLOAD_COS_INTERNAL_FAIL 8195 上传错误 网络错误 检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
UPLOAD_GET_TOKEN_NETWORK_FAIL 8196 上传错误 获取上传参数过程中网络失败 检查鉴权是否正确,检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
UPLOAD_SYSTEM_INNER_ERROR 8197 上传错误 获取上传参数过程中回包数据为空 检查鉴权是否正确,检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
UPLOAD_RSP_DATA_DECODE_FAIL 8198 上传错误 获取上传参数过程中回包解包失败 检查鉴权是否正确,检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
UPLOAD_APPINFO_UNSET 8200 上传错误 没有设置 appinfo 检查 apply 接口是否有调用,或者入参是否为空。
DOWNLOAD_FILE_ACCESSERROR 12289 下载错误 下载文件时,文件访问错误 检查文件路径是否合法。
DOWNLOAD_SIGN_CHECK_FAIL 12290 下载错误 签名校验失败 检查鉴权密钥是否正确,检查是否有初始化离线语音。
DOWNLOAD_COS_INTERNAL_FAIL 12291 下载错误 网络错误 服务器获取语音文件失败,检查接口参数 fileid 是否正确,检查网络是否正常。
DOWNLOAD_REMOTEFILE_ACCESSERROR 12292 下载错误 服务器文件系统错误 检查设备网络是否可以正常访问外网环境,检查服务器上是否有此文件。
DOWNLOAD_GET_SIGN_NETWORK_FAIL 12293 下载错误 获取下载参数过程中,HTTP 网络失败 检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
DOWNLOAD_SYSTEM_INNER_ERROR 12294 下载错误 获取下载参数过程中,回包数据为空 检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
DOWNLOAD_GET_SIGN_RSP_DATA_DECODE_FAIL 12295 下载错误 获取下载参数过程中,回包解包失败 检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
DOWNLOAD_APPINFO_UNSET 12297 下载错误 没有设置 appinfo 检查鉴权密钥是否正确,检查是否有初始化离线语音。
PLAYER_INIT_ERR 20481 播放错误 初始化错误 检查设备是否被占用,或者权限是否正常,是否初始化正常。
PLAYER_PLAYING_ERR 20482 播放错误 正在播放中,试图打断并播放下一个失败了(正常是可以打断的) 检查代码逻辑是否正确。
PLAYER_PARAM_NULL 20483 播放错误 参数为空 检查代码中接口参数是否正确。
PLAYER_OPENFILE_ERR 20484 播放错误 播放时,文件访问错误 确保文件存在,文件路径的合法性。
PLAYER_PLAYER_NOT_START_ERR 20485 播放错误 播放未开始 确保文件存在,文件路径的合法性。
S2T_INTERNAL_ERROR 32769 语音转文字错误 内部错误 出现此情况请联系腾讯云工作人员,并参照 下载及使用问题 提供日志文件。
S2T_NETWORK_FAIL 32770 语音转文字错误 网络失败 检查设备网络是否可以正常访问外网环境,参考 如何检查网络。
S2T_RSP_DATA_DECODE_FAIL 32772 语音转文字错误 回包解包失败 出现此情况请联系腾讯云工作人员,并参照 下载及使用问题 提供日志文件。
S2T_APPINFO_UNSET 32774 语音转文字错误 没有设置 appinfo 检查鉴权密钥是否正确,检查是否有初始化离线语音。
STREAMIN_RECORD_SUC_REC_FAIL 32775 流式语音转文本错误 流式语音转文本失败,但是录音成功了 检查网络是否正确连接,检查权限密钥是否正确。
S2T_SIGN_CHECK_FAIL 32776 authbuffer 校验失败 authbuffer 校验失败 检查 authbuffer 是否正确。
STREAMIN_UPLOADANDRECORD_SUC_REC_FAIL 32777 流式语音转文本错误 流式语音转文本失败,但是录音成功了,上传也成功了。 检查代码是否有错误。
S2T_PARAM_NULL 32784 语音转文字错误 语音转文本参数错误 检查代码中接口参数 fileid 是否为空。
S2T_AUTO_SPEECH_REC_ERROR 32785 语音转文字错误 语音转文本翻译返回错误 出现此情况请联系腾讯云工作人员,并参照 下载及使用问题 提供日志文件。
ERR_VOICE_STREAMIN_RUNING_ERROR 32786 流式语音转文本错误 流式语音转文本失败 在流式录制状态当中,请等待流式录制接口执行结果返回。
ERR_VOICE_STREAMING_ASR_ERROR 50012 流式语音转文本错误 请求 ASR 错误 重新上传录制文件(UploadRecordedFile),然后调用转文本接口(SpeechToText)。出现此情况请联系腾讯云工作人员,并参照 下载及使用问题 提供日志文件。

房间管理返回值信息

返回值 含义
0 成功操作。
1001 < 重复操作。已经在进行某种操作,再次去做同样的操作,则返回这个错误。
1002 < 互斥操作。已经在进行某种操作,再次去做同类型的其他操作,则返回这个错误。
1003 < 已经处于所要状态,无需再操作。如设备已经打开,再次去打开,就返回这个错误码。
1004 错误参数。
1005 操作超时。
1006 功能未实现。
1007 不在主线程中执行操作
1101 AVContext没有启动。
1201 房间不存在。
1301 设备不存在。
10001 服务器返回一般错误。
10003 没有权限。
10004 进房间获取房间地址失败。
10005 进房间连接房间失败。
10006 免流情况下,免流签名校验失败,导致进房获取房间地址失败。
10007 游戏应用房间超过90分钟,强制下线。
6999 IMSDK失败。
7000 IMSDK超时。
7001 QAV_ERR_HTTP_REQ_FAIL。
7002 3d voice model file is damaged.。
7003 should call InitSpatializer first。
65536 无效值。
7004 QAV_ERR_NET_REQUEST_FALLED。
7005 QAV_ERR_CHARGE_OVERDUE。
7006 QAV_ERR_AUTH_FIALD。
7007 QAV_ERR_IN_OTHER_ROOM。
7008 QAV_ERR_DISSOLVED_OVERUSER。
7009 QAV_ERR_NO_PERMISSION。
7010 QAV_ERR_FILE_CANNOT_ACCESS。
7011 QAV_ERR_FILE_DAMAGED。
7012 QAV_ERR_SERVICE_NOT_OPENED。
7013 QAV_ERR_USER_CANCELED。
7014 QAV_ERR_LOAD_LIB_FAILED。
7015 升级SDK的时候没有升级所有的文件,导致某些模块不匹配@name 实时语音伴奏相关错误。
7016 QAV_ERR_ROOMMANAGER_TIMESTAMP_CHECK_FAIL。
7017 QAV_ERR_ASR_CONNECT_CLOSED。
7018 iOS静音开关检测错误。
4051 打开文件失败。
4052 不支持的文件格式。
4053 解码失败。
4054 参数错误。
4055 内存分配失败。
4056 创建线程失败。
4057 状态非法。