菊风已发布实时音视频2.0升级版(2.0版本说明),当前您正在访问1.0旧版本,点击此处可进入2.0升级版

# 处理原始音频数据

# 简介

原始音频数据,又称音频裸数据,是指音视频传输过程中获取到的纯音频数据。常见的原始音频数据格式为 PCM(脉冲编码调制)。这些音频采样数据(PCM等)经过音频编码压缩成为音频码流,从而降低音频的数据量,便于存储和传输。

菊风提供修改原始音频数据的功能。当有自行处理音视数据的需求时,您可以对捕捉到的语音数据进行处理;也可以对接收到的语音数据进行处理。

# 前提条件

在修改原始音频数据前,确保已经初始化了 JCMediaDevice 模块。

# 集成步骤

  1. 创建 JCAudioFrameCallbackImpl 类,遵守 JCAudioFrameCallback 协议。重写 onAudioInputFrame, onAudioOutputFrame 函数。
  2. 在开始通话前调用 registerAudioFrameCallback 。传入 JCAudioFrameCallbackImpl 实例对象。
  3. 发起通话或者加入频道。
  4. 在收到 onLeaveonStoponCallItemRemove 后调用 registerAudioFrameCallback ,传入 nil 来释放语音观测器对象。
// 创建 JCAudioFrameCallbackImpl 遵守 JCAudioFrameCallback 协议。
// 实现 onAudioInputFrame,onAudioOutputFrame 协议方法。
@interface JCAudioFrameCallbackImpl: NSObject <JCAudioFrameCallback>
@end
/**
 * 获得采集的音频
 *
 * @param inputId      输入源的自定义字符串
 * @param sampleRateHz 输入源的采样频率
 * @param channels     输入源的频道数量
 * @param buf         该帧的采样数据
 * @param playDelayMS  播放延时
 * @param recDelayMS   采集延时
 * @param clockDrift   时钟漂移
 */
- (void)onAudioInputFrame:(NSString *_Nonnull)inputId 
			 sampleRateHz:(int)sampleRateHz 
             	 channels:(int)channels 
                 	  buf:(unsigned char *_Nonnull)buf 
              playDelayMS:(int)playDelayMS 
               recDelayMS:(int)recDelayMS 
               clockDrift:(int)clockDrift;
/**
 * 获得播放的声音
 *
 * @param outputId    输出源的自定义字符串
 * @param sampleRateHz 输出源的采集频率
 * @param channels     输出源的采样通道数
 * @param buf         该帧的采样数据
 */
- (void)onAudioOutputFrame:(NSString *_Nonnull)outputId 
			  sampleRateHz:(int)sampleRateHz 
              	  channels:(int)channels 
                  	   buf:(unsigned char *_Nonnull)buf;
// 创建 JCAudioFrameCallbackImpl 实例
JCAudioFrameCallbackImpl *callback = [[JCAudioFrameCallbackImpl alloc] init];
// 设置音频数据监听
[_mediaDevice registerAudioFrameCallback:callback];
// 取消音频数据监听
[_mediaDevice registerAudioFrameCallback:nil];
最后更新时间: 2026/7/13 12:02:34