腾讯云 云直播 后台操作 - 紫玉坏小子

时间:2024-03-11 19:01:42

腾讯云 云直播 后台操作

腾讯云 云直播

  • 快速入门

    1. 准备工作

    2. 添加域名

      • 使用云直播服务,至少需要2个域名,一个作为推流域名,一个作为播放域名,推流和播放不能使用相同的域名

      • 准备自有域名,并完成域名备案

        • 这个域名可以是在任何平台购买的域名 ,并完成备案 在不影响主域名的情况下 要解析一个子域名 例如:live.***.com

        • 域名添加成功后,系统会为您自动分配一个 CNAME 域名(以.liveplay.myqcloud.com为后缀)。CNAME 域名不能直接访问,您需要在域名服务提供商处完成 CNAME 配置,配置生效后即可享受云直播服务。以 DNS 服务商为腾讯云为例,添加 CNAME 记录操作步骤如下:

          1. 登录 域名服务控制台

          2. 选择您需添加 CNAME 的域名,单击【解析】。

          3. 进入域名的解析页面,单击【添加记录】。

          4. 在该新增列填写域名前缀为主机记录,选择记录类型为 CNAME,填写 CNAME 域名为记录值。

          5. 单击【保存】即可添加 CNAME 记录

        • 进入自有域名添加页,填写已完成备案的域名,选择域名类型,单击【确定】

    3. 获取推流地址(测试使用)

      • 选择【直播工具箱】> 【地址生成器】

      • 进入地址生成器页面,并进行如下配置:

        1. 选择生成类型:推流域名

        2. 选择您在域名管理中已添加的推流域名。

        3. 填写自定义的流名称 StreamName,例如:liveteststream。

        4. 选择地址过期时间,例如:2019-10-18 23:59:59。

        5. 单击 【生成地址】即可生成推流地址。

    4. 获取播放地址

      • 推流成功后,选择【流管理】>【在线流】,查看推流地址状态,单击【测试】在线播放观看。

      • 选择【直播工具箱】>

        【地址生成器】

         

        获取播放地址,在该页面进行如下配置:

        1. 选择生成类型:播放域名

        2. 选择您在域名管理中已添加的播放域名。

        3. 填写与推流地址相同的 StreamName,播放地址 StreamName要与推流地址 StreamName 一致才能播放对应的流。

        4. 选择地址过期时间,例如:2019-10-13 23:59:59。

        5. 单击 【生成地址】即可生成播放地址。

  • 后台操作代码

    • 生成地址

      private final static String KEY="*****"; //key
      private final static String PUSH="rtmp://****.livepush.myqcloud.com/live/"; //推流地址的域名
      private final static String PLAY="http://live.***.com/live/"  //播放地址的域名 这个是自己的域名解析出来的
      // 推流地址拼接
      StringBuilder stringBuilderPush=new StringBuilder();
                         Timestamp examEndTime = examRoom.getExamEndTime();
                         LocalDateTime localDateTime = examEndTime.toLocalDateTime();
                         localDateTime.plusMinutes(5);
                         Date date =      Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
                         long time = date.getTime();
                         String txSecret = getSafeUrl(KEY, examRoom.getNo(), time);
                         stringBuilderPush.append(PUSH);
                         stringBuilderPush.append(examRoom.getNo()+"?");
                         stringBuilderPush.append(txSecret);
                         examRoom.setPushUrl(stringBuilderPush.toString());
      // 播放地址拼接 这里的播放地址要注意在不同的端有不同的写法
      StringBuilder stringBuilderPlay=new StringBuilder();
                         stringBuilderPlay.append(PLAY);
                         stringBuilderPlay.append(examRoom.getNo()+".flv?");
                         stringBuilderPlay.append(txSecret);
                         examRoom.setPlayUrl(stringBuilderPlay.toString());
  • 其中推流代码示例

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    public class Test {
      public static void main(String[] args) {
          System.out.println(getSafeUrl("txrtmp", "11212122", 1469762325L));
      }
      private static final char[] DIGITS_LOWER =
          {\'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'a\', \'b\', \'c\', \'d\', \'e\', \'f\'};
      /*
      * KEY+ streamName + txTime
      */
      private static String getSafeUrl(String key, String streamName, long txTime) {
          String input = new StringBuilder().
                              append(key).
                              append(streamName).
                              append(Long.toHexString(txTime).toUpperCase()).toString();
          String txSecret = null;
          try {
              MessageDigest messageDigest = MessageDigest.getInstance("MD5");
              txSecret  = byteArrayToHexString(
                          messageDigest.digest(input.getBytes("UTF-8")));
          } catch (NoSuchAlgorithmException e) {
                  e.printStackTrace();
          } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
          }
          return txSecret == null ? "" :
                             new StringBuilder().
                             append("txSecret=").
                             append(txSecret).
                             append("&").
                             append("txTime=").
                             append(Long.toHexString(txTime).toUpperCase()).
                             toString();
          }
      private static String byteArrayToHexString(byte[] data) {
          char[] out = new char[data.length << 1];
          for (int i = 0, j = 0; i < data.length; i++) {
                  out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
                  out[j++] = DIGITS_LOWER[0x0F & data[i]];
          }
          return new String(out);
      }
    }
  • 其中播放地址示例

    RTMP格式:rtmp://domain/AppName/StreamName?txSecret=Md5(key+StreamName+hex(time))&txTime=hex(time)
    FLV格式:http://domain/AppName/StreamName.flv?txSecret=Md5(key+StreamName+hex(time))&txTime=hex(time)
    M3U8格式:http://domain/AppName/StreamName.m3u8?txSecret=Md5(key+StreamName+hex(time))&txTime=hex(time)
    • 若您的播放域名未开启播放鉴权,您还可以在【播放配置】>【播放地址】标签下,查看该播放域名下 RTMP、FLV、HLS 这三种播放地址。替换播放地址中的 StreamName(流名称)关联推流地址,关联后即可通过播放地址查看直播画面。

