腾讯云---即时通信IM---微信小程序直播带货总结(一)

即时通讯 IM 官网:https://cloud.tencent.com/document/product/269/36838

一、直播前需要准备腾讯云的账号

1.1 在云产品中搜索 即时通讯 IM 开通 即时通讯 IM。

在这里插入图片描述

1.2 在云产品中搜索 云直播 点击域名管理 添加域名
1.2.1 添加域名。

在这里插入图片描述

1.2.2 点击 资源包/插件管理 查看流量包 如果没有,需要购买。
1.2.2.1 流量包

在这里插入图片描述

1.2.3 点击 直播SDK 应用管理 创建应用。

在这里插入图片描述

1.2.4 如果推流生成了,使用推流出问题,可以查看 事件中心 断流记录。

在这里插入图片描述


二、生成推流地址,播放地址(拉流地址)

2.1 直播要有推流地址,用户观看要有播放地址(拉流地址)。

在这里插入图片描述

2.1.1 生成的推流地址格式
rtmp://domain/AppName/StreamName?txSecret=secret&txTime=hex(time)

在这里插入图片描述

domain
域名: 使用推流域名 可以使用自己创建的域名,也可以用默认的域名。
AppName
应用名称: 直播的应用名称 可以使用默认的 live  也可以使用自己创建的应用名称。
StreamName
流ID: 自定义流ID 可以随便写 建议 英文_数学(abc_123) 随机数
鉴权Key (非必需)
包含 txSecret 和 txTime 两部分:txSecret=Md5(key+StreamName+hex(time))&txTime=hex(time)。
开启推流鉴权后需使用包含鉴权 Key 的 URL 进行推流。
若未开启推流鉴权,则推流地址中无需 “?” 及其后内容。
为了防止容易被破解 建议加上鉴权Key
txTime(推流地址有效期)
表示何时该 URL 会过期,格式支持十六进制的 UNIX 时间戳。
说明:例如5867D600代表2017年1月1日0时0点0分过期,
	我们的客户一般会将 txTime 设置为当前时间24小时以后过期,
	过期时间不要太短也不要太长,
	当主播在直播过程中遭遇网络闪断时会重新恢复推流,
	如果过期时间太短,主播会因为推流 URL 过期而无法恢复推流。
txSecret(防盗链签名)
用以防止攻击者伪造您的后台生成推流 URL。
2.2 生成防盗链需要用到Key,到腾讯云的直播云里的推流域名管理

在这里插入图片描述

2.3 生成推流地址和播放地址(拉流地址)
推流地址前缀 rtmp:// 和 播放地址前缀(http://) 播放地址有四种格式,可以参考上面的图
2.3.1
/**
	 * @TiTle: 微信小程序直播带货 生成推流地址
	 * @USER: wenchaowen
	 * @DATE: 2021/4/6
	 * 直播防盗链计算
	 **/
	public class LiveUtil {
   
	
	    private static final char[] DIGITS_LOWER =
	            {
   '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
	
	    /**
	     * 推流防盗链
	     */
	    private static final String txSecret = "TXSECRET";
	
	    /**
	     * 流 ID,推荐用随机数字或者用户 ID
	     * 可以自由写
	     */
	    private static final String streamName = "txy_";
	    /**
	     * 推流地址 域名+应用名
	     */
	    private static String pushStreamUrl = Setting.getValue("WECHATPAY.PUSH_STREAM_URL");
	    /**
	     * 拉流地址 域名+应用名
	     */
	    private static String getStreamUrl = Setting.getValue("WECHATPAY.GET_STREAM_URL");
	    /**
	     * 推流共同的参数
	     */
	    private static String auth_key = streamName + "?txSecret=" + txSecret;
	
	    /**
	     * 拉流 播放
	     */
	    private static String auth_get_key = streamName + ".flv?txSecret=" + txSecret;
	
	    /**
	     * 生成推流地址
	     *
	     * @param userId
	     * @return
	     */
	    public static Map<String, String> generateEncodeUrl(String userId) {
   
	        //1.生成 txTime
	        //设置的 txTime 过期时间不要过长或过短:
	        //如果过期时间过短,当主播在直播过程中遭遇网络闪断时,会因为推流 URL 过期而无法恢复推流。
	        //如果过期时间过长,存在被盗推的风险。
	        //暂时设置创建时间两天后过期
	        Long second = LocalDateTime.now().plusDays(2).toEpochSecond(ZoneOffset.of("+8"));
	        //获取秒数  有效时间 16进制
	        String effectiveTime = Long.toHexString(second);
	        //2.生成 txSecret
	        //生成推流密文 txSecret 的生成方法是 = MD5(KEY + StreamName + txTime)
	        String md5Code = getTxSecret(Setting.getValue("WECHATPAY.PUSH_STREAM_KEY"),streamName+userId,effectiveTime);
	        //3.合成防盗链地址
	        String authKey = auth_key
	                .replace(streamName, streamName+userId)
	                .replace(txSecret, md5Code);
	
	        String authGetKey = auth_get_key
	                .replace(streamName, streamName+userId)
	                .replace(txSecret, md5Code);
	        HashMap<String, String> map = new HashMap<>();
	        map.put("pushStreamUrl", pushStreamUrl + authKey); //直播流
	        map.put("getStreamUrl", getStreamUrl + authGetKey);//播放流
	        map.put("streamId", streamName+userId); //流名称
	        return map;
	    }
	
	
	    /**
	     * KEY+ streamName + txTime
	     * domain:直播推流域名。
	     * AppName:直播的应用名称,默认为 live,可自定义。
	     * StreamName:流名称,用户自定义,用于标识直播流。
	     * txSecret:开启推流鉴权后生成的鉴权串。
	     * txTime:推流地址设置的时间戳,是控制台推流地址的有效时间。
	     */
	    private static String getTxSecret(String key, String streamName, String txTime) {
   
	        String input = new StringBuilder().
	                append(key).
	                append(streamName).
	                append(txTime.toUpperCase()).toString();
	        String txSecret = null;
	        try {
   
	            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
	            txSecret  = byteArrayToHexString(
	                    messageDigest.digest(input.getBytes("UTF-8"
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值