原文地址:https://blog.csdn.net/zhanglei5415/article/details/131551685
一、开通阿里云直播
- 首先进入阿里云直播产品主页:https://www.aliyun.com/product/live 。 点击下方的“立即开通”。 如果是还未注册的用户请按照页面提示进行完成注册并实名认证。
2、首次进入会提示开通服务,点击“开通服务”,然后选择计费方式,同意服务协议,然后立即开通。
- 按使用
流量计费
适合用于观看直播人数较少的情况, - 按
宽带峰值计费
适合用于观看人数较多的时候,如果不确定就按使用流量计费。
前期用量不太多,选择按“流量计费”
服务开通以后,按照官网流程,下一步就是 直播的基础配置:域名管理
二、接入推流域名
1、由于阿里云直播没有提供推流域名,所以我们要接入自己的
推流域名。点击左侧“加速服务~添加域名”
。
2、按下图示例,根据自己的实际填写,然后提交。
3、返回“域名管理”,会看到刚才添加的推流域名,把域名右侧的“CNAME”
值复制出来,到您的域名服务商处做解析。
4、配置完上一个步骤后,返回域名管理,稍等几分钟解析生效后会看到域名状态已经是“正常运行”
。点击域名右侧的“域名配置”
进入配置页面。
注意:建议先配置
推流
。 因为后面在配置播流时要去关联推流,所以先配置
5、点击左侧的“访问控制”
,然后修改URL鉴权
配置,按下图示例填写,然后提交。
弹窗,修改配置
三、接入播流域名
前四步与接入推流域名的过程类似,就不再赘述
五、关联推流域名。 点击“基本配置~推流信息”
#######################分割线#######################
#######################分割线#######################
点“确定”。 确定完成之后,基本上我们的推流域名与播流域名就配置完成了 。
四、测试工具
完成了推流域名与播流域名的配置后, 可以通过阿里提供的工具来进行推/播流的生成了
点击左侧的 “工具箱~地址生成器”
#######################分割线#######################
五、 java代码生成推拉流地址
import java.math.BigInteger;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import org.apache.commons.lang3.*;public class Create_Live_Url { /** * 计算md5 * @param param * @return */ public static String md5(String param) { if(param == null || param.length() == 0) { return null; } try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(param.getBytes()); byte[] byteArray = md5.digest(); BigInteger bigInt = new BigInteger(1, byteArray); // 参数16表示16进制 String result = bigInt.toString(16); // 不足32位高位补零 while(result.length() < 32) { result = "0" + result; } return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; }/*** 生成推流地址* @param pushDomain 推流域名* @param pushKey 推流域名配置的鉴权Key* @param appName 推流AppName* @param streamName 推流StreamName* @param expireTime 过期时间(单位是秒)*/ public static void generate_push_url(String pushDomain,String pushKey,String appName,String streamName,long expireTime) { String pushUrl = ""; //推流域名未开启鉴权功能的情况下 if(pushKey=="") { pushUrl = "rtmp://"+pushDomain+"/"+appName+"/"+streamName; }else { long timeStamp = System.currentTimeMillis()/1000L + expireTime; String stringToMd5 = "/"+appName+"/"+streamName+"-"+Long.toString(timeStamp)+"-0-0-"+pushKey; String authKey = md5(stringToMd5); pushUrl = "rtmp://"+pushDomain+"/"+appName+"/"+streamName+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+authKey; } System.out.println("推流地址是: "+pushUrl); }/*** 生成播放地址* @param pullDomain 播放域名* @param pullKey 播放鉴权Key* @param appName 播放appName(同推流appName)* @param streamName 播放streamName 同推流streamName)* @param expireTime 过期时间(单位是秒*/ public static void general_pull_url(String pullDomain,String pullKey,String appName,String streamName,long expireTime) { String rtmpUrl = ""; //rtmp的拉流地址 String hlsUrl = ""; //m3u8的拉流地址 String flvUrl = ""; //flv的拉流地址 //播放域名未配置鉴权Key的情况下 if(pullKey == "") { rtmpUrl = "rtmp://"+pullDomain+"/"+appName+"/"+streamName; hlsUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".m3u8"; flvUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".flv"; }else { long timeStamp = System.currentTimeMillis()/1000L + expireTime; String rtmpToMd5 = "/"+appName+"/"+streamName+"-"+Long.toString(timeStamp)+"-0-0-"+pullKey; String rtmpAuthKey = md5(rtmpToMd5); rtmpUrl = "rtmp://"+pullDomain+"/"+appName+"/"+streamName+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+rtmpAuthKey; String hlsToMd5 = "/"+appName+"/"+streamName+".m3u8-"+Long.toString(timeStamp)+"-0-0-"+pullKey; String hlsAuthKey = md5(hlsToMd5); hlsUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".m3u8"+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+hlsAuthKey; String flvToMd5 = "/"+appName+"/"+streamName+".flv-"+Long.toString(timeStamp)+"-0-0-"+pullKey; String flvAuthKey = md5(flvToMd5); flvUrl = "http://"+pullDomain+"/"+appName+"/"+streamName+".flv"+"?auth_key="+Long.toString(timeStamp)+"-0-0-"+flvAuthKey; } System.out.println("RTMP播放地址为: "+rtmpUrl); System.out.println("m3u8播放地址为: "+hlsUrl); System.out.println("flv播放地址为: "+flvUrl);} public static void main(String[] args) { // TODO Auto-generated method stub //生成长度为5的随机字符串作为appName和streamName(字母和数字组合) String appName = RandomStringUtils.randomAlphanumeric(5);; String streamName = RandomStringUtils.randomAlphanumeric(5);; long expireTime = 3600L; String pullDomain = "mxl-pull.pier39.cn"; String pullKey = "querty1234"; String pushDomain = "mxl-push.pier39.cn"; String pushKey = "querty123"; Create_Live_Url.general_pull_url(pullDomain, pullKey, appName, streamName, expireTime); Create_Live_Url.generate_push_url(pushDomain, pushKey, appName, streamName, expireTime);}} //end class
参考:https://help.aliyun.com/document_detail/456848.htm?spm=5176.13499635.help.dexternal.6b482699KJQJLs
本文来自博客园,作者:reyzhang,转载请注明原文链接:https://www.cnblogs.com/reyzhang/p/17584350.html