首页 > 编程语言 >java 阿里云直播配置及推拉流地址获取

java 阿里云直播配置及推拉流地址获取

时间:2023-07-11 14:00:56浏览次数:51  
标签:java String appName timeStamp streamName param 推拉 直播 pullDomain

原文地址:https://blog.csdn.net/zhanglei5415/article/details/131551685?spm=1001.2014.3001.5501

一、开通阿里云直播

  1. 首先进入阿里云直播产品主页: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

标签:java,String,appName,timeStamp,streamName,param,推拉,直播,pullDomain
From: https://www.cnblogs.com/reyzhang/p/17544451.html

相关文章

  • JAVA 和python 多网卡情况下获取正确的IP地址
    要获取内网地址,可以尝试连接到10.255.255.255:1。如果连接成功,获取本地套接字的地址信息就是当前的内网IP。python实现:importsocketdefextract_ip():st=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)try:st.connect(('10.255.255.255',1))......
  • java如何调用python.py文件并传参
    注意:java调用python.py文件并传参,在windows和linux中使用是不一样的我在windows操作系统中,java调用python文件并传参,是这样写的:完全没问题try{IntegertotalTestCaseCount=0;//传入python文件的参数:StringxmindFilePath,StringtestCaseKeyWo......
  • Java网络编程
    1.ip和端口ip地址InetAddress//因为没有构造方法,所以不能通过new来生成对象,但是可以通过类名来调用类的静态方法InetAddressinetAddress1=InetAddress.getByName("localhost");System.out.println(inetAddress1);InetAddressinetAddress2=I......
  • 520要通过这种方式告白 html+css+javascript canvas桃心代码 可修改 【附完整代码】
    ......
  • 【JAVA开发环境配置】 我也可以让JDK版本来去自由的切换了! 哈哈哈哈 舒服!
    ......
  • eclipse的java+tomcat配置以及一些异常处理
    真是折磨人,下载版本不匹配、匹配了又配置需要插件、插件下载后安装又出错误,运行时有报莫名其妙的错误……过程错了或者稍微忘了哪里就gg,等到最后还得查运行的bug。一、装jdk、jre,并配置环境变量系统变量→新建JAVA_HOME变量。系统变量→寻找Path变量→编辑,在变量值最后输入%JA......
  • JavaScript|ES6语法
    1箭头函数1)语法constfn=(参数)=>{函数体}constfn=(x)=>x+1简写constfn=(x)=>x+1当函数体中只有一行return时可以同时省略{}和return2)示例<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"......
  • 【JavaScript】js 处理复制函数实现
    consthandleCopy=()=>{if(!keywordList.value.length)returnElMessage.warning('没有数据');consttext=JSON.stringify(keywordList.value);constinput=document.createElement('input');input.setAttribute('readonly......
  • 如何使用Java在Excel中实现一个数据透视表
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前一段时间淘宝出了一个“淘宝人生”的模块,可以看从注册淘宝账号至今的消费记录,仔细想了想,现在微信、淘宝这些APP好像都喜欢出这种记录使用......
  • Java 亿级项目架构设计与落地应用(24周)
    目录:阶段一:程序员的成长目标与方向阶段二:架构师必备基本功-需求分析阶段三:高层架构设计-从无到有描绘系统蓝图阶段四:系统架构设计-概要设计阶段五:系统架构设计-详细架构设计,走向真正落地阶段六:DDD领域驱动架构设计-复杂业务应对之道阶段七:亿级电商订单系统-架构设......