媒体参数设置
发起通话前可以根据设备类型选择不同的媒体参数配置模式,从而达到优质的音视频通话效果。
菊风提供不同的媒体配置模式供开发者根据不同的场景选择,同时开放媒体设置参数供开发者灵活设置。具体如下:
/// 360P
JCCallMediaConfigMode360P,
/// 720P
JCCallMediaConfigMode720P,
/// 智能硬件场景,比如会和手表通话等
JCCallMediaConfigModeIntelligentHardware,
手机端通话任选其一; 智能硬件通话,一般选择 JCCallMediaConfigModeIntelligentHardware 模式。
发起通话前,开发者可以根据具体的场景选择一种媒体配置模式并通过下面的接口生成配置参数:
/// 根据模式生成配置参数
/// @param mode 模式
+(JCCallMediaConfig* __nonnull)generateByMode:(JCCallMediaConfigMode)mode;
生成配置参数后调用 JCCall 里的 mediaConfig 属性进行设置:
JCManager.shared.call.mediaConfig = [JCCallMediaConfig generateByMode:JCCallMediaConfigModeIntelligentHardware];
其中,三种模式的媒体参数设置如下:
1、JCCallMediaConfigMode360P 模式的参数
参数 |
描述 |
---|---|
audioAecMode |
JCCallAecModeFDE |
audioArsEnable |
开启 |
audioArsBitrateMin |
20 |
audioArsBitrateMax |
76 |
audioRed |
开启 |
audioRxAnr |
关闭 |
audioRtx |
开启 |
audioRxAgc |
关闭 |
audioQosAec |
开启 |
audioQosAnr |
开启 |
audioQosAgc |
开启 |
audioQosVad |
开启 |
videoResolutionRecvWidth |
640 |
videoResolutionRecvHeight |
360 |
videoResolutionSendWidth |
640 |
videoResolutionSendHeight |
360 |
videoBitrate |
100 |
videoSendFramerate |
30 |
videoArsEnable |
开启 |
videoArsBitrateMin |
30kpbs |
videoArsBitrateMax |
800kbps |
videoArsFramerateMin |
0 |
videoArsFramerateMax |
30 |
videoRedFec |
开启 |
videoRecvFullScreen |
开启 |
videoSmallNalu |
开启 |
videoResolutionControl |
开启 |
2、JCCallMediaConfigMode720P
参数 |
描述 |
---|---|
audioAecMode |
JCCallAecModeFDE |
audioArsEnable |
开启 |
audioArsBitrateMin |
20 |
audioArsBitrateMax |
76 |
audioRed |
开启 |
audioRxAnr |
关闭 |
audioRtx |
开启 |
audioRxAgc |
关闭 |
audioQosAec |
开启 |
audioQosAnr |
开启 |
audioQosAgc |
开启 |
audioQosVad |
开启 |
videoResolutionRecvWidth |
1280 |
videoResolutionRecvHeight |
720 |
videoResolutionSendWidth |
1280 |
videoResolutionSendHeight |
720 |
videoBitrate |
100 |
videoSendFramerate |
30 |
videoArsEnable |
开启 |
videoArsBitrateMin |
30kpbs |
videoArsBitrateMax |
2100kbps |
videoArsFramerateMin |
0 |
videoArsFramerateMax |
30 |
videoRedFec; |
开启 |
videoRecvFullScreen |
开启 |
videoSmallNalu |
开启 |
videoResolutionControl |
开启 |
3、JCCallMediaConfigModeIntelligentHardware
参数 |
描述 |
---|---|
audioAecMode |
JCCallAecModeFDE |
audioArsEnable |
开启 |
audioArsBitrateMin |
5 |
audioArsBitrateMax |
20 |
audioRed |
开启 |
audioRxAnr |
关闭 |
audioRtx |
开启 |
audioRxAgc |
关闭 |
audioQosAec |
开启 |
audioQosAnr |
开启 |
audioQosAgc |
开启 |
audioQosVad |
开启 |
videoResolutionRecvWidth; |
视具体情况,手表的话一般128*128 |
videoResolutionRecvHeight; |
视具体情况,手表的话一般128*128 |
videoResolutionSendWidth; |
视具体情况,手表的话一般640*360 |
videoResolutionSendHeight; |
视具体情况,手表的话一般640*360 |
videoBitrate |
30 |
videoSendFramerate |
15 |
videoArsEnable |
开启 |
videoArsBitrateMin |
视具体情况,手表以128*128 15帧 10kpbs |
videoArsBitrateMax |
视具体情况,手表以128*128 15帧 75kpbs |
videoArsFramerateMin |
0 |
videoArsFramerateMax |
15 |
videoRedFec |
开启 |
videoRecvFullScreen |
开启 |
videoSmallNalu |
开启 |
videoResolutionControl |
开启 |
除了选择菊风提供的媒体配置模式外,开发者还可以根据对应的属性对媒体参数进行自定义的设置,以满足不同场景的需求。媒体参数包括音频和视频参数。具体说明如下:
音频参数
参数 |
类型 |
描述 |
---|---|---|
audioEnableCodecs |
NSString |
|
audioAecEnable |
bool |
是否开启回声消除 |
audioAecMode |
JCCallAecMode |
回声消除模式,具体参考JCCallAecMode枚举值 |
audioArsEnable |
bool |
是否开启音频 ars |
audioArsBitrateMin |
int |
音频最小码率,kb |
audioArsBitrateMax |
int |
音频最大码率,kb |
audioRed |
bool |
|
audioRxAnr |
bool |
一般接收端声音质量好可关闭噪声抑制,减少声音dsp处理,降低功耗 |
audioRtx |
bool |
RTX重传, 同FEC、NACK一起用,降低功耗, 网络不稳定,一般选择打开 |
audioRxAgc |
bool |
接收端声音自动增益控制, 接收端声音过大过小时,可尝试打开 |
audioQosAec |
bool |
回声消除 |
audioQosAnr |
bool |
|
audioQosAgc |
bool |
发送端声音自动增益控制 |
audioQosVad |
bool |
静音检测 |
视频参数
参数 |
类型 |
描述 |
---|---|---|
videoEnableCodecs |
NSString |
|
videoResolutionRecvWidth |
int |
视频接收宽 |
videoResolutionRecvHeight |
int |
视频接收高 |
videoResolutionSendWidth |
int |
视频发送宽 |
videoResolutionSendHeight |
int |
视频发送高 |
videoBitrate |
int |
|
videoSendFramerate |
int |
发送帧率 |
videoArsEnable |
bool |
是否开启视频 ars,即视频自动码率控制,开启之后可以保证编码码流的顺利传输和信道带宽的充分利用 |
videoArsBitrateMin |
int |
视频最小码率,kb |
videoArsBitrateMax |
int |
视频最大码率,kb |
videoArsFramerateMin |
int |
视频最小帧率,kb |
videoArsFramerateMax |
int |
视频最大帧率,kb |
videoRedFec |
bool |
|
videoRecvFullScreen |
bool |
影响本端视频请求分辨率,默认设置为true
|
videoSmallNalu |
bool |
视频数据以SmallNalu方式打包, 一个包打包的数据多,减少包头的码率,从而降低功耗 |
videoResolutionControl |
bool |
分辨率控制, 开启则分辨率随网络波动而变化, 关闭则固定分辨率 |
其中,JCCallAecMode 有以下值:
/// 声学回声消除。支持在免提状态下的通话,对于iOS和Windows等性能较好的机型有效。
JCCallAecModeAEC = 0, // MtcCallDb.EN_MTC_EC_AEC;
/// 使用操作系统提供的声学回声消除功能,支持在免提状态下的通话。对于多数iOS和Android等品牌手机有效,但部分机型可能无效。
JCCallAecModeOS = 1, // MtcCallDb.EN_MTC_EC_OS;
/// 声学回声抑制,通过半双工方式实现回声抑制,通常不建议使用。
JCCallAecModeAES = 2, // MtcCallDb.EN_MTC_EC_AES;
/// 软件自适应声学回声消除,对于大多数所有机型有效。但计算量比AEC稍大一些。SDE追踪延迟精度高,FDE能适应更大的延迟。
JCCallAecModeFDE = 3, // MtcCallDb.EN_MTC_EC_AEC_FDE;
/// 软件自适应声学回声消除,对于大多数所有机型有效。但计算量比AEC稍大一些。SDE追踪延迟精度高,FDE能适应更大的延迟。
JCCallAecModeSDE = 4, // MtcCallDb.EN_MTC_EC_AEC_SDE;
开发者可根据具体的需求自行配置。
示例代码:
//音频参数
JCCallMediaConfig* mediaConfig = [JCCallMediaConfig new];
mediaConfig.audioEnableCodecs = @"opus";
mediaConfig.audioAecMode = JCCallAecModeFDE;
mediaConfig.audioArsEnable = true;
mediaConfig.audioArsBitrateMax = 20;
mediaConfig.audioArsBitrateMin = 5;
mediaConfig.audioRed = true;
mediaConfig.audioRxAnr = false;
mediaConfig.audioRtx = true;
mediaConfig.audioRxAgc = false;
mediaConfig.audioQosAec = true;
mediaConfig.audioQosAnr = true;
mediaConfig.audioQosAgc = true;
mediaConfig.audioQosVad = true;
//视频参数
mediaConfig.videoEnableCodecs = @"H264";
mediaConfig.videoResolutionRecvWidth = 128;
mediaConfig.videoResolutionRecvHeight = 128;
mediaConfig.videoResolutionSendWidth = 640;
mediaConfig.videoResolutionSendHeight = 360;
mediaConfig.videoBitrate = 30;
mediaConfig.videoSendFramerate = 15;
mediaConfig.videoArsEnable = true;
mediaConfig.videoArsBitrateMax = 75;
mediaConfig.videoArsBitrateMin = 10;
mediaConfig.videoArsFramerateMax = 15;
mediaConfig.videoArsFramerateMin = 0;
mediaConfig.videoRedFec = true;
mediaConfig.videoRecvFullScreen = true;
mediaConfig.videoSmallNalu = true;
mediaConfig.videoResolutionControl = true;
JCManager.shared.call.mediaConfig = mediaConfig;