Skip to content
RoomService后台Java源码,用于直播<live-room>、双人多人<rtc-room>的房间管理,小程序参考Demo:MiniProgram)、windows参考Demo:webexe_web_source)、移动AppDemo接入此房间管理后台,完成直播、直播连麦、双人多人会话。
Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc Update errorCode.md Jun 5, 2018
image update pictures Aug 28, 2018
src/main 直播域名备案还未支持https,后台返回地址改成http Nov 9, 2018
README.md update pictures Aug 28, 2018
pom.xml init May 4, 2018
roomservice.iml

README.md

腾讯云音视频多人会话解决方案服务端

1.项目简介

RTCRoom Server 是配合 live-room(用于直播连麦)和 rtc-room(用于视频通话)的后台组件,主要作用有:

  • 生成推流、播放地址
  • 生成IM签名,用于IM独立模式下的用户登录
  • 管理IM聊天室,聊天室的创建和销毁、成员进出通知
  • 双人/多人音视频管理视频位

特别说明:

  • 房间管理采用 java对象直接在内存中进行管理。房间信息具有动态和实效性,因此没有采用数据库做持久存储,而是在内存中动态管理。

2.云服务开通

开通直播服务

申请开通视频直播服务

进入 直播管理控制台,如果服务还没有开通,则会有如下提示: 点击申请开通,之后会进入腾讯云人工审核阶段,审核通过后即可开通。

配置直播码

直播服务开通后,进入【直播控制台】>【直播码接入】>【接入配置】 完成相关配置,即可开启直播码服务: 点击【确定接入】按钮即可。

获取直播服务配置信息

从直播控制台获取APP_IDAPP_BIZIDAPI_KEY,后面配置服务器会用到:

开通云通信服务

申请开通云通讯服务

进入云通讯管理控制台,如果还没有服务,直接点击直接开通云通讯按钮即可。新认证的腾讯云账号,云通讯的应用列表是空的,如下图:

点击创建应用接入按钮创建一个新的应用接入,即您要接入腾讯云IM通讯服务的App的名字,我们的测试应用名称叫做“RTMPRoom”,如下图所示:

点击确定按钮,之后就可以在应用列表中看到刚刚添加的项目了,如下图所示:

配置独立模式

上图的列表中,右侧有一个应用配置按钮,点击这里进入下一步的配置工作,如下图所示。

获取云通讯服务配置信息

从云通信控制台获取IM_SDKAPPIDIM_ACCOUNTTYPEADMINISTRATORPRIVATEKEYPUBLICKEY,后面配置服务器会用到:

从验证方式中下载公私钥,解压出来将private_key用文本编辑器打开,如:

-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----

将其转换成字符串形式如下所示,后面在server配置文件中使用,请注意每行后面要加入\r\n:

"-----BEGIN PRIVATE KEY-----\r\n"+
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
"-----END PRIVATE KEY-----\r\n"

PUBLICKEY也采用同样的方式编辑,供后续使用。

3.修改配置信息

后台使用 spring 框架搭建,开发环境是 IntelliJ IDEA,java 需要使用 1.8 或以上。用 IntelliJ IDEA 导入工程源码,把\src\main\java\com\tencent\qcloud\roomservice\common目录下的 Config.java 中APP_ID、APP_BIZID、PUSH_SECRET_KEY、APIKEY、IM_SDKAPPID、IM_ACCOUNTTYPE、ADMINISTRATOR、PRIVATEKEY、PUBLICKEY等配置项替换成您的腾讯云账号信息。

public class Config {

    /**
     * 需要开通云直播服务
     * 参考指引 @https://cloud.tencent.com/document/product/454/15187#.E4.BA.91.E6.9C.8D.E5.8A.A1.E5.BC.80.E9.80.9A
     * 有介绍APP_BIZID 和 PUSH_SECRET_KEY的获取方法。
     */
    public class Live {
        /**
         * 云直播 APP_ID =  和 APIKEY 主要用于腾讯云直播common cgi请求。appid 用于表示您是哪个客户,APIKey参与了请求签名sign的生成。
         * 后台用他们来校验common cgi调用的合法性
         */
        public final static int APP_ID = 0;

