场景模式
针对音频和视频我们提供了不同的场景模式提供用户选择。
音频模式
介绍
对于不同的音视频实际使用场景,用户对于流量和音质的要求都是不一样的,由于人声和音乐的特性不同,音质要求也不同。我们总结归纳了几种模式:基础通话模式、高清通话模式、高清音乐模式。该参数在通话发起的扩展字段中调用,参考kNIMVChatAudioMode,是针对kNIMVChatAudioHighRate的升级参数。
基础通话模式:该模式主要用于对音质要求一般对流量消耗敏感的场景,该模式下音频采样率为16KHz
,各个音频预处理开关打开,完全满足人声通话的音质要求,流量和电量消耗相对较小。
高清通话模式:该模式主要用于对通话音质要求较高且通话过程不存在音乐的场景,该模式下音频采样率为48KHz
,各个音频预处理开关打开,满足高音质人声通话的需求。
高清音乐模式:该模式用于对音乐流畅度与音质均有高要求的场景(如在线音乐教学等场景),该模式下音频采样率为48KHz
,前处理与编码器均针对音乐场景做了定制优化,在码率分配上会更多考虑音频码率,能够很好地保留乐器高音信息,此场景模式推荐以音乐为主的音频场景使用。
参数说明
- NIMVChatAudioMode
枚举定义 | 值 | 说明 |
---|---|---|
kNIMVChatAdModeDefault | 0 | 默认值,此时参考kNIMVChatAudioHighRate |
kNIMVChatAdModeNormal | 1 | 基础通话,kNIMVChatAudioHighRate无效 |
kNIMVChatAdModeHighVoip | 2 | 高清语音,kNIMVChatAudioHighRate无效 |
kNIMVChatAdModeHighMusic | 3 | 高清音乐,kNIMVChatAudioHighRate无效 |
动态切换视频自适应策略
API介绍
基于用户场景对于视频清晰度与流畅度的不同要求,我们在精准探测带宽的基础上,提供两种通用视频调控策略:清晰优先策略、流畅优先策略和一种场景调控策略屏幕共享场景调控策略。等同于发起时的kNIMVChatVEncodeMode。
清晰优先策略:该策略主要用于对视频清晰度要求较高的场景,在网络带宽受限情况下,允许通过自适应调节码率、帧率等视频参数,优先保障视频清晰度(画质),极端网络条件下将最多下调一次视频清晰度。
流畅优先策略:该策略主要用于对视频流畅度要求较高的场景,在网络带宽首先情况下,允许通过自适应调节码率、视频清晰度等视频参数,优先保障视频流畅度。
屏幕共享场景调控策略:该策略主要用于在线教育等场景下要求在任何网络状况下均不下调分辨率的情况,网络状况不佳时帧率会降到数帧,推荐在PC屏幕共享进行在线教学等特定场景下使用。
API原型
C++
static void SelectVideoAdaptiveStrategy(NIMVChatVideoEncodeMode mode, const std::string& json_extension, Opt2Callback cb)
File: nim_cpp_vchat.h
Namespace: nim
Class: VChat
C#
static void NIMVChatSelectVideoAdaptiveStrategy(NIMVChatVideoEncodeMode mode, string json_extension, NIMVChatOptHandler cb)
Namespace: NIM
Class: VChatAPI
C
NIM_SDK_DLL_API void nim_vchat_select_video_adaptive_strategy(enum NIMVChatVideoEncodeMode mode, const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data)
File: nim_vchat.h
参数说明
- NIMVChatVideoEncodeMode
枚举定义 | 值 | 说明 |
---|---|---|
kNIMVChatVEModeNormal | 0 | 默认值,清晰优先 |
kNIMVChatVEModeFramerate | 1 | 流畅优先 |
kNIMVChatVEModeQuality | 2 | 清晰优先 |
kNIMVChatVEModeScreen | 3 | 屏幕共享场景调控策略,sdk不会根据网络调整分辨率 |
返回值说明
调用结果返回见回调函数
示例
C++
void OnOptCallback(bool ret, int code, const char *json_extension) { ... } void foo(const std::string& session_id) { nim::VChat::SelectVideoAdaptiveStrategy(kNIMVChatVEModeScreen, "", &OnOptCallback); }
C#
NIMVChatOptHandler _cb = null; _cb = new NIMVChatOptHandler((ret, code, json_extension) => { if (ret) { ... } }); VChatAPI.NIMVChatSelectVideoAdaptiveStrategy(kNIMVChatVEModeScreen, "",_cb);
C
void OnOptCallback(bool ret, int code, const char *json_extension, const void *user_data) { if (user_data) { ... } } typedef void(*nim_vchat_select_video_adaptive_strategy)(const char *json_extension, nim_vchat_opt_cb_func cb, const void *user_data); void foo() { nim_vchat_select_video_adaptive_strategy func = (nim_vchat_select_video_adaptive_strategy) GetProcAddress(hInst, "nim_vchat_select_video_adaptive_strategy"); func(kNIMVChatVEModeScreen, "", &OnOptCallback, nullptr); }