概述:SpringBoot整合腾讯云直播,生成推拉流配置及工具类详细讲解!
一、申请腾讯云账号,用自己的即可,第一次申请会送腾讯云直播20G的流量,用来测试足够了
此截图为腾讯云后台截图
二、创建Springboot工程,无需引入其他jar包
三、
1.分析腾讯云要求生成推流,拉流(直播)规则
推流域名(domain):自己的账号rtmp://+id+livepush.myqcloud.com
例如我id为123456,那么我的推流域名(domain)rtmp://123456.livepush.myqcloud.com
注意:中间有个 “.”
AppName:默认live就行
StreamName:这个推流和拉流要一直,随便填写就行,要保持一致
例如:我填写Abc
鉴权key:在自己腾讯云账号里面查看
具体查看方法:域名管理→点击腾讯云分配的推流域名→
这个API Key就是鉴权K
2.拉流,也就是直播地址
这个必须先申请一个可用有效的域名,然后进行CNAME解析
前期准备工作就这么多,废话不多说,直接上代码
四、
1.创建MD5Encode工具类
package com.tencentyun.util; import java.security.MessageDigest; public class MD5Encode { private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; public static String getMD5Str(String str) { String resStr = ""; try { MessageDigest md = MessageDigest.getInstance("MD5"); resStr = byteArrayToHexString(md.digest(str.getBytes())); } catch (Exception ex) { ex.printStackTrace(); } return resStr; } private static String byteArrayToHexString(byte[] b) { StringBuffer resSb = new StringBuffer(); for (int i = 0; i < b.length; i++) { resSb.append(byteToHexString(b[i])); } return resSb.toString(); } private static String byteToHexString(byte b) { int n = b; if (n < 0) n = 256 + n; int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; } } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
2.创建TencentYunVedioUtil工具类
package com.tencentyun.util; import java.net.HttpURLConnection; import java.net.URL; import java.util.Calendar; import java.util.Date; public class TencentYunVedioUtil { //推流防盗链的key 你自己的推流K public static final String push_key = "XXXXXXXXXXXXXXXX"; //拉流防盗链的key 你自己的直播K,注意域名需要去解析CNAME,推流k和拉流k可能相同 public static final String play_key = "XXXXXXXXXXXXXXXX"; //推流地址 public static final String pushUrl ="rtmp://xxxxx.livepush.myqcloud.com/live/xxxxx"; //拉流地址 例子 rtmp 只需要将push 改成play即可 //自己申请的播放地址域名xx.xxx.cn或xx.xxx.com public static final String playUrl_rtmp ="rtmp://xx.xxx.cn/live/xxxxx"; public static final String playUrl_flv ="http://xx.xxx.cn/live/xxxxx.flv"; public static final String playUrl_hls ="http://xx.xxx.cn/live/xxxxx.m3u8"; public static String genSign(String key,String streamName, String txTime) { return MD5Encode.getMD5Str(key+streamName+txTime); } public static String pushSign(String key, String txTime) { return MD5Encode.getMD5Str(key+txTime); } public static String genLiveCode(String bizid,String userId) { return bizid+"_"+userId; } public static String bizid(){ int newNum = (int)((Math.random()*9+1)*100000); return String.valueOf(newNum); } public static String to16Hex(Date date) { Long ab = date.getTime()/1000; String a = Long.toHexString(ab); return a.toUpperCase(); } public static Date addOneDay() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, 1); Date date = cal.getTime(); return date; } public static boolean isPush(String urls) { try { URL url = new URL(urls); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(1000); conn.setReadTimeout(1000); conn.setRequestMethod("GET"); conn.connect(); return conn.getResponseCode() == 200; } catch (Exception e) { } return false; } } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
3.本次写测试方法用接口的方式,也可以用main方法,这个看个人爱好
创建TestController类
package com.tencentyun.util; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import static com.tencentyun.util.TencentYunVedioUtil.*; @RestController @RequestMapping("/") public class TestController { @PostMapping("createPushUrl") public static String createPushUrl() { //过期时间 16进制的unix时间戳 String txTime = to16Hex(addOneDay()); // 填写自己的streamName String streamName="xxxxx"; StringBuffer sb = new StringBuffer(); String pushUrlHead=TencentYunVedioUtil.pushUrl; // String stream_id = TencentYunVedioUtil.bizid(); sb.append(pushUrlHead).append("?").append("txSecret=") .append(genSign(push_key, streamName,txTime)).append("&").append("txTime=") .append(txTime); return sb.toString(); } @PostMapping("createPlayUrl") public static String createPlayUrl() { //过期时间 16进制的unix时间戳 String txTime = to16Hex(addOneDay()); StringBuffer sb = new StringBuffer(); //String stream_id = TencentYunVedioUtil.bizid(); sb.append(playUrl_flv).append("?").append("txSecret=").append(pushSign(play_key, txTime)) .append("&") .append("txTime=") .append(txTime); return sb.toString(); } } 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
五、测试
个人喜欢用postman测试,也可以使用其他测试方法,浏览器测试也是可以的,注意是POST请求
推流测试地址:localhost:8080/createPushUrl
直播测试地址:localhost:8080/createPlayUrl
生成的推流地址和直播地址我们可以利用腾讯云提供的工具来测试是否可用
到这里就结束了,如果有小伙伴有疑问可以在下方留言,或者咨询问题!