        /**
         * 云直播 APP_BIZID = 和pushSecretKey 主要用于推流地址的生成,填写错误,会导致推流地址不合法,推流请求被腾讯云直播服务器拒绝
         */
        public final static int APP_BIZID = 0;

        /**
         * 云直播 推流防盗链key = 和 APP_BIZID 主要用于推流地址的生成,填写错误,会导致推流地址不合法,推流请求被腾讯云直播服务器拒绝
         */
        public final static String PUSH_SECRET_KEY = "";

        /**
         * 云直播 API鉴权key = 和appID 主要用于common cgi请求。appid 用于表示您是哪个客户,APIKey参与了请求签名sign的生成。
         * 后台用他们来校验common cgi调用的合法性。
         */
        public final static String APIKEY = "";

        // 云直播 推流有效期单位秒 默认7天
        public final static int validTime = 3600 * 24 * 7;
    }

    /**
     * 需要开通云通信服务
     * 参考指引 @https://cloud.tencent.com/document/product/454/7953#3.-.E4.BA.91.E9.80.9A.E8.AE.AF.E6.9C.8D.E5.8A.A1.EF.BC.88im.EF.BC.89
     * 有介绍appid 和 accType的获取方法。以及私钥文件的下载方法。
     */
    public class IM {
        /**
         * 云通信 IM_SDKAPPID = IM_ACCOUNTTYPE 和 PRIVATEKEY 是云通信独立模式下,为您的独立账号 identifer,
         * 派发访问云通信服务的userSig票据的重要信息,填写错误会导致IM登录失败,IM功能不可用
         */
        public final static long IM_SDKAPPID = 0;

        /**
         * 云通信 账号集成类型 IM_ACCOUNTTYPE = IM_SDKAPPID 和 PRIVATEKEY 是云通信独立模式下,为您的独立账户identifer,
         * 派发访问云通信服务的userSig票据的重要信息,填写错误会导致IM登录失败,IM功能不可用
         */
        public final static String IM_ACCOUNTTYPE = "";

        // 云通信 管理员账号
        public final static String ADMINISTRATOR = "admin";

        /**
         * 云通信 派发usersig 采用非对称加密算法RSA,用私钥生成签名。PRIVATEKEY就是用于生成签名的私钥,私钥文件可以在互动直播控制台获取
         * 配置privateKey
         * 将private_key文件的内容按下面的方式填写到 PRIVATEKEY。
         */
        public final static String PRIVATEKEY = "-----BEGIN PRIVATE KEY-----\r\n"+
            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
            "-----END PRIVATE KEY-----\r\n";
        /**
         * 云通信 验证usersig 所用的公钥
         */
        public final static String PUBLICKEY = "-----BEGIN PUBLIC KEY-----\n" +
            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"+
            "-----END PUBLIC KEY-----\n";
    }


    /**
     * 多人音视频房间相关参数
     */
    public class MultiRoom {
        // 房间容量上限
        public final static int maxMembers = 4;

        // 心跳超时 单位秒
        public final static int heartBeatTimeout = 20;

        // 空闲房间超时 房间创建后一直没有人进入,超过给定时间将会被后台回收,单位秒
        public final static int maxIdleDuration = 30;
    }

    /**
     * 双人音视频房间相关参数
     */
    public class DoubleRoom {
        // 心跳超时 单位秒
        public final static int heartBeatTimeout = 20;

        // 空闲房间超时 房间创建后一直没有人进入,超过给定时间将会被后台回收,单位秒
        public final static int maxIdleDuration = 30;
    }

    /**
     * 直播连麦房间相关参数
     */
    public class LiveRoom {
        // 房间容量上限
        public final static int maxMembers = 4;

        // 心跳超时 单位秒
        public final static int heartBeatTimeout = 20;

        // 空闲房间超时 房间创建后一直没有人进入,超过给定时间将会被后台回收,单位秒
        public final static int maxIdleDuration = 30;

