语音消息
更新时间: 2024/05/24 17:38:20
本文介绍了网易云信音视频通话 RTC SDK 中,语音消息 功能的相应使用示例代码,根据本文这些示例代码,您可以完成应用中语音消息的开发。
功能说明
网易云信音视频通话 RTC SDK 支持 语音消息 功能,方便 Unity 开发者基于游戏多媒体引擎客户端 API 调试和接入。通过实现客户端内的实时语音消息、语音转文字等能力,丰富了玩家之间的沟通方式和游戏互动深度。例如:
- 在协作场景中,可以使用语音录制、语音上传、语音下载等能力,让玩家可以便捷地录制语音信息。
- 在游戏大世界场景中,可以使用语音转文字功能,加强游戏社交属性。
调用时序
sequenceDiagram
autoNumber
participant 您的应用
participant 网易云信 RTC SDK
participant 网易云信服务端
您的应用 ->> 网易云信 RTC SDK: initialize 初始化 SDK
您的应用 ->> 网易云信 RTC SDK: IRtcVoiceEngine.SetEvents 注册事件回调
您的应用 ->> 网易云信 RTC SDK: ApplyAuth 进行单独的语音消息 Token 鉴权
网易云信 RTC SDK ->> 网易云信服务端: 校验 Token
网易云信服务端 -->> 网易云信 RTC SDK: 校验结果
网易云信 RTC SDK -->> 您的应用: OnAuth 鉴权回调
note over 您的应用,网易云信服务端: 功能实现(云端交互省略展示)
您的应用 ->> 网易云信 RTC SDK: 录制语音
网易云信 RTC SDK -->> 您的应用: OnRecordCompleted 录制完成
您的应用 ->> 网易云信 RTC SDK: 播放语音
网易云信 RTC SDK -->> 您的应用: OnPlayCompleted 播放完成
您的应用 ->> 网易云信 RTC SDK: 上传文件
网易云信 RTC SDK -->> 您的应用: OnUploadCompleted 返回上传结果
您的应用 ->> 网易云信 RTC SDK: 下载文件
网易云信 RTC SDK -->> 您的应用: OnDownloadCompleted 返回下载结果
您的应用 ->> 网易云信 RTC SDK: 语音转文字
网易云信 RTC SDK -->> 您的应用: OnSpeechToTextCompleted 返回转换结果
实现功能
注册事件回调
语音消息功能通过 IRtcVoiceEngine.SetEvents
注册事件回调,您可以继承 IVoiceEngineCallback
实现相应的方法来接收事件通知。
示例代码:
C#public class MyVoiceEventsHandler : IVoiceEngineCallback
{
public void OnAuth(RtcErrorCode errorCode)
{
}
public void OnRecordCompleted(RtcErrorCode errorCode, string filePath)
{
}
public void OnPlayCompleted(RtcErrorCode errorCode, string filePath)
{
}
public void OnUploadCompleted(RtcErrorCode errorCode, string filePath, string fileID)
{
}
public void OnDownloadCompleted(RtcErrorCode errorCode, string filePath, string fileID)
{
}
public void OnSpeechToTextCompleted(RtcErrorCode errorCode, string fileID, string text)
{
}
public void OnRecordingVolume(int volume)
{
}
public void OnPlayingVolume(int volume)
{
}
}
IRtcEngine rtcEngine = IRtcEngine.GetInstance();
void SetEvents(){
var voiceEngine = rtcEngine.VoiceEngine;
//监听事件
var voiceHandler = MyVoiceEventsHandler();//请自行保证对象的生命周期。
voiceEngine.SetEvent(voiceHandler);
//取消事件监听
voiceEngine.SetEvent(null);
}
鉴权
语音消息功能需要独立的 Token 鉴权。调用 IRtcVoiceEngine.ApplyAuth
接口实现鉴权功能,并由 IVoiceEngineCallback.OnAuth
事件通知。
本地的录制和播放不依赖此鉴权,但是上传文件、下载文件、语音转文字等服务依赖此鉴权,若鉴权没有成功,则上述功能将不可用。
不支持在 调试模式 下使用语音消息功能,即 Token 不能为空。如需接入 SDK 进行测试,请 提交工单 联系网易云信技术支持工程师。
示例代码:
C#IRtcEngine rtcEngine = IRtcEngine.GetInstance();
void Auth(){
var voiceEngine = rtcEngine.VoiceEngine;
long uid = 123456; //your user id
string token = "YOUR TOKEN";
voiceEngine.ApplyAuth(uid,token);
}
录制语音
语音消息录制仅支持 .aac
文件格式。因为 RTC SDK 不会自动创建文件夹,指定的录制文件所在的文件路径必须要保证已存在。
语音录制的相关接口为:
-
IRtcVoiceEngine.StopRecording
:完成录制正常完成录制都会通过
IVoiceEngineCallback.OnRecordCompleted
事件通知。 -
IRtcVoiceEngine.CancelRecording
:取消录制如果取消了本次录制,
IVoiceEngineCallback.OnRecordCompleted
事件将不再被通知。
语音消息的长度默认是 60 秒,您可以通过 IRtcVoiceEngine.SetMaxMessageLength
接口设置最大的录制时长。
同时开启录制和播放时,请不要使用同一个文件。
示例代码:
C#
IRtcEngine rtcEngine = IRtcEngine.GetInstance();
void AudioFileRecord(){
var voiceEngine = rtcEngine.VoiceEngine;
//开始录制
string recordFile = "xxxxx/xxx.aac"; //您的录制文件存放路径
voiceEngine.StartRecording(recordFile);
//结束录制
voiceEngine.StopRecording();
}
播放语音
语音录制的相关接口为:
IRtcVoiceEngine.PlayRecordedFile
:播放录制语音文件。IRtcVoiceEngine.StopPlayFile
:停止播放录制录音文件。
如果您需要监听事件通知,则可以监听:
-
播放结束由
IVoiceEngineCallback.OnPlayCompleted
事件通知。 -
音量变化由
IVoiceEngineCallback.OnPlayingVolume
事件通知。如果您通过
IRtcVoiceEngine.SetSpeakerVolume
接口设置播放音量为 0,则IVoiceEngineCallback.OnPlayingVolume
回调的音量将一直是 0。
示例代码:
C#
IRtcEngine rtcEngine = IRtcEngine.GetInstance();
void AudioFilePlay(){
var voiceEngine = rtcEngine.VoiceEngine;
//开始播放
string recordFile = "xxxxx/xxx.aac"; //您的录制文件存放路径
voiceEngine.PlayRecordedFile(recordFile);
//结束播放
voiceEngine.StopPlayFile();
}
上传文件
使用 IRtcVoiceEngine.UploadRecordedFile
上传语音消息文件,上传成功或者失败,都会通过 IVoiceEngineCallback.OnUploadCompleted
事件通知。上传成功后,会返回 file_id
,此文件 ID 用于文件下载以及语音识别等功能接口。
上传语音消息前,请先使用 IRtcVoiceEngine.ApplyAuth
进行鉴权,否则会返回失败。
示例代码:
C#
IRtcEngine rtcEngine = IRtcEngine.GetInstance();
void AudioFileUpload(){
var voiceEngine = rtcEngine.VoiceEngine;
//上传
string recordFile = "xxxxx/xxx.aac"; //您的录制文件存放路径
voiceEngine.UploadRecordedFile(recordFile);
}
下载文件
使用 IRtcVoiceEngine.DownloadRecordedFile
进行文件下载前,请先使用 IRtcVoiceEngine.ApplyAuth
进行鉴权,否则会返回失败。
完成下载或者失败,会通过 IVoiceEngineCallback.OnDownloadCompleted
事件通知。
上传语音消息前,请先使用 IRtcVoiceEngine.ApplyAuth
进行鉴权,否则会返回失败。
示例代码:
C#
IRtcEngine rtcEngine = IRtcEngine.GetInstance();
void AudioFileUpload(){
var voiceEngine = rtcEngine.VoiceEngine;
//下载
string fileID = "xxxxx"; //通过上传接口获得此文件 ID
string downloadFile = "xxxxx/xxx.aac"; //your file path
voiceEngine.DownloadRecordedFile(fileID,downloadFile);
}
语音转文字
使用 IRtcVoiceEngine.SpeechToText
进行语音转文字前,请先使用 IRtcVoiceEngine.ApplyAuth
进行鉴权,否则会返回失败。
完成语音转文字或者失败,会通过 IVoiceEngineCallback.OnSpeechToTextCompleted
事件通知。
示例代码:
C#));
IRtcEngine rtcEngine = IRtcEngine.GetInstance();
void AudioFileUpload(){
var voiceEngine = rtcEngine.VoiceEngine;
//语音转文字
string fileID = "xxxxx"; //通过上传接口获得此文件 ID
voiceEngine.SpeechToText(fileID);
}