2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java 双声道音频_Android 播放音频如何实现双声道效果

java 双声道音频_Android 播放音频如何实现双声道效果

时间:2020-10-20 09:50:54

相关推荐

java 双声道音频_Android 播放音频如何实现双声道效果

1 使用场景

Android 无法直接采集双声道,用户如果想实现播放的音频具有双声道效果,可以参考本文。

2 实现流程

双声道效果实现的主流程为:

下文将分别讲述各个步骤。

2.1 输入双声道数据

主播端输入的数据需要确保为双声道数据,有以下几种方式可以实现:

业务方通过外部采集接口,输入双声道 PCM 数据给 SDK 编码后再发送,流程如下图所示:

业务方通过外部采集接口,输入双声道 AAC 编码后数据给 SDK 发送,流程如下图所示:

音频外部采集和渲染使用详见: 高级功能指南-音频外部采集与渲染,本文不再赘述。

业务方通过外部音频前处理接口,将 SDK 采集的数据处理为双声道效果,再将 PCM 数据回传给 SDK 编码 ,流程如下图所示:

业务方通过外部音频前处理接口,将 SDK 采集的数据处理为双声道效果,再将 AAC 编码后数据回传给 SDK 编码 ,流程如下图所示:

音频前处理使用详见: 高级功能指南-音频前处理,本文不再赘述

请注意,业务方必须确保编码之前输入的 PCM 数据为双声道效果数据。如果采集为单声道数据,编码为双声道,那么这两个声道数据播放时也是不会有立体声效果的。

2.2 设置推流编码双声道

业务方调用该 API 设置编码双声道。该 API 需要在初始化 SDK 后,推流前调用。

ZegoLiveRoom.java

/**

* 设置推流音频声道数.

*

*

注意:

*

1. 必须在初始化 SDK,调用推流前设置。

*

2. setLatencyMode 设置为 ZEGOAPI_LATENCY_MODE_NORMAL 或 ZEGOAPI_LATENCY_MODE_NORMAL2 才能设置双声道(这两个模式下默认为单声道),在移动端双声道通常需要配合音频前处理才能体现效果; setLatencyMode 设置为 ZEGO_LATENCY_MODE_LOW3 强制为双声道,就算设置为单声道也是无效的(这个音频模式下只支持双声道)。

*

* @param count 声道数,1 或 2,默认为 1(单声道)

*/

public void setAudioChannelCount(int count)

2.3 设置混流编码双声道

混流模式下,主播连麦后,连麦的流会经过混流服务器。为了让观众听到双声道效果,需要设置混流服务器编码为双声道。该设置项是混流配置 ZegoCompleteMixStreamInfo 中的 channels:

/** 混流配置 */

public final class ZegoCompleteMixStreamInfo {

/** 输出流名或 url,

* @see #outputIsUrl

*/

public String outputStreamId;

/**

* true: outputStreamId 为完整 rtmp url,false: outputStreamId 为流名

*/

public boolean outputIsUrl;

/**

* 混流输出帧率

*/

public int outputFps;

/**

* 混流输出视频码率

*/

public int outputBitrate;

/**

* 混流输出音频码率

*/

public int outputAudioBitrate;

/**

* 混流输出视频分辨率宽

*/

public int outputWidth;

/**

* 混流输出视频分辨率高

*/

public int outputHeight;

/**

* 混流输出音频格式,默认值为 0。可选值为 0:默认编码;1:可选编码

*/

public int outputAudioConfig;

/**

* 混流输入流列表

*/

public ZegoMixStreamInfo[] inputStreamList;

/**

* 用户自定义数据

*

注意:必须使用{@link ByteBuffer#allocateDirect}创建, 否则数据不能传递给sdk

*/

public ByteBuffer userData;

/**

* 用户自定义数据长度.

*/

public int lenOfUserData;

/**

* 混流声道数, 默认为单声道.

*/

public int channels = 1;

/**

* 混流背景颜色,前三个字节为 RGB,即 0xRRGGBBxx

*/

public int outputBackgroundColor;

/**

* 混流背景图,支持预设图片,如 (preset-id://xxx)

*/

public String outputBackgroundImage;

}

混流参数的设置详见:高级功能指南-混流

2.4 播放双声道

由于 ZEGO SDK 默认使用双声道播放,用户使用 SDK 播放时,无需做额外的设置。但是,请注意,如果开发者采用音频外部采集和渲染,播放时需要使用双声道才会有立体声效果!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。