当前位置: 首页 > news >正文

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

一、开通阿里云直播

  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

http://www.lryc.cn/news/94620.html

相关文章:

  • PostgreSql 限制
  • 2023年java还是golang还是c#?
  • 微服务、SpringBoot、SpringCloud 三者的区别
  • 2023-07-10 cmake管理的项目中使用vcpkg管理第三方库
  • 【剑指offer】学习计划day3
  • QT DAY1
  • Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影
  • 网络安全(黑客)自学
  • 通过一个实际例子说明Django中的数据库操作方法OneToOneField()的用法【数据表“一对一”关系】
  • HarmonyOS学习路之开发篇—数据管理(对象关系映射数据库)
  • 实验:验证TCP套接字传输的数据不存在数据边界
  • 【网络】协议的定制与Json序列化和反序列化
  • 浙大数据结构第一周最大子列和问题
  • Selenium基础 — Selenium自动化测试框架介绍
  • 力扣竞赛勋章 | 排名分数计算脚本
  • win10 远程 ubuntu 18.04 桌面
  • c++ -- STL
  • 文字识别(OCR)介绍与开源方案对比
  • Modbus tcp转ETHERCAT在Modbus软件中的配置方法
  • 开源点云数据集整理汇总
  • 【全栈开发指南】VUE前端路由设计及配置
  • C语言程序环境和预处理
  • 为摸鱼助力:一份Vue3的生成式ElementPlus表单组件
  • 数通工作中常见问题与解决方法
  • 基于STM32+华为云IOT设计的智能浇花系统
  • 回调函数(callback)是什么?
  • 零代码量化投资:用ChatGPT获取新浪财经上的股票实时行情
  • 从GitLab拉取并运行项目
  • AI绘画结合GPT 把Ai绘画与摄影玩明白
  • 哈工大计算机网络课程数据链路层协议详解之:多路访问控制(MAC)协议