场景化音视频配置

更新时间: 2024/09/18 16:26:13

功能描述

为方便开发者快速接入,降低开发者接入门槛,SDK 通过大量线上数据验证,沉淀出多种场景化配置方案。开发者可根据所需场景,选择对应的房间模式,SDK 将自动应用适合该场景的音视频编解码器、音视频参数、流控策略等配置,从而快速实现该场景下的最佳效果。当前支持场景包括标准 1v1 音视频通话、高画质 1v1 音视频通话、标准语聊房、高品质语聊房、会议。

注意事项

  • 同一个房间内的用户,建议使用同一种房间场景,以获得最佳效果。
  • 若您的 App 有多种音视频业务场景,例如,同时有 1v1 音视频通话场景和标准语聊房场景。您可以在不销毁引擎 (destroyEngine) 的前提下,在退出房间后, 通过 setChannelProfile 切换场景,然后再登录其他房间。
  • 设置场景会影响音视频码率、帧率、视频分辨率、视频大小流模式、自动打开视频、自动订阅视频、传输策略。
  • 调用 setChannelProfile 将覆盖上一次调用此函数设置的场景。
  • 调用 setChannelProfile 函数设置场景类型为视频 1对1 呼叫场景、清晰度较高的 1对1 呼叫场景等 v5.5.40 新增的房间场景将覆盖您通过 setVideoConfigsetAudioProfile 等 API 设置的音视频相关配置,因此建议先第一时间设置场景再通过其他 API 调整音视频配置。
  • 版本 v5.5.40 之前就存在通信场景和直播场景,设置通信场景和直播场景,不会覆盖 setVideoConfigsetAudioProfile 等 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 新增的房间场景将覆盖您通过 setVideoConfigsetAudioProfile 等 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 之前先设置 enableLocalVideosetVideoConfig,那么 setChannelProfile 将覆盖 enableLocalVideosetVideoConfig 的设置。

// 初始化引擎
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);
此文档是否对你有帮助?
有帮助
去反馈
  • 功能描述
  • 注意事项
  • 实现方式
  • SDK 支持下列场景
  • 示例代码
  • 视频 1对1 呼叫场景
  • 典型错误
  • 语聊房场景
  • 典型错误
  • 会议场景
  • 典型错误