springboot集成阿里云直播,低延时直播

  1. 首先要在阿里云上配置推流域名、播流域名、推流鉴权key、拉流鉴权key、鉴权时间
  2. 引入pom依赖
     <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-live</artifactId><version>3.9.17</version></dependency>
  1. 配置文件配置直播属性
 #阿里云直播#阿里云推流域名aliyun.live.push.domain=xxx.xxx.com#阿里云拉流域名aliyun.live.pull.domain=xxx.xxx.com#推流鉴权url keyaliyun.live.push.ident.key=xxxxxxxxxxxxxxxx#拉流鉴权的keyaliyun.live.pull.ident.key=xxxxxxxxxxxxxxxx#鉴权时间 30*2分钟aliyun.live.ident.url.validTime=3600
  1. 配置文件获取属性值
 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;/*** Created with IntelliJ IDEA.** @Author: Administrator* @Date: 2022/04/26/15:58* @Description:*/@Configuration@PropertySource("classpath:application.properties")public class AliYunhiZhiboConfig {/*** 推流域名*/@Value("${aliyun.live.push.domain}")private String aliyunLivePushDomain;/*** 拉流域名*/@Value("${aliyun.live.pull.domain}")private String aliyunLivePullDomain;/*** 推流鉴权url key*/@Value("${aliyun.live.push.ident.key}")private String aliyunLivePushIdentKey;/*** 拉流鉴权url key*/@Value("${aliyun.live.pull.ident.key}")private String aliyunLivePullIdentKey;/*** 鉴权url的有效时间(秒),默认30分钟,1800秒 key*/@Value("${aliyun.live.ident.url.validTime}")private Integer aliyunLiveIdentUrlValidTime;/*** OSS-区域代码*/@Value("cn-shanghai")private String regionId;public String getAliyunLivePushDomain() {return aliyunLivePushDomain;}public void setAliyunLivePushDomain(String aliyunLivePushDomain) {this.aliyunLivePushDomain = aliyunLivePushDomain;}public String getAliyunLivePullDomain() {return aliyunLivePullDomain;}public void setAliyunLivePullDomain(String aliyunLivePullDomain) {this.aliyunLivePullDomain = aliyunLivePullDomain;}public String getAliyunLivePushIdentKey() {return aliyunLivePushIdentKey;}public void setAliyunLivePushIdentKey(String aliyunLivePushIdentKey) {this.aliyunLivePushIdentKey = aliyunLivePushIdentKey;}public String getAliyunLivePullIdentKey() {return aliyunLivePullIdentKey;}public void setAliyunLivePullIdentKey(String aliyunLivePullIdentKey) {this.aliyunLivePullIdentKey = aliyunLivePullIdentKey;}public Integer getAliyunLiveIdentUrlValidTime() {return aliyunLiveIdentUrlValidTime;}public void setAliyunLiveIdentUrlValidTime(Integer aliyunLiveIdentUrlValidTime) {this.aliyunLiveIdentUrlValidTime = aliyunLiveIdentUrlValidTime;}}
  1. 控制器
 /*** Created with IntelliJ IDEA.** @Author: Administrator* @Date: 2022/04/28/14:29* @Description:*/@RestController@RequestMapping("/zhibo")public class ZhiboController {@Autowiredprivate AliYunhiZhiboConfig aliyunConfig;/*** 返回的信息:* RTMP播放地址为: rtmp://playtest.gotyun.com/aUEVx/6nJg0?auth_key=1651052008-0-0-543efb99fe67ec487e404da7e312ab30* m3u8播放地址为: http://playtest.gotyun.com/aUEVx/6nJg0.m3u8?auth_key=1651052008-0-0-b4bf93d26805ae77f9e7cd79948cf963* flv播放地址为: http://playtest.gotyun.com/aUEVx/6nJg0.flv?auth_key=1651052008-0-0-a72fe00d653b27a2e675395703199e3f* [RTMP播放地址为: rtmp://playtest.gotyun.com/aUEVx/6nJg0?auth_key=1651052008-0-0-543efb99fe67ec487e404da7e312ab30, m3u8播放地址为: http://playtest.gotyun.com/aUEVx/6nJg0.m3u8?auth_key=1651052008-0-0-b4bf93d26805ae77f9e7cd79948cf963, flv播放地址为: http://playtest.gotyun.com/aUEVx/6nJg0.flv?auth_key=1651052008-0-0-a72fe00d653b27a2e675395703199e3f]* 推流地址是: rtmp://sendtest.gotyun.com/aUEVx/6nJg0?auth_key=1651052008-0-0-16a8511d9573709e37f33e6983661ff0* 推流地址是: rtmp://sendtest.gotyun.com/aUEVx/6nJg0?auth_key=1651052008-0-0-16a8511d9573709e37f33e6983661ff0*/@GetMapping("/dizhi")public void dizhi() {String appName = RandomStringUtils.randomAlphanumeric(5);;String streamName = RandomStringUtils.randomAlphanumeric(5);;long expireTime = 3600L;System.out.println(AliYunUtil.general_pull_url(aliyunConfig.getAliyunLivePullDomain(), null, appName, streamName, expireTime));System.out.println(AliYunUtil.generate_push_url(aliyunConfig.getAliyunLivePushDomain(), aliyunConfig.getAliyunLivePushIdentKey(), appName, streamName, expireTime));}}
  1. AliYunUtil直播工具类
 import org.apache.commons.lang3.RandomStringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.math.BigInteger;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/*** Created with IntelliJ IDEA.** @Author: Administrator* @Date: 2022/04/26/16:00* @Description:*/public class AliYunUtil {/*** 计算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 String 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);return pushUrl;}/*** 生成播放地址* @param pullDomain 播放域名* @param pullKey 播放鉴权Key* @param appName 播放appName(同推流appName)* @param streamName 播放streamName (同推流streamName)* @param expireTime 过期时间(单位是秒*/public static String general_pull_url(String pullDomain, String pullKey, String appName, String streamName, long expireTime) {//rtmp的拉流地址String rtmpUrl = "";//m3u8的拉流地址String hlsUrl = "";//flv的拉流地址String flvUrl = "";//播放域名未配置鉴权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);/*List<String> url = new ArrayList<>();url.add("RTMP播放地址为: "+rtmpUrl);url.add("m3u8播放地址为: "+hlsUrl);url.add("flv播放地址为: "+flvUrl);*/return hlsUrl;}/*** main方法测试*/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 = "play.gotyun.com";//播流域名String pullKey = "";//播流keyString pushDomain = "send.gotyun.com";//推流域名String pushKey = "";//推流keySystem.out.println(general_pull_url(pullDomain, pullKey, appName, streamName, expireTime));System.out.println(generate_push_url(pushDomain, pushKey, appName, streamName, expireTime));}}

注意如果需要在移动端播放,直接返回m3u8地址,其它地址都不能正常在移动端播放

经过测试,这个还是有15s左右的延迟
在阿里云配置推流和拉流域名参考链接

springboot集成阿里云直播,低延时直播相关推荐

  1. SpringBoot集成阿里云短信服务

    SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...

  2. springboot集成阿里云短信服务,实现发送短信功能

    springboot集成阿里云短信服务,实现发送短信功能 准备工作: 1.登陆阿里云->进入控制台->开通短信服务(进入后根据提示开通) 2.充值(借人家平台发短信你以为不要钱的?我充了3 ...

  3. SpringBoot集成阿里云存储OSS服务

    前言 该文章会先简单的介绍一下阿里云的OSS存储,然后演示如何在SpringBoot项目中集成OSS,每一步都有记录,保证初学者也能看懂. 文章目录 前言 1.阿里云存储OSS是什么? 2.Sprin ...

  4. springBoot集成阿里云企业邮箱

    前言 springboot项目,集成阿里云企业邮箱,进行邮件发送,附带文件 代码 public class AliyunMail {public static final String ALIDM_S ...

  5. java SpringBoot 集成 阿里云视频直播 完成直播功能

    经历了几天的周折,近期才把项目完成,在这里与大家分享一下踩坑之路,也方便日后有类似项目,可以借阅一番 开发直播前先满足已下条件 1.开通视频直播功能 2.购买好了OSS存储 3.购买两个域名并且备案好 ...

  6. java SpringBoot 集成 阿里云视频直播 完成直播功能

    经历了几天的周折,近期才把项目完成,在这里与大家分享一下踩坑之路,也方便日后有类似项目,可以借阅一番 该项目是一个H5直播,采用m3u8格式完成直播的展示.通过推流地址,借助第三方推流工具实现直播效果 ...

  7. springBOOT集成阿里云MQ-AMQP

    序: MQ的优势就不做介绍了可以自行百度,前篇写了springboot集成本地搭建的rabbitmq组建,但是项目最后部署打算还是直接使用阿里云的AMQP,阿里云AMQP是直接可以兼容rabbitmq ...

  8. SpringBoot集成阿里云支付

    阿里云支付 支付宝官方文档说明 https://opendocs.alipay.com/open/203/107091 开发准备 1.登录支付宝开发平台(支付宝账号) 地址: https://open ...

  9. springboot集成阿里云rocketMQ代码示例

    集成目标:完成生产者发送消息,消费者接收消息的整个流程 集成步骤: 1.引入jar包依赖 <!--rocketMq消息队列--><dependency><groupId& ...

  10. SpringBoot集成阿里云短信服务实现登录注册(超详细)

    本篇博客采用得技术为:springboot + redis + aliyun短信验证 redis我用来做短信校验,首先我们先刨除redis部分做一个发送功能 登录你得阿里云账号 1 -> 控制台 ...

最新文章

  1. 并发编程之多进程进程进程
  2. 重构手法(一)之重新组织函数
  3. [Python图像处理] 十.形态学之图像顶帽运算和黑帽运算
  4. SpringCloud版本名字
  5. 【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理
  6. Leetcode--1160.拼写单词(Java)
  7. Go搭建静态页面server笔记
  8. (18)FPGA时序逻辑与组合逻辑(第4天)
  9. Layui 是否开启合计行区域
  10. CSDN如何获取下载分以及进入下载频道必须知道的规则
  11. quartus ii IP核的破解
  12. CAN通讯进阶-基于Python使用dbc文件解析CAN数据(dbc文件的创建、使用方法)
  13. 免费下载IEEE、SCI论文的网站
  14. 陀螺仪-加速计-磁力计
  15. c语言求最小值函数min的用法,C语言--min的宏定义
  16. 在CAD软件中如何批量打印黑白CAD图纸
  17. python按概率生成随机数
  18. 【金三银四】 一文弄懂 js 数据类型、堆栈内存、作用域(链)、闭包知识拓展 (一)
  19. 为什么.bat脚本不断重复执行同一命令
  20. 数据库三大范式详解,部分依赖、完全依赖、传递依赖

热门文章

  1. 关于VM开启黑屏的解决方法
  2. 深度学习技术在股票交易上的应用研究调查
  3. Browsing HDFS报错
  4. 够哦了下攻击力开房间的发的goole
  5. Amazon AWS 中国区的那些坑
  6. 亲爱的面试官,这个我可没看过!(Android部分)
  7. win8.1打开网络上的计算机没有权限,Win8无网络访问权限_Win8无internet访问权限怎么解决-192路由网...
  8. 数字孪生--技术介绍
  9. 易捷行云EasyStack与火星高科完成产品互认证,保护云上数据
  10. 16个最新创意品牌Logo设计 —— “形神”兼具的设计,方显高级和质感