音频后处理

本章节主要介绍音视频SDK提供的各种音频后处理功能。后处理主要指的收到远端音频数据后的处理,主要分为单个远端用户PCM音频数据及播放前的PCM音频数据。目前音频后处理只提供简单的数据回调回调功能,暂不支持修改数据的功能。

音频后处理

单个用户PCM音频数据

如果用户期望获取某一个远端用户的PCM音频数据,可以通过 registerRemoteAudioCallBack注册相应的监听器。

参数 说明
account 期望监听的远端用户accid
callback 远端数据回调,多个用户可以共用一个callback ,null 表示反注册
public interface IAVChatRemoteAudioCallBack {
    /**
     * 远端用户 pcm 音频回调
     * 注意 :此回调是同步回调,并且数据只能读不能修改,一定要先拷贝有效数据( 回调结束后,原始的AudioFrame可能会被SDK复用修改 ),再投递到子线程去<br/> *
     * @param account    用户account
     * @param audioFrame 音频数据
     */
    void onAudioFrame(String account, AudioFrame audioFrame);
}
参数 说明
account 期望监听的远端用户accid
audioFrame 音频PCM 数据
// IAVChatRemoteAudioCallBack
IAVChatRemoteAudioCallBack callBack = new IAVChatRemoteAudioCallBack(){

 public void onAudioFrame(String account, AudioFrame audioFrame) {
 int len = audioFrame.getChannels() * audioFrame.getSamplesPerChannel() * audioFrame.getBytesPerSample();
 byte[] bytes = new byte[len];
 audioFrame.getData().get(bytes, 0, len);
 backgroundHandler.post(new Runnable() {
            @Override
            public void run() {
                    outputStream.write(bytes)
                    }
                });
     }
    }
};
// 注册监听器
AVChatManager.getInstance().registerRemoteAudioCallBack(account, callBack);

//使用完了,反注册监听器
AVChatManager.getInstance().registerRemoteAudioCallBack(account, null);

播放PCM音频数据回调

如果用户期望获取播放前的PCM音频数据,可以通过 registerPlayAudioCallBack注册相应的监听器。

    /**
     * 注册播放前 pcm 音频数据回调
     *
     * @param callback 监听器 ,填 null 表示取消之前的注册的
     *                 说明:如果用户需要特定的采集率但又不想自己重采样,可以修改{@link AVChatParameters#KEY_AUDIO_PLAYBACK_DEFAULT_SAMPLE_RATE}
     * @return 是否注册成功
     */
    public abstract boolean registerPlayAudioCallBack(IAVChatPlayAudioCallBack callback);
参数 说明
callback 播放前视频数据回调 , null 为取消监听
public interface IAVChatPlayAudioCallBack {

    /**
     * 播放前 pcm 音频数据回调<br/>
     * 注意 :此回调是同步回调,并且数据只能读不能修改,一定要先拷贝有效数据( 回调结束后,原始的AudioFrame可能会被SDK复用修改 ),再投递到子线程去<br/>
     * @param audioFrame 音频数据
     * @return true : 保留原始数据,继续播放 , false :丢弃原始数据,不再播放
     */
    boolean onPlayAudioFrame(AudioFrame audioFrame);
}
参数 说明
audioFrame 音频PCM 数据

// IAVChatPlayAudioCallBack IAVChatPlayAudioCallBack callBack = new IAVChatPlayAudioCallBack(){

public boolean onPlayAudioFrame(AudioFrame audioFrame) { int len = audioFrame.getChannels() audioFrame.getSamplesPerChannel() audioFrame.getBytesPerSample(); byte[] bytes = new byte[len]; audioFrame.getData().get(bytes, 0, len); backgroundHandler.post(new Runnable() { @Override public void run() { outputStream.write(bytes) } }); }; return true; }

// 注册 AVChatManager.getInstance().registerPlayAudioCallBack(callBack);

//使用完了,取消注册 AVChatManager.getInstance().registerPlayAudioCallBack(null); `