RTC SDK您提供设置音质和场景的功能,您可以根据实际情况通过搭配音质和场景设置音频属性,以达到更好的产品体验。通过阅读本文,您可以了解设置音频属性的方法。

功能简介

RTC SDK提供了三种音质模式(音频Profile规格)和四种场景(音频Scene规格)供您选择,如下所示:

音频Profile规格

音频Profile关键字 名称 声道数/采样率/编码码率
ENGINE_LOW_QUALITY_MODE 低功耗音质模式 1/8kHz/12kbps
ENGINE_BASIC_QUALITY_MODE 标准音质模式(默认模式) 1/16kHz/24kbps
ENGINE_HIGH_QUALITY_MODE 高音质模式 1/48kHz/48kbps

音频Scene规格

场景关键字 名称 特性
SCENE_DEFAULT_MODE 默认场景 推荐一般的音视频通信场景使用。
SCENE_EDUCATION_MODE 教育场景 优先保证音频连续性与稳定性。
SCENE_MEDIA_MODE 媒体场景 保真人声与音乐音质,推荐连麦直播间使用。
SCENE_MUSIC_MODE 音乐场景 高保真音乐音质,推荐乐器教学等对音乐音质有要求的场景使用。

参数搭配推荐

您可以根据推荐进行参数搭配,也可以根据自身实际业务场景进行自定义搭配。例如社交场景中,有背景音乐的音质需求,Scene可以选择音乐场景,如果没有背景音乐需求,Scene场景可以选择默认背景。

业务场景 Profile设置 Scene设置 特性
音视频通话 标准音质模式(ENGINE_BASIC_QUALITY_MODE) 默认场景(SCENE_DEFAULT_MODE) 在保证高清音质的同时,保证传输稳定流畅。
音频社交场景 高音质模式(ENGINE_HIGH_QUALITY_MODE) 音乐场景(SCENE_MUSIC_MODE) 高保真音乐音质,乐器教学等对音乐音质有要求的场景推荐使用。
音频社交场景2 高音质模式(ENGINE_HIGH_QUALITY_MODE) 默认场景(SCENE_DEFAULT_MODE) 高保真人声,没有背景音乐需求。
教育场景 标准音质模式(ENGINE_BASIC_QUALITY_MODE) 教育场景(SCENE_EDUCATION_MODE) 优先保证音频连续性与稳定性,同时保证音质高清。

实现方法

Android、iOS、Mac和Windows SDK平台关于音频的Profile设置与Scene设置通过集成RTC SDK时传递的extras参数设置,extras参数以JSON格式体现,如下所示:

{"user_specified_ engine_mode" : "Profile设置关键字","user_specified_scene_mode" :"Scene场景关键字"}

示例代码如下所示:

说明 示例代码中SDK的初始化extras参数只包含了音频设置,实际代码设置过程中,还可以包含其他模块功能的初始化设置。
  • Android
    JSONObject jsonObject = new JSONObject();
    //配置音质模式
    try {
       jsonObject.put("user_specified_engine_mode", "ENGINE_BASIC_QUALITY_MODE");
       //配置场景模式
       jsonObject.put("user_specified_scene_mode", "SCENE_DEFAULT_MODE");
       AliRtcEngine aliRtcEngine = AliRtcEngine.getInstance(getApplicationContext(),jsonObject);
    } catch (JSONException e) {
       e.printStackTrace();
    }
  • iOS
    @property (nonatomic, strong) AliRtcEngine *engine;
    NSMutableDictionary *extraDic = [[NSMutableDictionary alloc] init];
    [extraDic setValue:@"ENGINE_BASIC_QUALITY_MODE" forKey:@"user_specified_engine_mode"];
    [extraDic setValue:@"SCENE_EDUCATION_MODE" forKey:@"user_specified_scene_mode"];
    
    NSError *error = nil;
    NSData *json = [NSJSONSerialization dataWithJSONObject:extraDic options:NSJSONWritingPrettyPrinted error:&error];
    
    NSString *string = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];
    _engine = [AliRtcEngine sharedInstance:self extras: string];
  • Mac
    @property (nonatomic, strong) AliRtcEngine *engine;
    NSMutableDictionary *extraDic = [[NSMutableDictionary alloc] init];
    [extraDic setValue:@"ENGINE_BASIC_QUALITY_MODE" forKey:@"user_specified_engine_mode"];
    [extraDic setValue:@"SCENE_EDUCATION_MODE" forKey:@"user_specified_scene_mode"];
    
    NSError *error = nil;
    NSData *json = [NSJSONSerialization dataWithJSONObject:extraDic options:NSJSONWritingPrettyPrinted error:&error];
    
    NSString *string = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];
    _engine = [AliRtcEngine sharedInstance:self extras: string];
  • Windows
    std::string GetEngAndsceneMode(const std::string strEngMode, const std::string strSceneMode) 
    {
      std::string strParam = "{";
      if (strEngMode == "default") 
      {
        strParam += "\"user_specified_engine_mode\" : \"ENGINE_BASIC_QUALITY_MODE\",";
      }
    
      if (strSceneMode == "default")
      {
        strParam += "\"user_specified_scene_mode\" : \"SCENE_DEFAULT_MODE\",";
      }
    
      strParam += "}";
    
      return strParam;
    }
    
    AliRtcEventListener* rtcEventlister;
    
    std::string strEngMode = "default";
    std::string strSceneMode = "default";
    AliRtcEngine *mpEngine = AliRtcEngine::sharedInstance(rtcEventlister, GetEngAndsceneMode(strEngMode, strSceneMode).c_str());