限定访问区域

  • Windows

更新时间不可用

了解实时互动 RTC 在不同平台上的限定访问区域方式,包括接入流程、关键配置和平台差异。

为适应不同国家或地区的法律法规,声网支持限定访问区域功能,实现 SDK 只访问指定区域内的声网服务器,将音视频和消息数据传输限定在某一区域范围内。

信息

该功能为高级设置,适用于有访问安全限制的场景。

技术原理

开启限定访问区域功能后,不论用户在哪个区域使用你的 App,SDK 都只会访问指定区域的声网服务器。

例如你指定了北美为访问区域,假设有两位用户分别从北美和中国连接声网服务器:

指定的访问区域App 用户所在区域SDK 实际访问的区域连接后的用户体验
北美北美北美正常
中国可能受到较大影响
表格内容超出当前宽度,可横向滚动查看更多列。

信息

  • 如果指定区域的服务器都不可用,SDK 会直接报错。
  • 由于指定区域与 App 用户所在区域之间需要经过跨区域公共互联网,若公网网络质量较差,音视频体验会受到影响。

前提条件

在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。

你需要在调用 initialize 方法初始化 IRtcEngine 实例时,通过设置 RtcEngineContext 中的 areaCode 参数来指定访问区域。

  • AREA_CODE_GLOB:(默认)全球。
  • AREA_CODE_CN:中国大陆。
  • AREA_CODE_NA:北美。
  • AREA_CODE_EU:欧洲。
  • AREA_CODE_AS:除中国大陆以外的亚洲区域。
  • AREA_CODE_JP:日本。
  • AREA_CODE_IN:印度。

信息

区域码支持按位操作。

指定区域

如果要指定仅访问北美区域的服务器,在调用 initialize 方法之前设置 context.areaCode = AREA_CODE_NA;。

C++
// 初始化声网 SDK
bool CAgoraRegionConnDlg::InitAgora() {
    // 创建 AgoraRtcEngine
    m_rtcEngine = createAgoraRtcEngine();
    if (!m_rtcEngine) {
        m_lstInfo.InsertString(m_lstInfo.GetCount() - 1,
                               _T("createAgoraRtcEngine failed"));
        return false;
    }
    // 设置接收通知消息的窗口
    m_eventHandler.SetMsgReceiver(m_hWnd);

    RtcEngineContext context;
    std::string strAppID = GET_APP_ID;
    context.appId = strAppID.c_str();
    CString area_code;
    m_cmbAreaCode.GetWindowText(area_code);

    // 指定仅访问北美的服务器
    context.areaCode = AREA_CODE_NA;

    // 初始化 RtcEngineContext
    int ret = m_rtcEngine->initialize(context);
    if (ret != 0) {
        m_initialize = false;
        CString strInfo;
        strInfo.Format(_T("initialize failed: %d"), ret);
        m_lstInfo.InsertString(m_lstInfo.GetCount(), strInfo);
        return false;
    } else
        m_initialize = true;
    m_lstInfo.InsertString(m_lstInfo.GetCount(), _T("initialize success"));
}

排除区域

如果要排除一个区域的服务器(如中国大陆),在调用 initialize 方法之前添加 context.areaCode = AREA_CODE_GLOB ^ AREA_CODE_CN;。

C++
// 初始化声网 SDK
bool CAgoraRegionConnDlg::InitAgora() {
    // 创建 AgoraRtcEngine
    m_rtcEngine = createAgoraRtcEngine();
    if (!m_rtcEngine) {
        m_lstInfo.InsertString(m_lstInfo.GetCount() - 1,
                               _T("createAgoraRtcEngine failed"));
        return false;
    }
    // 设置接收通知消息的窗口
    m_eventHandler.SetMsgReceiver(m_hWnd);

    RtcEngineContext context;
    std::string strAppID = GET_APP_ID;
    context.appId = strAppID.c_str();
    CString area_code;
    m_cmbAreaCode.GetWindowText(area_code);

    // 在访问区域中排除中国大陆
    context.areaCode = AREA_CODE_GLOB ^ AREA_CODE_CN;

    // 初始化 RtcEngineContext
    int ret = m_rtcEngine->initialize(context);
    if (ret != 0) {
        m_initialize = false;
        CString strInfo;
        strInfo.Format(_T("initialize failed: %d"), ret);
        m_lstInfo.InsertString(m_lstInfo.GetCount(), strInfo);
        return false;
    } else
        m_initialize = true;
    m_lstInfo.InsertString(m_lstInfo.GetCount(), _T("initialize success"));
}

参考信息

示例项目

声网提供了开源的示例项目供你参考,你可以前往下载或查看其中的源代码。

API 参考

initialize