场景化音视频配置
更新时间: 2024/09/18 16:26:13
功能描述
为方便开发者快速接入,降低开发者接入门槛,SDK 通过大量线上数据验证,沉淀出多种场景化配置方案。开发者可根据所需场景,选择对应的房间模式,SDK 将自动应用适合该场景的音视频编解码器、音视频参数、流控策略等配置,从而快速实现该场景下的最佳效果。当前支持场景包括标准 1v1 音视频通话、高画质 1v1 音视频通话、标准语聊房、高品质语聊房、会议。
注意事项
- 同一个房间内的用户,建议使用同一种房间场景,以获得最佳效果。
- 若您的 App 有多种音视频业务场景,例如,同时有 1v1 音视频通话场景和标准语聊房场景。您可以在不销毁引擎 (destroyEngine) 的前提下,在退出房间后, 通过
setChannelProfile
切换场景,然后再登录其他房间。 - 设置场景会影响音视频码率、帧率、视频分辨率、视频大小流模式、自动打开视频、自动订阅视频、传输策略。
- 调用
setChannelProfile
将覆盖上一次调用此函数设置的场景。 - 调用
setChannelProfile
函数设置场景类型为视频 1对1 呼叫场景、清晰度较高的 1对1 呼叫场景等 v5.5.40 新增的房间场景将覆盖您通过setVideoConfig
和setAudioProfile
等 API 设置的音视频相关配置,因此建议先第一时间设置场景再通过其他 API 调整音视频配置。 - 版本 v5.5.40 之前就存在通信场景和直播场景,设置通信场景和直播场景,不会覆盖
setVideoConfig
和setAudioProfile
等 API 设置的音视频相关配置。
实现方式
设置房间场景参数中的 channelProfile
(NERtcChannelProfileType
) 字段指定一个场景,您可以根据实际音视频业务场景来选择。
SDK 支持下列场景
场景 (支持版本:5.5.40 及以上) | 场景描述 | 关键配置说明 |
---|---|---|
VideoCall | 视频 1对1 呼叫场景。适用于 1v1 视频场景。 | • 分辨率:360P。 • 帧率:15 fps。 • 关闭视频大小流模式。 • 自动打开视频。 • 自动订阅视频。 • 传输策略为保清晰度,高码流。 • 音频编码采样率为16k,码率为20kbps。 |
HighQualityVideoCall | 清晰度较高的 1对1 呼叫场景,与VideoCall 场景类似,但该场景默认采用了比 StandardVideoCall 场景更高的视频配置,适用于对画质要求较高的视频通话场景。 | • 分辨率:540P。 • 帧率:15 fps。 • 关闭视频大小流模式。 • 自动打开视频。 • 自动订阅视频。 • 传输策略为保清晰度,高码流。 |
Chatroom | 语聊房场景,此场景默认不开启摄像头。建议存在音乐的语聊房场景选择高品质语聊房场景配置。 | • 取消自动打开视频。 • 传输策略为保清晰度,高码流。 • 音频编码采样率为48k,码率为48kbps。 |
HighQualityChatroom | 高品质语聊房场景,与 Chatroom 场景类似,但此场景默认采用了比 Chatroom 场景下更高的音频配置,适用于对音质要求较高的多人纯语音通话场景。 | • 取消自动打开视频。 • 传输策略为保清晰度,高码流。 • 音频编码采样率为48k,码率为96kbps。 |
Meeting | 会议场景。 | • 分辨率:720P。 • 帧率:30 fps。 • 取消自动打开视频。 • 传输策略为清晰度和帧率平衡,低码流。 • 音频编码采样率为24k,码率为48kbps。 |
示例代码
调用 setChannelProfile
函数设置场景类型为视频 1对1 呼叫场景、清晰度较高的 1对1 呼叫场景等 v5.5.40 新增的房间场景将覆盖您通过 setVideoConfig
和 setAudioProfile
等 API 设置的音视频相关配置,因此建议先第一时间设置场景再通过其他 API 调整音视频配置。
视频 1对1 呼叫场景
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_);
// 设置房间场景为 VideoCall,会关闭视频大小流模式、打开视频、自动订阅视频、视频格式为 640x360/480 @ 15 fps、传输策略为保清晰度,高码流、音频编码采样率为16k,码率为20kbps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileVideoCall);
如果想在 1v1 场景将视频分辨率改为 720P 15帧,请参考以下示例代码:
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_);
// 设置房间场景为 VideoCall,会关闭视频大小流模式、打开视频、自动订阅视频、视频格式为 640x360/480 @ 15 fps、传输策略为保清晰度,高码流、音频编码采样率为16k,码率为20kbps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileVideoCall);
NERtcVideoConfig videoConfig;
videoConfig.width = 1280;// 设置分辨率宽
videoConfig.height = 720;// 设置分辨率高
videoConfig.frameRate = kNERtcVideoFramerateFps_15; //视频帧率
nrtc_engine_->setVideoConfig(kNERTCVideoStreamMain,videoConfig);
典型错误
如果在 setChannelProfile
之前先设置 setVideoConfig
,那么 setChannelProfile
将覆盖 setVideoConfig
的设置。
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_));
NERtcVideoConfig videoConfig;
videoConfig.width = 1280;// 设置分辨率宽
videoConfig.height = 720;// 设置分辨率高
videoConfig.frameRate = kNERtcVideoFramerateFps_15; //视频帧率
nrtc_engine_->setVideoConfig(kNERTCVideoStreamMain,videoConfig);
// 设置房间场景为 VideoCall,会关闭视频大小流模式、打开视频、自动订阅视频、视频格式为 640x360/480 @ 15 fps、传输策略为保清晰度,高码流、音频编码采样率为16k,码率为20kbps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileVideoCall);
语聊房场景
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_));
// 设置房间场景为语聊房,传输策略为保清晰度,高码流、音频编码采样率为48k,码率为48kbps、会关闭视频大小流模式、关闭自动打开视频、关闭自动订阅视频、视频格式为 640x360/480 @ 15 fps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileChatroom);
如果想在语聊房场景将音频编码采样率为48k,码率为80kbps,请参考以下示例代码:
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_);
// 设置房间场景为语聊房,传输策略为保清晰度,高码流、音频编码采样率为48k,码率为48kbps、会关闭视频大小流模式、关闭自动打开视频、关闭自动订阅视频、视频格式为 640x360/480 @ 15 fps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileChatroom);
//设置音频属性,采样率为 48 kHz、音乐编码、双声道、编码码率最大值为 80 Kbps。
rtc_engine_->setAudioProfile(kNERtcAudioProfileMiddleQualityStereo);
典型错误
如果在 setChannelProfile
之前先设置 setAudioProfile
,那么 setChannelProfile
将覆盖 setAudioProfile
的设置。
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_);
//设置音频属性,采样率为 48 kHz、音乐编码、双声道、编码码率最大值为 80 Kbps。
rtc_engine_->setAudioProfile(kNERtcAudioProfileMiddleQualityStereo);
// 设置房间场景为语聊房,传输策略为保清晰度,高码流、音频编码采样率为48k,码率为48kbps、会关闭视频大小流模式、关闭自动打开视频、关闭自动订阅视频、视频格式为 640x360/480 @ 15 fps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileChatroom);
会议场景
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_));
// 设置房间场景为会议,会打开视频大小流模式、关闭自动打开视频、关闭自动订阅视频、视频格式为 1280x720/ @ 30 fps、传输策略为清晰度和帧率平衡,低码流、音频编码采样率为24k,码率为48kbps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileMeeting);
如果想在会议场景将视频分辨率改为 360P 15帧、入会自动打开视频,请参考以下示例代码:
// 初始化引擎
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_);
// 设置房间场景为会议,会打开视频大小流模式、关闭自动打开视频、关闭自动订阅视频、视频格式为 1280x720/ @ 30 fps、传输策略为清晰度和帧率平衡,低码流、音频编码采样率为24k,码率为48kbps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileMeeting);
NERtcVideoConfig videoConfig;
videoConfig.width = 640;// 设置分辨率宽
videoConfig.height = 480;// 设置分辨率高
videoConfig.frameRate = kNERtcVideoFramerateFps_15; //视频帧率
nrtc_engine_->setVideoConfig(kNERTCVideoStreamMain,videoConfig);
nrtc_engine_->enableLocalVideo(true); //打开视频
典型错误
如果在 setChannelProfile
之前先设置 enableLocalVideo
和 setVideoConfig
,那么 setChannelProfile
将覆盖 enableLocalVideo
和 setVideoConfig
的设置。
// 初始化引擎
rtc_engine_->initialize(rtc_engine_context_);
NERtcVideoConfig videoConfig;
videoConfig.width = 640;// 设置分辨率宽
videoConfig.height = 480;// 设置分辨率高
videoConfig.frameRate = kNERtcVideoFramerateFps_15; //视频帧率
nrtc_engine_->setVideoConfig(kNERTCVideoStreamMain,videoConfig);
nrtc_engine_->enableLocalVideo(true); //打开视频
// 设置房间场景为会议,会打开视频大小流模式、关闭自动打开视频、关闭自动订阅视频、视频格式为 1280x720/ @ 30 fps、传输策略为清晰度和帧率平衡,低码流、音频编码采样率为24k,码率为48kbps。
rtc_engine_->setChannelProfile(nertc::kNERtcChannelProfileMeeting);