发起通话前可以根据设备类型选择不同的媒体参数配置模式,从而达到优质的音视频通话效果。
菊风提供不同的媒体配置模式供开发者根据不同的场景选择,同时开放媒体设置参数供开发者灵活设置。具体如下:
发起通话前可以选择媒体配置模式,菊风提供如下三种模式供开发者选择
// 360P
public static final int MODE_360P = 0;
// 720P
public static final int MODE_720P = MODE_360P + 1;
// 小屏智能设备
public static final int MODE_INTELLINGENT_HARDWARE_SMALL = MODE_720P + 1;
// 大屏智能设备
public static final int MODE_INTELLINGENT_HARDWARE_LARGE = MODE_INTELLINGENT_HARDWARE_SMALL + 1;
其中,手机端可以选择四种模式中的一种,小屏智能硬件设备一般选择 MODE_INTELLINGENT_HARDWARE_SMALL 模式,大屏智能硬件设备一般选择 MODE_INTELLINGENT_HARDWARE_LARGE 模式。
在发起通话前,开发者可以根据设备类型选择一种媒体配置模式并通过下面的接口生成配置参数
/**
* 根据模式生成配置参数
* @param mode
* @return
*/
public static MediaConfig generateByMode(@Mode int mode);
生成配置参数后通过 JCCall 的 mediaConfig 属性进行设置
JCManager.shared.call.mediaConfig = JCCall.MediaConfig.generateByMode(JCCall.MediaConfig.MODE_INTELLINGENT_HARDWARE_SMALL);
其中,四种模式的媒体参数设置如下:
1、MODE_360P 模式的参数
参数 | 描述 |
---|---|
audioEnableCodecs | AMR |
audioAecMode | AEC_MODE_SDE |
audioArsEnable | 开启 |
audioArsBitrateMin | 20 |
audioArsBitrateMax | 75 |
audioRed | 开启 |
audioRxAnr | 关闭 |
audioRtx | 关闭 |
audioRxAgc | 关闭 |
audioQosAec | 开启 |
audioQosAnr | 开启 |
audioQosAgc | 开启 |
audioQosVad | 开启 |
videoEnableCodecs | H264-SVC;H264;VP8 |
videoResolutionRecvWidth | 640 |
videoResolutionRecvHeight | 360 |
videoResolutionSendWidth | 640 |
videoResolutionSendHeight | 360 |
videoBitrate | 800 |
videoSendFramerate | 24 |
videoArsEnable | 开启 |
videoArsBitrateMin | 50kpbs |
videoArsBitrateMax | 1500kbps |
videoArsFramerateMin | 1 |
videoArsFramerateMax | 10 |
videoRedFec | 开启 |
videoRecvFullScreen | 开启 |
videoSmallNalu | 开启 |
videoResolutionControl | 开启 |
2、MODE_720P 模式的参数
参数 | 描述 |
---|---|
audioAecMode | AEC_MODE_SDE |
audioArsEnable | 开启 |
audioArsBitrateMin | 20 |
audioArsBitrateMax | 75 |
audioRed | 开启 |
audioRxAnr | 关闭 |
audioRtx | 关闭 |
audioRxAgc | 关闭 |
audioQosAec | 开启 |
audioQosAnr | 开启 |
audioQosAgc | 开启 |
audioQosVad | 关闭 |
videoResolutionRecvWidth | 1280 |
videoResolutionRecvHeight | 720 |
videoResolutionSendWidth | 1280 |
videoResolutionSendHeight | 720 |
videoBitrate | 100 |
videoSendFramerate | 24 |
videoArsEnable | 开启 |
videoArsBitrateMin | 50kpbs |
videoArsBitrateMax | 1500kbps |
videoArsFramerateMin | 1 |
videoArsFramerateMax | 30 |
videoRedFec; | 开启 |
videoRecvFullScreen | 开启 |
videoSmallNalu | 开启 |
videoResolutionControl | 开启 |
3、MODE_INTELLINGENT_HARDWARE_SMALL 模式参数
参数 | 描述 |
---|---|
audioEnableCodecs | AMR |
audioAecMode | AEC_MODE_SDE |
audioArsEnable | 开启 |
audioArsBitrateMin | 2 |
audioArsBitrateMax | 12 |
audioRed | 关闭 |
audioRxAnr | 关闭 |
audioRtx | 关闭 |
audioRxAgc | 关闭 |
audioQosAec | 开启 |
audioQosAnr | 关闭 |
audioQosAgc | 开启 |
audioQosVad | 开启 |
videoEnableCodecs | H264-SVC;H264;VP8 |
videoResolutionRecvWidth; | 240 |
videoResolutionRecvHeight; | 240 |
videoResolutionSendWidth; | 352 |
videoResolutionSendHeight; | 288 |
videoBitrate | 50 |
videoSendFramerate | 10 |
videoArsEnable | 开启 |
videoArsBitrateMin | 视具体情况,手表以128*128 15帧 10kpbs |
videoArsBitrateMax | 200kpbs |
videoArsFramerateMin | 1 |
videoArsFramerateMax | 10 |
videoRedFec | 关闭 |
videoRecvFullScreen | 关闭 |
videoSmallNalu | 开启 |
videoResolutionControl | 关闭 |
4、MODE_INTELLINGENT_HARDWARE_LARGE 模式参数
参数 | 描述 |
---|---|
audioEnableCodecs | AMR |
audioAecMode | AEC_MODE_SDE |
audioArsEnable | 开启 |
audioArsBitrateMin | 2 |
audioArsBitrateMax | 12 |
audioRed | 关闭 |
audioRxAnr | 关闭 |
audioRtx | 关闭 |
audioRxAgc | 关闭 |
audioQosAec | 开启 |
audioQosAnr | 关闭 |
audioQosAgc | 开启 |
audioQosVad | 开启 |
videoEnableCodecs | H264-SVC;H264;VP8 |
videoResolutionRecvWidth; | 640 |
videoResolutionRecvHeight; | 340 |
videoResolutionSendWidth; | 640 |
videoResolutionSendHeight; | 360 |
videoBitrate | 50 |
videoSendFramerate | 10 |
videoArsEnable | 开启 |
videoArsBitrateMin | 视具体情况,手表以128*128 15帧 10kpbs |
videoArsBitrateMax | 2000kpbs |
videoArsFramerateMin | 1 |
videoArsFramerateMax | 10 |
videoRedFec | 关闭 |
videoRecvFullScreen | 开启 |
videoSmallNalu | 开启 |
videoResolutionControl | 关闭 |
除了选择提供的模式外,开发者还可以根据对应的属性对媒体参数进行自定义的设置,以满足不同场景的需求。媒体参数包括音频和视频参数。具体说明如下:
音频参数
参数 | 类型 | 描述 |
---|---|---|
audioEnableCodecs | NSString |
|
audioAecEnable | bool | 是否开启回声消除 |
audioAecMode | JCCallAecMode | 回声消除模式,具体参考AecMode枚举值 |
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 | 分辨率控制, 开启则分辨率随网络波动而变化, 关闭则固定分辨率 |
其中,AecMode 有以下值:
// 声学回声消除。支持在免提状态下的通话,对于iOS和Windows等性能较好的机型有效。
public static final int AEC_MODE_AEC = MtcCallDb.EN_MTC_EC_AEC;
// 使用操作系统提供的声学回声消除功能,支持在免提状态下的通话。对于多数iOS和Android等品牌手机有效,但部分机型可能无效。
public static final int AEC_MODE_OS = MtcCallDb.EN_MTC_EC_OS;
// 声学回声抑制,通过半双工方式实现回声抑制,通常不建议使用。
public static final int AEC_MODE_AES = MtcCallDb.EN_MTC_EC_AES;
// 软件自适应声学回声消除,对于大多数所有机型有效。但计算量比AEC稍大一些。SDE追踪延迟精度高,FDE能适应更大的延迟。
public static final int AEC_MODE_FDE = MtcCallDb.EN_MTC_EC_AEC_FDE;
// 软件自适应声学回声消除,对于大多数所有机型有效。但计算量比AEC稍大一些。SDE追踪延迟精度高,FDE能适应更大的延迟。
public static final int AEC_MODE_SDE = MtcCallDb.EN_MTC_EC_AEC_SDE;
开发者可根据具体的需求自行配置。
示例代码:
//音频参数
MediaConfig mediaConfig = new MediaConfig();
mediaConfig.audioEnableCodecs = "opus";
mediaConfig.audioAecMode = JCCall.MediaConfig.AEC_MODE_FDE;
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;
媒体参数设置之后,您可以开始 拨打通话 了。