您可以阅读本文,了解1对1语音通话服务端的集成操作。

前提条件

  • 您已经完成注册阿里云账号,并完成实名认证,具体操作请参见阿里云账号注册流程
  • 您已经开通音视频通信服务,具体操作请参见开通服务
  • 您需要在阿里云音视频通信RTC控制台创建应用

操作步骤

  1. 获取AppKey和应用ID
    • 您可以在控制台点击应用管理,点击查询AppKey,获取AppKey。
    • 您可以在控制台点击应用管理,复制您的AppID,如下图所示:AppID
  2. 获取AccessKey

    您可以为阿里云主账号和子账号创建一个访问密钥(AccessKey)。在调用阿里云ENS API时您需要使用AccessKey完成身份验证。

    AccessKey包括AccessKeyId和AccessKeySecret。
    • AccessKeyId:用于标识用户。
    • AccessKeySecret:用于验证用户的密钥。AccessKeySecret必须保密。
    警告 主账号Accesskey泄露会威胁您所有资源的安全。建议使用子账号(RAM用户)Accesskey进行操作,可有效降低Accesskey泄露的风险。

    具体操作步骤,请参见创建AccessKey

  3. 下载Demo
  4. 配置运行
    1. 下载编译好的server,解压dist/rtc-api.zip。
    2. 修改配置文件BOOT-INF/classes/application.properties,如下图所示: 修改内容
      • 修改rtc应用appId和appKey。

        rtc.1v1audio.appId = *

        rtc.1v1audio.appKey = *

      • 设置AK,需要添加 AliyunRTCFullAccess 权限 ,AccessKeyId和AccessKeySecret的生成请参考步骤二。

        accessKeyID=*

        accessKeySecret=*

    3. 执行restart.sh即可启动或重启server。
    4. 访问http://127.0.0.1:8080/1v1-audio/index.html即可看到启动成功提示。
    说明 服务端环境需要JDK 8及以上版本。

源码编译运行

命令行切换到项目所在磁盘的根目录执行命令:
mvn clean package -Dmaven.test.skip=true

出现BUILD SUCCESS则打包成功,可看到server/target/rtc-api-0.0.1-SNAPSHOT.jar文件。

执行命名即可启动项目,命令如下所示:
nohup java -jar rtc-api-0.0.1-SNAPSHOT.jar &

主要功能说明

  • 生成joinChannel所需鉴权信息

    访问地址:/app/token

    客户端调用RTC SDK加入房间的Token信息就是从这个接口获得。具体生成方式,请参见RTC帮助文档生成Token

            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            digest.update(appId.getBytes());
            digest.update(appKey.getBytes());
            digest.update(channelId.getBytes());
            digest.update(userId.getBytes());
            digest.update(nonce.getBytes());
            digest.update(Long.toString(timestamp).getBytes());
            String token = DatatypeConverter.printHexBinary(digest.digest()).toLowerCase();
            return token;
  • 查询频道实时在线用户列表

    访问地址:/app/descChannelUsers

    AppServer通过调用rtcOpenApi的DescribeChannelUsers接口查询频道的实时在线人数。

            DefaultAcsClient client = initVodClient();
            DescribeChannelUsersRequest request = new DescribeChannelUsersRequest();
            request.setAppId(appId);
            request.setChannelId(channelId);
            DescribeChannelUsersResponse response = client.getAcsResponse(request);
  • 查询房间开启时间

    访问地址:/app/descChannelStartTime

    当客户端请求加入房间所需的token时,服务端查询当前房间人数,若房间人数为0,保存当前时刻和房间id。并把当前时刻作为此房间的创建时间。

                DescribeChannelUsersResponse response = RtcOpenAPI.describeChannelUsers(appId, channelId);
                if (CollectionUtils.isEmpty(response.getUserList())) {
                    ImmutablePair<String, String> appChannel = new ImmutablePair<>(appId, channelId);
                    ScheduledFuture scheduledFuture = TASKS.getOrDefault(appChannel, new JSONObject()).getObject("scheduledFuture", ScheduledFuture.class);
    
                    TASKS.put(appChannel, channelInfo);
                }
    
    
                            JSONObject scheduledTask = ScheduledDeleteChannel.TASKS.get(ImmutablePair.of(appId, channelId));