RTMP格式:rtmp://domain/AppName/StreamName
FLV格式:http://domain/AppName/StreamName.flv
M3U8格式:http://domain/AppName/StreamName.m3u8
domain:自有已备案播放域名。
AppName:直播的应用名称,默认为 live,可自定义。
StreamName:流名称,用户自定义,用以标识直播流。
txSecret:开启播放鉴权后生成的鉴权串。
txTime:播放地址设置的时间戳,用以控制台播放地址的有效时间。

 

  • 术语解释 (其余的查看文档)

  • 云直播(Cloud Streaming Services)为您提供极速、稳定、专业的直播云端处理服务,根据业务中不同直播场景的需求,云直播提供标准直播、慢直播、快直播和云导播台服务,分别针对大规模实时观看、高并发推流录制及超低延时的直播场景,配合移动直播 SDK,为您提供一站式的音视频直播解决方案。

  • 推流

    • 主播将本地视频源和音频源推送到腾讯视频云服务器,在有些场景中也被称为“RTMP 发布”。

  • 拉流

    • 即直播播放,指已实现直播推流之后,用指定地址将腾讯视频云服务器中的视频源和音频源拉取播放的过程。其视频源是实时生成的,有人推流直播才有意义,一旦主播停播,直播 URL 也就失效了。而且由于是实时直播,所以播放器在播直播视频的时候是没有进度条的。

  • 推流域名

    • 指用于推送直播流的域名,必选配置,该域名必须在使用直播服务前完成注册并备案。配置完推流域名后,直播服务会生成对应的推流地址

  • 播放域名

    • 指用于播放直播流的域名,必选配置,该域名必须在使用直播服务前完成注册并备案。配置完播放域名后,直播服务会生成对应的播放地址

  • 域名 CNAME

    • CNAME 域名是在腾讯云直播控制台接入加速域名后,系统给对应的域名分配一个以 .liveplay.myqcloud.com 为后缀的域名。用户需要在域名服务商处,配置一条 CNAME 记录,记录生效后,域名解析的工作就正式转向腾讯云云直播,该域名所有的请求都将转向腾讯云直播的边缘节点。

  • StreamName

    • StreamName 是一路流的标识符,通常与某个域名一起唯一标识一路流。

  • APPName

    • 直播的应用名称,用于区分直播流媒体文件存放路径,默认为 live,可自定义。