音视频通话 2.0
Android
动态与公告
更新日志(V4.6)
更新日志(V5)
活动与公告
【活动】音视频通话内容安全检测限时补贴
【活动】赠送100万分钟音视频通话时长
【邀测】音视频通话2.0V5.3邀请公测
新手接入指南
产品简介
产品介绍
功能特性
产品优势
应用场景
基本概念
使用限制
性能指标
产品计费
按量计费
资源包
体验 Demo
下载 SDK 和示例代码
升级指南
快速开始
快速跑通 Sample Code
接入流程
创建应用
开通服务
集成 SDK
实现音视频通话
Token 鉴权
高级 Token 鉴权
基础功能
设置音频属性
设置视频属性
设置视频旋转方向
设置通话音量
屏幕共享
音频共享
监测发言者音量
通话前网络质量探测
通话中质量监测
进阶功能
音频管理
客户端音频录制
原始音频数据
美声变声与混响
耳返
自定义音频采集与渲染
音效与伴音
设置音频订阅优先级
音频裸流传输
媒体补充增强信息SEI
视频管理
视频截图
水印
云信美颜
相芯美颜
自定义视频采集
虚拟背景
视频图像畸变矫正
视频裸流传输
多房间管理
设备管理
视频设备管理
音频设备管理
媒体流管理
跨房间媒体流转发
媒体流加密
视频流回退
云端录制
使用云代理
本地服务端录制
AI 融合功能
AI 超分
AI 降噪
场景实践
1 对 1 娱乐社交
语聊房
PK连麦
在线教育
互联网问诊
最佳实践
音视频参数配置推荐
房间连接状态管理
实现音视频安全检测
轻松构建本土Clubhouse
API 参考
Android API 参考
服务端 API
错误码(V5)
错误码(V4.x)
控制台指南
常见问题处理
FAQ
错题集
获取音频 Dump 文件
音频常见问题排查
视频常见问题排查
服务协议

客户端音频录制

更新时间: 2023/05/17 10:31:15

NERTC SDK 在实时音视频通话过程中,支持客户端录制和服务端录制两种录制方式。其中客户端录制支持对通话过程的实时音频录制和循环缓存录制,录制文件保存在用户本地设备中,适用于通话过程录音场景及对游戏场景中对音频问题的定位和排查。

功能介绍

客户端音频录制指在通话过程中将房间内混流后的音频流录制下来,并存放在用户本地设备中以供后续回放或存档。NERTC SDK 支持通过客户端进行实时音频录制或循环缓存录制,每次录制生成一个音频文件,其中包含房间内所有用户混流后的音频数据。开启录制时可以指定录制文件的存放路径、格式和内容、录制采样率及音质、循环缓存最大时长等。

目前支持的音频格式包括:

  • WAV:文件大,音质保真度高。
  • AAC:文件小,有一定的音质损失。

播放录制文件时,您可以选择使用系统默认的播放器,或者使用网易云信播放器 SDK,具体请参考点播

注意事项

  • 文件后缀必须以 .wav.aac 结尾。

  • 加入房间后才能开始录音。

  • 客户端只能同时运行一个录音任务。正在录音时,若您重复调用音频录制接口,会结束当前录音任务,并重新开始新的录音任务。

  • 在您离开房间时,录音任务会自动停止。您也可以在通话中随时调用 stopAudioRecording 方法手动停止录音。

  • 调用原先的 startAudioRecording 方法只能进行实时音频录制,调用全新的 startAudioRecordingWithConfig 方法可以进行实时音频录制或循环缓存录制,网易云信推荐您使用新版接口,方便您自由切换录制模式;调用其中任意一个音频录制接口且未停止的情况下,调用另外一个接口会自动结束本次音频录制,并开始新的音频录制。

  • 在循环缓存录制模式下,若音频录制时长超过指定缓存时长,则最新音频数据会对原先的音频轨道进行覆盖;例如:设置缓存时长为 15 分钟,音频录制时长为 20 分钟,最终生成第 5 至 第 20 分钟的音频录制文件。

实现方法

API 调用时序

uml diagram