        // 最大观众列表长度
        public final static int maxAudiencesLen = 30;
    }
    
    /**
     * 创建者退出的时候是否需要删除房间
     * 默认false。表示房间所有成员是对等的,第一个进房的人退出并不会销毁房间,只有房间没人的时候才会销毁房间。
     * 此配置项只针对双人和多人实时音视频
     */
    public final static boolean isCreatorDestroyRoom = false;
}

4.准备发布包

首先到 IntelliJ IDEA 官网 下载 IntelliJ IDEA 工具,注意这里要选择 Ultimate 版 。因为只有 Ultimate 版本才拥有Java EE 相关插件以及功能。

成功安装 IntelliJ IDEA,接着配置按照第 3 步讲述, 修改下配置信息。

配置修改好之后,选择 Build -> Build Artifacts 开始打包,打包完成后到输出路径拿到 roomservice.war 包。选择 File -> Project Structure 可以查看输出路径,如下图中的 E:\RoomService\rtcroom_server_java-master\target。

注意:roomservice.war 包解压后,里面是应该是 .class 的文件,否则说明打包有问题。

5.部署服务器

以部署到腾讯云服务器为例,描述部署过程。采用CentOS + nginx + Apache Tomcat + java 的 环境。

注意: jdk版本需要为1.8以上。 小程序和ios都要求服务器支持HTTPS请求。

申请云服务器

1、新建 CVM 主机。

2、从服务市场选取镜像。

3、配置硬盘、网络、云主机访问密码,并且妥善保管好密码,然后设置安全组。

4、付款后生成云主机。点击登录可以通过腾讯云的网页 shell 进行访问。

5、查看/切换 JDK 版本。 修改完成后可以用 sh version.sh 命令查看是否修改成功。

使用 sudo update-alternatives --display java 命令可以查看当前已安装的 JDK 版本。

部署war包到服务器

建议使用 FileZilla 或者 FlashFXP 等可视化界面工具。

将打包好的 webrtc.war 包上传 tomcat 的 webapps 目录下

6、重新启动 tomcat。 上传完成后,如果 tomcat 服务未启动,可以进入 tomcat/bin 目录,通过 ./startup.sh start 命令启动 tomcat。“Tomcat started.”表示服务启动成功。

nginx 配置

如果您已经有域名以及域名对应的SSL证书存放在/data/release/nginx/目录下,请将下面配置内容中的

  • [1] 替换成您自己的域名。
  • [2-1] 替换成 SSL 证书的 crt 文件名。
  • [2-2] 替换成 SSL 证书的 key 文件名。
upstream app_weapp {
    server localhost:5757;
    keepalive 8;
}

#http请求转为 https请求
server {
    listen      80;
    server_name [1]; 

    rewrite ^(.*)$ https://$server_name$1 permanent;
}

#https请求
server {
    listen      443;
    server_name [1];

    ssl on;

    ssl_certificate           /data/release/nginx/[2-1];
    ssl_certificate_key       /data/release/nginx/[2-2];
    ssl_session_timeout       5m;
    ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers               ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache         shared:SSL:50m;
    ssl_prefer_server_ciphers on;

    # tomcat默认端口是8080,转发给tomcat处理
    location / {
        proxy_pass   http://127.0.0.1:8080;
        proxy_redirect  off;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

运行服务

输入命令,启动Nginx服务。

nginx -s reload

验证服务

通过浏览器地址栏访问接口,请求地址格式https://您自己的域名/roomservice/weapp/utils/get_login_info,如果没有配置证书,可以用http请求来验证服务。

6.小程序和windows Demo部署

1.小程序部署

下载 小程序 源码,将 wxlite/config.js 文件中的serverUrlroomServiceUrl修改成:

https://您自己的域名/roomservice/

2.windows Demo部署

下载 windows web demo 源码,将 liveroom.html、double.html 文件中的RoomServerDomain修改成:

https://您自己的域名/roomservice/

7.开发者资源

You can’t perform that action at this time.