自定义音频采集和播放 编辑文档

功能描述

一些特殊的场景中,比如用户已有自己的音频模块,或者有自定义采集或播放的需求。QttAudio SDK支持用户使用自定义的音频采集或播放。

普通用户可跳过该章节。

自定义采集

public class ChannelEngine {
/**
* 设置外部音频采集,在join前调用有效
* @param enable true,启用外部音频采集;false,关闭外部音频采集
* @param samplerate 外部音频采集的采样率
* @param channels 外部音频采集的声道数
* @return 0成功,其他失败
*/
public int setExternalRecorder(boolean enable, int samplerate, int channels);
/**
* 写入外部音频采集的数据,byte[]类型
* @param buffer 音频数据
* @param offset 音频数据偏移量
* @param len 音频数据长度
* @return 0成功,其实失败
*/
public int pushExternalRecordFrame(byte[] buffer, int offset, int len);
/**
* 写入外部音频采集的数据,ByteBuffer类型
* @param buffer 音频数据
* @param len 音频数据长度
* @return 0成功,其实失败
*/
public int pushExternalRecordFrame(ByteBuffer byteBuffer, int len);
}

实现步骤

  1. 进入频道(join)前,调用setExternalRecorder方法启用自定义音频采集。
  2. 持续调用pushExternalRecordFrame方法,将采集的音频数据写入SDK,最好是加入房间成功后进行写入。

自定义播放

public interface DataObserver {
/**
* 获取到数据
* @param byteBuffer 需要先rewind,再取出数据
* @param len 数据长度
* @return 如果修改了数据需要返回true;没修改返回false,减少一次内存拷贝
*/
boolean onData(ByteBuffer byteBuffer, int len);
}

public class ChannelEngine {
/**
* 设置自定义音频播放数据监听器
* @param enable true,启用自定义音频播放;false,不启用自定义音频播放
* @param observer 数据监听器
* @param samplerate 播放采样率,8000,16000,32000,44100,48000
* @param channels 播放声道数,1或者2
* @param bufSize 数据回调大小,影响observer的onData的len参数,如小于等于0为默认值(10ms的数据长度)
* @return 0为设置成功;其他为失败
*/
public int setExternalPlayer(bool enable, DataObserver observer, int samplerate, int channels, int bufSize);
}

实现步骤

  1. 进入频道(join)前,调用setExternalPlayer方法启用自定义音频播放。
  2. DataObserver会通过onData接口持续回调待播放的数据,开发者将数据从ByteBuffer中取出来自行播放。 ByteBuffer需要先rewind再使用,使用方法示例:

    boolean onData(ByteBuffer byteBuffer, int len) {
    byteBuffer.rewind();
    byte[] data = new byte[len];
    byteBuffer.get(data, 0, len);
    ...
    return false;
    }
野狗新手?
立即注册,为你提供安全可靠的实时通信云服务。
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题