语音消息
更新时间: 2025/06/11 16:45:39
本文介绍了网易云信音视频通话 RTC SDK 中,语音消息 功能的相应使用示例代码,根据本文这些示例代码,您可以完成应用中语音消息的开发。
功能说明
网易云信音视频通话 RTC SDK 支持 语音消息 功能,方便 Unreal Engine 开发者基于游戏多媒体引擎客户端 API 调试和接入。通过实现客户端内的实时语音消息、语音转文字等能力,丰富了玩家之间的沟通方式和游戏互动深度。例如:
- 在协作场景中,可以使用语音录制、语音上传、语音下载等能力,让玩家可以便捷地录制语音信息。
- 在游戏大世界场景中,可以使用语音转文字功能,加强游戏社交属性。
调用时序
sequenceDiagram
autoNumber
participant 您的应用
participant 网易云信 RTC SDK
participant 网易云信服务端
您的应用 ->> 网易云信 RTC SDK: initialize 初始化 SDK IRtcEngine
您的应用 ->> 网易云信 RTC SDK: IRtcVoiceEngine::setEvent 注册事件回调
您的应用 ->> 网易云信 RTC SDK: applyAuth 进行单独的语音消息 Token 鉴权
网易云信 RTC SDK ->> 网易云信服务端: 校验 Token
网易云信服务端 -->> 网易云信 RTC SDK: 校验结果
网易云信 RTC SDK -->> 您的应用: onAuth 鉴权回调
note over 您的应用,网易云信服务端: 功能实现(云端交互省略展示)
您的应用 ->> 网易云信 RTC SDK: 录制语音
网易云信 RTC SDK -->> 您的应用: onRecordComplete 录制完成
您的应用 ->> 网易云信 RTC SDK: 播放语音
网易云信 RTC SDK -->> 您的应用: onPlayComplete 播放完成
您的应用 ->> 网易云信 RTC SDK: 上传文件
网易云信 RTC SDK -->> 您的应用: onUploadComplete 返回上传结果
您的应用 ->> 网易云信 RTC SDK: 下载文件
网易云信 RTC SDK -->> 您的应用: onDownloadComplete 返回下载结果
您的应用 ->> 网易云信 RTC SDK: 语音转文字
网易云信 RTC SDK -->> 您的应用: onSpeechToTextComplete 返回转换结果
实现功能
注册事件回调
语音消息功能通过 IRtcVoiceEngine::setEvent 注册事件回调,您可以继承 IRtcVoiceEngineEventHandler 实现相应的方法来接收事件通知。
示例代码:
c++class MyVoiceEventsHandler : public IRtcVoiceEngineEventHandler
{
public:
void onAuth(int error_code) override {
}
//others
}
MyVoiceEventsHandler voiceHandler;//请自行保证对象的生命周期。
//监听事件
auto voiceEngine = nertc_engine_->getVoiceEngine();
voiceEngine->setEvent(&voiceHandler);
//取消事件监听
voiceEngine->setEvent(nullptr);
鉴权
语音消息功能需要独立的 Token 鉴权。调用 IRtcVoiceEngine::applyAuth 接口实现鉴权功能,并由 IRtcVoiceEngineEventHandler::onAuth 事件通知。
本地的录制和播放不依赖此鉴权,但是上传文件、下载文件、语音转文字等服务依赖此鉴权,若鉴权没有成功,则上述功能将不可用。
不支持在 调试模式 下使用语音消息功能,即 Token 不能为空。如需接入 SDK 进行测试,请 提交工单 联系网易云信技术支持工程师。
示例代码:
c++auto voiceEngine = nertc_engine_->getVoiceEngine();
uint64_t uid = 123456; //your user id
std::string token = "YOUR TOKEN";
voiceEngine->applyAuth(uid,token.c_str());
录制语音
语音消息录制仅支持 .aac 文件格式。因为 RTC SDK 不会自动创建文件夹,指定的录制文件所在的文件路径必须要保证已存在。
语音录制的相关接口为:
-
IRtcVoiceEngine::stopRecording:完成录制正常完成录制都会通过
IRtcVoiceEngineEventHandler::onRecordComplete事件通知。 -
IRtcVoiceEngine::cancelRecording:取消录制如果取消了本次录制,
IRtcVoiceEngineEventHandler::onRecordComplete事件将不再被通知。
语音消息的长度默认是 60 秒,您可以通过 IRtcVoiceEngine::setMaxMessageLength 接口设置最大的录制时长。
同时开启录制和播放时,请不要使用同一个文件。
示例代码:
c++auto voiceEngine = nertc_engine_->getVoiceEngine();
//开始录制
std::string recordFile = "xxxxx/xxx.aac"; //您的录制文件存放路径
voiceEngine->startRecording(recordFile.c_str());
//结束录制
voiceEngine->stopRecording();
播放语音
语音录制的相关接口为:
IRtcVoiceEngine::playRecordedFile:播放录制语音文件。IRtcVoiceEngine::stopPlayFile:停止播放录制录音文件。
如果您需要监听事件通知,则可以监听:
-
播放结束由
IRtcVoiceEngineEventHandler::onPlayComplete事件通知。 -
音量变化由
IRtcVoiceEngineEventHandler::onPlayingVolume事件通知。如果您通过
IRtcVoiceEngine::setSpeakerVolume接口设置播放音量为 0,则IRtcVoiceEngineEventHandler::onPlayingVolume回调的音量将一直是 0。
示例代码:
c++auto voiceEngine = nertc_engine_->getVoiceEngine();
//播放
std::string recordFile = "xxxxx/xxx.aac"; //your file path
voiceEngine->playRecordedFile(recordFile.c_str());
//停止
voiceEngine->stopPlayFile();
上传文件
使用 IRtcVoiceEngine::uploadRecordedFile 上传语音消息文件,上传成功或者失败,都会通过 IRtcVoiceEngineEventHandler::onUploadComplete 事件通知。上传成功后,会返回 file_id,此文件 ID 用于文件下载以及语音识别等功能接口。
上传语音消息前,请先使用 IRtcVoiceEngine::applyAuth 进行鉴权,否则会返回失败。
示例代码:
c++auto voiceEngine = nertc_engine_->getVoiceEngine();
//上传
std::string recordFile = "xxxxx/xxx.aac"; //your file path
voiceEngine->uploadRecordedFile(recordFile.c_str());
下载文件
使用 IRtcVoiceEngine::downloadRecordedFile 进行文件下载前,请先使用 IRtcVoiceEngine::applyAuth 进行鉴权,否则会返回失败。
完成下载或者失败,会通过 IRtcVoiceEngineEventHandler::onDownloadComplete 事件通知。
上传语音消息前,请先使用 IRtcVoiceEngine::applyAuth 进行鉴权,否则会返回失败。
示例代码:
c++auto voiceEngine = nertc_engine_->getVoiceEngine();
//下载
std::string fileID = "xxxxx"; //通过上传接口获得此文件 ID
std::string downloadFile = "xxxxx/xxx.aac"; //your file path
voiceEngine->downloadRecordedFile(fileID.c_str(),downloadFile.c_str());
语音转文字
使用 IRtcVoiceEngine::speechToText 进行语音转文字前,请先使用 IRtcVoiceEngine::applyAuth 进行鉴权,否则会返回失败。
完成语音转文字或者失败,会通过 IRtcVoiceEngineEventHandler::onSpeechToTextComplete 事件通知。
示例代码:
c++auto voiceEngine = nertc_engine_->getVoiceEngine();
//语音转文字
std::string fileID = "xxxxx"; //通过上传接口获得此文件 ID
voiceEngine->speechToText(fileID.c_str());





