腾讯云直播、生成腾讯推拉流

1 篇文章 0 订阅
1 篇文章 0 订阅

一、背景

最近公司用到推拉流,经过一番比较后决定使用腾讯云。但是腾讯云的文档确实有点一言难尽,去网上搜索一下例子,结果就是把腾讯云的demo粘贴过去,还必须得是会员才能看,坑啊!!所以老周也把自己做的小demo贴出来,帮助感兴趣的童鞋更快的了解腾讯云直播。不多说上干货

二、代码实现

public static void main(String[] args) {
       //时间戳有效期默认到未来的24小时
       long nows = (System.currentTimeMillis() + 86400000) /1000;
       System.out.println(nows);
       //获得鉴权key
       String apiKey = "ef7b9ea9ef7b9ea9ef7b9ea9ef7b9ea9"; // 这个是推流网址中生成的apikey
       String txrtmp = getSafeUrl(apiKey , "test", nows);
       System.out.println(txrtmp);
       //生成推流地址
       String pushUrl = "push.tencent.com"; // 推流的网址,需要在腾讯云直播进行配置
       initPush(pushUrl, "live", "test", txrtmp);
       //生成播流地址
        String pullUrl = "pull.tencent.com"; // 播流的网址,需要在腾讯云直播进行配置
       initPull(pullUrl, "live", "test");
   }

   /**
    * 生成推流地址
    * @param domain 推流地址
    * @param AppName 应用名称 默认为live
    * @param StreamName 流标识 同一推流地址中的唯一标识
    * @param key 鉴权key
    */
   public static void initPush(String domain, String AppName, String StreamName, String key){
       //获取推流地址
       System.out.println("===================获取推流地址====================");
       String obsPush = "rtmp://"+domain+"/"+AppName+"/";
       System.out.println("obs推流地址:"+obsPush);
       String obsPushName = StreamName+"?"+key;
       System.out.println("obs推流名称:"+obsPushName);
       String rtmpPush = obsPush + obsPushName;
       System.out.println("推流地址:"+rtmpPush);


   }

   /**
    * 生成播流地址
    * @param domain 播流地址
    * @param AppName 应用名称 默认为live
    * @param StreamName 流标识 同一播流地址中的唯一标识
    */
   public static void initPull(String domain, String AppName, String StreamName){
       //获取播流地址
       System.out.println("====================获取播流地址===================");
       //rtmp协议播流地址
       String rtmpPull = "rtmp://"+domain+"/"+AppName+"/"+StreamName;
       System.out.println(rtmpPull);
       String hlsPull = "http://"+domain+"/"+AppName+"/"+StreamName+".m3u8";
       System.out.println(hlsPull);
       String flvPull = "http://"+domain+"/"+AppName+"/"+StreamName+".flv";
       System.out.println(flvPull);

   }

   /**
   *下面是腾讯云直播自己的demo,老周研究发现主要用户生成鉴权key
   */
   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);
   }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值