iOS 双声道效果实现方式

iOS 无法直接采集双声道,用户如果想实现播放的音频具有双声道效果,可以参考本文。本文为即构科技音视频SDK(ZegoLiveRoom SDK )高级功能系列第九篇——双声道。

双声道效果实现的主流程为:
在这里插入图片描述
下文将分别讲述各个步骤。

1、 输入双声道数据

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

1.1 业务方通过外部采集接口,输入双声道 PCM 数据给 SDK 编码后再发送,流程如下图所示:
在这里插入图片描述
1.2 业务方通过外部采集接口,输入双声道 AAC 编码后数据给 SDK 发送,流程如下图所示:
在这里插入图片描述
音频外部采集和渲染使用详见: 音频外部采集与渲染,本文不再赘述。

1.3 业务方通过外部音频前处理接口,将 SDK 采集的数据处理为双声道效果,再将 PCM 数据回传给 SDK 编码 ,流程如下图所示:
在这里插入图片描述
1.4 业务方通过外部音频前处理接口,将 SDK 采集的数据处理为双声道效果,再将 AAC 编码后数据回传给 SDK 编码 ,流程如下图所示:
在这里插入图片描述
请注意,业务方必须确保编码之前输入的 PCM 数据为双声道效果数据。如果采集为单声道数据,编码为双声道,那么这两个声道数据播放时也是不会有立体声效果的。

2、设置推流编码双声道

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

ZegoLiveRoomApi-Publisher.h

/**
 设置推流音频声道数

 @param count 声道数,1 或 2,默认为 1(单声道)
 @discussion 必须在初始化 SDK,调用推流前设置。
 @note setLatencyMode 设置为 ZEGOAPI_LATENCY_MODE_NORMAL 或 ZEGOAPI_LATENCY_MODE_NORMAL2 才能设置双声道(这两个模式下默认为单声道),在移动端双声道通常需要配合音频前处理才能体现效果; setLatencyMode 设置为 ZEGO_LATENCY_MODE_LOW3 强制为双声道,就算设置为单声道也是无效的(这个音频模式下只支持双声道)。
 */
- (void)setAudioChannelCount:(int)count;

3、设置混流编码双声道

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

@interface ZegoCompleteMixStreamConfig : NSObject

/**  outputIsUrl 为 YES,则此值为 Url;否则为流名 */
@property (copy) NSString *outputStream;
/**  输出为流名,或 Url */
@property BOOL outputIsUrl;
/**  输出帧率 */
@property int outputFps;
/**  输出码率 */
@property int outputBitrate;
/**  输出分辨率 */
@property CGSize outputResolution;
/**  音频编码 */
@property int outputAudioConfig;
/** 混流编码声道数 */
@property int channels;
/**  输入流列表 */
@property (strong) NSMutableArray<ZegoMixStreamInfo*> *inputStreamList;
/** 用户自定义数据 */
@property NSData* userData;

@end

混流参数的设置详见:混流(音视频SDK高级功能二)

4、播放双声道

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

猜你喜欢

转载自blog.csdn.net/sinat_20146421/article/details/84440413