自定义音频采集和渲染
createCustomAudioTrack
创建一个自定义音频采集轨道。
public abstract int createCustomAudioTrack(
Constants.AudioTrackType trackType, AudioTrackConfig config);
v4.2.0
如需在频道中发布多路自定义采集音频,可参考以下步骤:
-
调用该方法创建音频轨道并获得音频轨道 ID。
-
在每个频道的
ChannelMediaOptions
中,将publishCustomAudioTrackId
参数设置为你想要发布的音频轨道 ID,并将publishCustomAudioTrack
设置为true
。 -
调用
pushExternalAudioFrame
将trackId
指定为步骤 2 中指定的音频轨道 ID,即可实现在多个频道中发布对应的自定义音频源。
参数
参数名 | 描述 |
---|---|
trackType | 自定义音频轨道类型。详见 |
config | 自定义音频轨道配置。详见 |
返回值
-
方法调用成功,返回音频轨道 ID 作为该音频轨道的唯一标识。
-
方法调用失败,返回负值。
destroyCustomAudioTrack
销毁指定的音频轨道。
public abstract int destroyCustomAudioTrack(int trackId);
v4.2.0
参数
参数名 | 描述 |
---|---|
trackId | 调用 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
setExternalAudioSource [1/2]
设置外部音频采集参数。
public abstract int setExternalAudioSource(boolean enabled, int sampleRate, int channels);
该方法已废弃,请改用 createCustomAudioTrack
。
请在 joinChannel [1/2]
和 startPreview [1/2]
前调用该方法。
参数
参数名 | 描述 |
---|---|
enabled |
|
sampleRate | 外部音频源的采样率 (Hz),可设置为 8000,16000,32000,44100 或 48000。 |
channels | 外部音频源的通道数,可设置为 1 或 2:
|
返回值
-
0:方法调用成功。
-
< 0:方法调用失败。详见
错误码
了解详情和解决建议。
setExternalAudioSource [2/2]
设置外部音频采集参数。
public abstract int setExternalAudioSource(boolean enabled, int sampleRate, int channels, boolean localPlayback, boolean publish);
该方法已废弃,请改用 createCustomAudioTrack
。
注意: 请在加入频道前调用该方法。
参数
参数名 | 描述 |
---|---|
enabled | 是否开启使用外部音频源的功能:
|
sampleRate | 外部音频源的采样率 (Hz),可设置为 |
channels | 外部音频源的声道数,可设置为 |
localPlayback | 是否在本地播放外部音频源:
|
publish | 是否将音频发布到远端:
|
返回值
-
0:方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
pullPlaybackAudioFrame [1/2]
拉取远端音频数据。
public abstract int pullPlaybackAudioFrame(byte[] data, int lengthInByte);
使用该方法前,你需要调用 setExternalAudioSink
通知 app 开启并设置外部渲染。
调用该方法后,app 会采取主动拉取的方式获取远端已解码和混音后的音频数据,用于音频播放。
注意:
-
该方法仅支持拉取自采集的数据。如果你需要拉取 SDK 采集的数据,请不要调用该方法。
-
该方法需要在加入频道后调用。
-
开启外部音频渲染后,app 将无法从
onPlaybackAudioFrame
回调中获得数据。 -
该方法和
onPlaybackAudioFrame
回调相比,区别在于:-
SDK 通过
onPlaybackAudioFrame
回调将音频数据传输给 app。如果 app 处理延时,可能会导致音频播放抖动。 -
调用该方法后 app 会主动拉取音频数据。通过设置音频数据,SDK 可以调整缓存,帮助 app 处理延时,从而有效避免音频播放抖动。
-
参数
参数名 | 描述 |
---|---|
data | 待拉取的远端音频数据,数据类型为 |
lengthInByte | 音频数据长度,单位为字节。该参数的值由音频数据时长、 |
返回值
-
0:方法调用成功。
-
< 0:方法调用失败。详见
错误码
了解详情和解决建议。
pullPlaybackAudioFrame [2/2]
拉取远端音频数据。
public abstract int pullPlaybackAudioFrame(ByteBuffer data, int lengthInByte);
使用该方法前,你需要调用 setExternalAudioSink
(
通知 app 开启并设置外部渲染。enabled
: true)
调用该方法后,app 会采取主动拉取的方式获取远端已解码和混音后的音频数据,用于音频播放。
注意:
-
该方法需要在加入频道后调用。
-
该方法和
onPlaybackAudioFrame
回调相比,区别在于:-
onPlaybackAudioFrame
:SDK 通过该回调将音频数据传输给 app。如果 app 处理延时,可能会导致音频播放抖动。 -
pullPlaybackAudioFrame [1/2]
:App 主动拉取音频数据。通过设置音频数据,SDK 可以调整缓存,帮助 app 处理延时,从而有效避免音频播放抖动。
-
参数
参数名 | 描述 |
---|---|
data | 待拉取的远端音频数据,数据类型为 |
lengthInByte | 远端音频数据长度,单位为字节。 该参数的值由音频数据时长、 |
返回值
-
0:方法调用成功。
-
< 0:方法调用失败。详见
错误码
了解详情和解决建议。
pushExternalAudioFrame
推送外部音频数据。
public abstract int pushExternalAudioFrame(byte[] data, long timestamp, int sampleRate,
int channels, Constants.BytesPerSample bytesPerSample, int trackId);
注意:
调用该方法前,请将 ChannelMediaOptions
中的 publishCustomAudioTrackId
参数设置为你想要发布的音频轨道 ID,并将 publishCustomAudioTrack
设为 true
。
参数
参数名 | 描述 |
---|---|
data | 外部音频数据。 |
timestamp | 外部音频帧的时间戳(毫秒)。该参数为必填。你可以使用该时间戳还原音频帧顺序;在有视频的场景中(包含使用外部视频源的场景),该参数可以帮助实现音视频同步。 |
sampleRate | 外部音频渲染的采样率 (Hz),可设置为 8000,16000,32000,44100 或 48000。 |
channels | 外部音频渲染的声道数:
|
bytesPerSample | 每个采样点的字节数。对于 PCM 来说,一般使用 16 bit,即两个字节。 |
trackId | 音频轨道 ID。将该参数设置为 |
返回值
-
0:方法调用成功。
-
< 0:方法调用失败。详见
错误码
了解详情和解决建议。
setExternalAudioSink
设置外部音频渲染。
public abstract int setExternalAudioSink(boolean enabled, int sampleRate, int channels);
该方法适用于需要自行渲染音频的场景。开启外部音频渲染后,你可以调用 pullPlaybackAudioFrame [1/2]
拉取远端音频数据。App 可以对拉取到的原始音频数据进行处理后再渲染,获取想要的音频效果。
参数
参数名 | 描述 |
---|---|
enabled | 设置是否开启外部音频渲染:
|
sampleRate | 外部音频渲染的采样率 (Hz),可设置为 16000,32000,44100 或 48000。 |
channels | 外部音频渲染的声道数:
|
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。