加密工具類
public class Md5Utils { public static String getMD5(String str) { try { // 生成一個MD5加密計算摘要 MessageDigest md = MessageDigest.getInstance("MD5"); // 計算md5函數 md.update(str.getBytes()); // digest()最后確定返回md5 hash值,返回值為8為字符串。因為md5 hash值是16位的hex值,實際上就是8位的字符 // BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值 String md5=new BigInteger(1, md.digest()).toString(16); //BigInteger會把0省略掉,需補全至32位 return fillMD5(md5); } catch (Exception e) { throw new RuntimeException("MD5加密錯誤:"+e.getMessage(),e); } } private static String fillMD5(String md5){ return md5.length()==32?md5:fillMD5("0"+md5); } }
拼接推流和播流地址
import com.alibaba.nacos.common.util.UuidUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.RandomStringUtils; import java.text.ParseException; import java.util.HashMap; import java.util.Map; /** * 創建時間 2018/11/12 * * @author plani */ @Slf4j public class PlayAndPushUtils { /** * @param appName 控制台上面的app名稱 * @param streamName 流的名稱 * @param time 十位數的時間戳 * @param rand 隨機數,建議使用UUID(不能包含中划線“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式) * @param key 鑒權key * @param liveDomain 推流域名 * @return 推流的地址 */ public static String CreatePushUrl(String appName, String streamName, String time,String rand, String key, String liveDomain) { /* Objects.requireNonNull(appName); Objects.requireNonNull(streamName); Objects.requireNonNull(time); Objects.requireNonNull(key); Objects.requireNonNull(liveDomain);*/ String strpush = "/" + appName + "/" + streamName + "-" + time + "-0-0-" + key; String pushurl = "rtmp://"+liveDomain+"/" + appName + "/" + streamName + "?auth_key=" + time + "-0-0-" + Md5Utils.getMD5(strpush); return pushurl; } /** * @param appName 控制台上面的app名稱 * @param streamName 流的名稱 * @param time 十位數的時間戳 * @param rand 這是用來標識的 否則同一個時間戳 生成的地址總是相同的 隨機數,建議使用UUID(不能包含中划線“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式) * @param key 鑒權key * @param liveDomain 推流域名 * @param templateId 無用 傳入null就行 * @return 播放流的地址 默認是flv 也可以更改此代碼 */ public static Map<String, String> GetPlayUrl(String appName, String streamName, String time, String rand, String key, String liveDomain, String templateId) { String strviewrtmp1 = null; String strviewflv1 = null; String strviewm3u81 = null; String rtmpurl1 = null; String flvurl1 = null; String m3u8url1 = null; Map<String,String> map = new HashMap<>(); if (templateId == null) { strviewrtmp1 = "/" + appName + "/" + streamName + "-" + time + "-0-0-" + key; strviewflv1 = "/" + appName + "/" + streamName + ".flv-" + time + "-0-0-" + key; strviewm3u81 = "/" + appName + "/" + streamName + ".m3u8-" + time + "-0-0-" + key; rtmpurl1 = "rtmp://" + liveDomain + "/" + appName + "/" + streamName + "?auth_key=" + time + "-0-0-" + Md5Utils.getMD5(strviewrtmp1); flvurl1 = "http://" + liveDomain + "/" + appName + "/" + streamName + ".flv?auth_key=" + time + "-0-0-" + Md5Utils.getMD5(strviewflv1); m3u8url1 = "http://" + liveDomain + "/" + appName + "/" + streamName + ".m3u8?auth_key=" + time + "-0-0-" + Md5Utils.getMD5(strviewm3u81); map.put("rtmpurl",rtmpurl1); map.put("flvurl",flvurl1); map.put("m3u8url",m3u8url1); } else { strviewrtmp1 = "/" + appName + "/" + streamName + "_" + templateId + "-" + time + "-"+rand+"-0-" + key; strviewflv1 = "/" + appName + "/" + streamName + "_" + templateId + ".flv-" + time + "-"+rand+"-0-" + key; strviewm3u81 = "/" + appName + "/" + streamName + "_" + templateId + ".m3u8-" + time + "-"+rand+"-0-" + key; rtmpurl1 = "rtmp://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + "?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewrtmp1); flvurl1 = "http://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + ".flv?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewflv1); m3u8url1 = "http://" + liveDomain + "/" + appName + "/" + streamName + "_" + templateId + ".m3u8?auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strviewm3u81); map.put("rtmpurl",rtmpurl1); map.put("flvurl",flvurl1); map.put("m3u8url",m3u8url1); } return map; } }