配置步骤

  1. 调用 setNERtcCallback 方法设置录制功能的 onAudioRecording 回调以接收录制过程中的录制信息。

  2. 在加入房间后,调用 startAudioRecordingWithConfig 方法开启音频录制。调用此方法时,您需要设置 recordFilePathrecordSampleRate 等参数指定录音文件的配置。相关参数的含义如下。

    • recordFilePath:录音文件在本地保存的绝对路径,例如:sdcard/xxx/audio.aac。目前仅支持 WAV 或 AAC 文件格式。

    • recordSampleRate:录音采样率。该参数单位为 Hz,可以取值为 16000、32000、44100 或 48000,默认值为 32000。

    • recordQuality:录音音质。可以指定 AAC 格式的录音文件为低音质、中音质或高音质,默认为中音质。

    • recordPosition:录音对象。相关枚举值如下。

      • MIXED_RECORDING_AND_PLAYBACK(默认):录制房间内所有成员混流后的音频数据。
      • RECORDING:仅录制本地用户发布的音频流。
      • PLAYBACK:仅录制所有远端用户混流后的音频数据。
    • recordCycleTime:循环缓存的最大时长跨度。该参数单位为秒,可以取值为 0、10、60、360、900,默认值为 0,即实时写文件。

  3. 启用该方法后,SDK 会触发第一步注册的 onAudioRecording 回调,返回音频录制状态及录音文件保存路径。

  4. 需要结束音频录制时,调用 stopAudioRecording 方法手动停止音频录制,同时 SDK 会触发相关回调。

    若您离开房间前未手动停止录音,离开房间后录音进程会自动结束;若您未手动停止本次音频录制又再次调用 startAudioRecordingWithConfig 方法,本次录音文件会自动保存至本地指定路径,并开启新的录制任务。

示例代码

以实时音频录制为例,示例代码如下。

//设置录制回调
NERtcEx.getInstance().setNERtcCallback(callbackEx);

if (open) {
    File audioRecordDir = BaseActivity.this.getExternalFilesDir("audio_record");
    if (audioRecordDir == null) {
        audioRecordDir = Environment.getExternalStorageDirectory();
    }
    audioRecordDir.mkdirs();
    NERtcAudioRecordingConfiguration config = new NERtcAudioRecordingConfiguration();
    config.recordFilePath = new File(audioRecordDir, audioRecordName).getAbsolutePath();
    config.recordSampleRate = audioRecordSampleRate;
    config.recordQuality = audioRecordQuality;
    config.recordPosition = MIXED_RECORDING_AND_PLAYBACK;
    NERtcAudioRecordingConfiguration.NERtcAudioRecordingCycleTime cTime = CYCLE_TIME_0;
    config.recordCycleTime = cTime;
    ret = NERtcEx.getInstance().startAudioRecordingWithConfig(config);
} 
else {
    ret = NERtcEx.getInstance().stopAudioRecording();
}

private final NERtcCallbackEx callbackEx = new NERtcCallbackEx() {
   //收到录制回调
   @Override
   public void onAudioRecording(int code, String filePath) {
     //根据返回的code去处理相应的逻辑
     switch(code) {
         case AUDIO_RECORD_ERROR_SUFFIX:
         {
             //后缀名非法,目前只支持 .aac 或者 .wav 文件
         }
         break;
         case AUDIO_RECORD_OPEN_FILE_FAILED:
         {
             //无法创建录音文件,原因通常包括:1) 应用没有磁盘写入权限 2) 文件路径不存在
         }
         break;
         case AUDIO_RECORD_START:
         {
             //接口调用成功,开始录制回调
         }
         break;
         case AUDIO_RECORD_ERROR:
         {
             //录制错误,原因通常为磁盘空间已满,无法写入
         }
         break;
         case AUDIO_RECORD_FINISH:
         {
             //录制完成,结束。
         }
         break;
         default:break;
     }
   }
}



API 参考

方法 功能描述
startAudioRecording 开启实时音频录制
startAudioRecordingWithConfig 开启实时音频录制或音频缓存录制
onAudioRecording 音频录制回调
stopAudioRecording 停止音频录制
此文档是否对你有帮助?
有帮助
我要吐槽
  • 功能介绍
  • 注意事项
  • 实现方法
  • API 调用时序
  • 配置步骤
  • 示例代码
  • API 参考