1:开通阿里云直播服务

2:进入到直播控制台

3:点击域名管理----添加推流域名

同样方式添加播流域名,根据需要选择加速区域

4:返回列表

注意CNAME和直播中心

复制CNAME参数跳转到域名控制台,域名列表中选择对应域名,然后点击解析,再点击添加记录

返回列表启用该域名,同样的方式配置播流,注意直播中心要选择同一个中心

5:返回直播控制台--》域名管理---》配置域名

配置播流和推流关联,播流和推流域名配置中有访问控制,开启url鉴权,会看到主KEY,播流和推流主KEY开发中用得到

然后点击直播管理中的地址生成

appName和StreamName自定义即可,StreamName就算是房间id吧,个人理解,然后点击开始生成

然后得到推流和播流地址

下载阿里推荐的obs推流工具和vlc播放工具

添加一个场景 、添加一个来源选择显示器采集或者媒体源,点击控件中的设置选择推流

确定之后点击开始推流

然后复制播流地址打开VLC点击媒体----》打开网络串流,输入播流地址,我在测试的时候除了RTMP格式的除外其他的都不能播放,

代码直接复制阿里云调试中的

@ApiOperation("直播鉴权")
@PostMapping("/authentication")
public CommonResult authentication(String roomId) {String pullDomain = videoClientConfig.getPullDomain();String pushDomain = videoClientConfig.getPushDomain();String appName = videoClientConfig.getAppName();String pullIdentKey = videoClientConfig.getPullIdentKey();String pushIdentKey = videoClientConfig.getPushIdentKey();Integer identUrlValidTime = videoClientConfig.getIdentUrlValidTime();String pushUrl = AliyunLiveUtil.createPushUrl(identUrlValidTime, pushDomain, appName, roomId, pushIdentKey);Map<String, String> map = AliyunLiveUtil.createPullUrl(pullDomain, appName, roomId, pullIdentKey, identUrlValidTime);map.put("pushUrl",pushUrl);log.info("-------------拉流域名={}", JSONObject.toJSONString(map));return CommonResult.success(map);
}

参数roomId是StreamName

 /*** 根据源id创建该id的推流url** @param identUrlValidTime 鉴权url的有效时间(秒),默认30分钟,1800秒* @param pushDomain        推流域名* @param appName           直播测试appName* @param streamName        直播测试streamName* @param pushIdentKey      推流鉴权url key* @return*/
public static String createPushUrl(Integer identUrlValidTime, String pushDomain, String appName, String streamName, String pushIdentKey) {// 计算过期时间String timestamp = String.valueOf((System.currentTimeMillis() / 1000) + identUrlValidTime);// 组合推流域名前缀// rtmp://{pushDomain}/{appName}/{streamName}String rtmpUrl = StrUtil.format("rtmp://{}/{}/{}", pushDomain, appName, streamName);log.info("----------推流域名前缀,rtmpUrl={}",rtmpUrl);// 组合md5加密串// /{appName}/{streamName}-{timestamp}-0-0-{pushIdentKey}String md5Url = StrUtil.format("/{}/{}-{}-0-0-{}", appName, streamName, timestamp, pushIdentKey);// md5加密String md5Str = DigestUtil.md5Hex(md5Url);log.info("---------md5加密串,md5Url={}------md5加密结果,md5Str = {}",md5Url,md5Str);// 组合最终鉴权过的推流域名// {rtmpUrl}?auth_key={timestamp}-0-0-{md5Str}String finallyPushUrl = StrUtil.format("{}?auth_key={}-0-0-{}", rtmpUrl, timestamp, md5Str);log.info("--------------最终鉴权过的推流域名={}",finallyPushUrl);return finallyPushUrl;}
/*** 创建拉流域名,key=rtmpUrl、flvUrl、m3u8Url,代表三种拉流类型域名** @param pullDomain        拉流域名* @param appName           应用名称* @param streamName        流名称* @param pullIdentKey      拉流鉴权url key* @param identUrlValidTime 鉴权url的有效时间(秒),默认30分钟,1800秒* @return*/public static Map<String, String> createPullUrl(String pullDomain, String appName, String streamName, String pullIdentKey, Integer identUrlValidTime) {// 计算过期时间String timestamp = String.valueOf((System.currentTimeMillis() / 1000) + identUrlValidTime);// 组合通用域名// {pullDomain}/{appName}/{streamName}String pullUrl = StrUtil.format("{}/{}/{}", pullDomain, appName, streamName);log.info("-----createPullUrl-------组合通用域名,pullUrl={}",pullUrl);// 组合md5加密串// /{appName}/{streamName}-{timestamp}-0-0-{pullIdentKey}String md5Url = StrUtil.format("/{}/{}-{}-0-0-{}", appName, streamName, timestamp, pullIdentKey);String md5FlvUrl = StrUtil.format("/{}/{}.flv-{}-0-0-{}", appName, streamName, timestamp, pullIdentKey);String md5M3u8Url = StrUtil.format("/{}/{}.m3u8-{}-0-0-{}", appName, streamName, timestamp, pullIdentKey);// md5加密String md5Str = DigestUtil.md5Hex(md5Url);String md5FlvStr = DigestUtil.md5Hex(md5FlvUrl);String md5M3u8Str = DigestUtil.md5Hex(md5M3u8Url);log.info("-------createPullUrl----------md5加密串,md5Url    ={},------       md5加密结果,md5Str = {}",md5Url, md5Str);log.info("-------createPullUrl----------md5加密串,md5FlvUrl ={},------    md5加密结果,md5FlvStr = {}",md5FlvUrl,md5FlvStr);log.info("-------createPullUrl----------md5加密串,md5M3u8Url={},------    md5加密结果,md5M3u8Str= {}",md5M3u8Url,md5M3u8Str);// 组合三种拉流域名前缀// rtmp://{pullUrl}?auth_key={timestamp}-0-0-{md5Str}String rtmpUrl = StrUtil.format("rtmp://{}?auth_key={}-0-0-{}", pullUrl, timestamp, md5Str);// http://{pullUrl}.flv?auth_key={timestamp}-0-0-{md5FlvStr}String flvUrl = StrUtil.format("http://{}.flv?auth_key={}-0-0-{}", pullUrl, timestamp, md5FlvStr);// http://{pullUrl}.m3u8?auth_key={timestamp}-0-0-{md5M3u8Str}String m3u8Url = StrUtil.format("http://{}.m3u8?auth_key={}-0-0-{}", pullUrl, timestamp, md5M3u8Str);log.info("-------createPullUrl----最终鉴权过的拉流rtmp域名  ={}",rtmpUrl);log.info("-------createPullUrl----最终鉴权过的拉流flv域名   ={}",flvUrl);log.info("-------createPullUrl----最终鉴权过的拉流m3u8域名  ={}",m3u8Url);HashMap<String, String> urlMap = new HashMap<String, String>();urlMap.put("rtmpUrl", rtmpUrl);urlMap.put("flvUrl", flvUrl);urlMap.put("m3u8Url", m3u8Url);return urlMap;}
@Getter
@Setter
public class VideoClientConfig {//    private static String liveEdge = "www.yourLiveEdge.club";
//    private static String liveVideo = "www.yourLiveVideo.club";/*** 推流域名*/@Value("${aliyun.pushDomain}")private String pushDomain;/*** 播流域名*/@Value("${aliyun.pullDomain}")private String pullDomain;@Value("${aliyun.regionId-bj}")private String regionIdbj;@Value("${aliyun.regionId-sh}")private String regionIdsh;@Value("${aliyun.accessKeyID}")private String accessKeyID;@Value("${aliyun.accessKeySecret}")private String accessKeySecret;@Value("${aliyun.appName}")private String appName;@Value("${aliyun.pullIdentKey}")private String pullIdentKey;@Value("${aliyun.pushIdentKey}")private String pushIdentKey;@Value("${aliyun.streamName}")private String streamName;@Value("${aliyun.identUrlValidTime}")private Integer identUrlValidTime;@Value("${aliyun.liveDomainType}")private String liveDomainType;/*** Initialization  初始化公共请求参数*/public DefaultAcsClient initialization() {// 初始化请求参数,可用地区码,key,secretDefaultProfile profile = DefaultProfile.getProfile(regionIdbj, accessKeyID, accessKeySecret);DefaultAcsClient defaultAcsClient = new DefaultAcsClient(profile);return defaultAcsClient;}

然后在控制器中:

@Autowired
private VideoClientConfig videoClientConfig;

参数配置

aliyun:pullIdentKey: 123456pushIdentKey: 789012appName: testidentUrlValidTime: 1800regionId: cn-beijing# 推流域名pushDomain: push.test.com# 域名业务类型。取值:liveVideo:播流域名  liveEdge:边缘推流域名liveDomainType: liveVideo# 播流域名pullDomain: pull.test.com# 推流回调地址pushNotify: http://test.test.com/live/notify/pushaccessKeyID: 123456789accessKeySecret: 987654321

pullIdentKey: 123456
  pushIdentKey: 789012

这两个参数分别是直播控制台的域名管理中的播流域名和推流域名中的主KEY,如果不一致的话不影响鉴权,但是最后输出的播流和推流地址在工具中不能使用,要么不能正常播放。

其他代码就可以从阿里云调试中copy了

阿里云视频直播开发----java相关推荐

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

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

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

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

  3. 超级详细!java实现阿里云视频直播功能

    java实现阿里云视频直播 准备工作 [官方地址](https://help.aliyun.com/document_detail/198676.html?spm=a2c4g.446769.0.0.1 ...

  4. 阿里云视频直播使用详细步骤

    目录 一.阿里云视频直播 1.什么是视频直播 2.视频直播架构 3.官方文档链接 二.使用流程 1.使用条件 2.添加推流域名和播流域名 3.配置CNAME 4.关联推流域名和播流域名 5.生成推流地 ...

  5. 深度解读:阿里云视频直播功能升级

    2022年注定是体育超级大年,冬奥.亚运会.大运会.世界杯等各类大型体育赛事应接不暇.随之而来便是各类赛事直播,客户对直播服务要求变得越来越高,视频直播技术创新显得格外重要.如何利用直播技术创新降低线 ...

  6. 阿里云视频直播推流和播流地址生成

    记录学习阿里云视频直播 准备环境: 1.已开通阿里云视频直播服务. 2.2个域名:一个用于推流,一个用于播流. 3.在视频直播服务里面找到域名配置,配置好播流和推流域名之间的关系. 4.下载Vlc和o ...

  7. 阿里云视频直播 签名机制

    其实很少写博客,都是放在个人云笔记里面的.但是这个坑,还是救救有些新手. 阿里云视频直播的API调用方式,其实和其他的阿里云服务签名大同小异! https://help.aliyun.com/docu ...

  8. H5直播之阿里云视频直播的实现

    转自https://blog.csdn.net/hanierming/article/details/52769424 由于公司需要开发一款直播软件,以前也并没有接触过直播这一方面,所以就来从0开始做 ...

  9. 阿里云视频直播服务获取签名

    阿里云视频直播服务获取签名,试了一万次,最后还是催工单了,好尴尬 直接上代码 package com.zjy.xzlive.util;import org.apache.commons.codec.b ...

  10. 首批唯一!阿里云视频直播服务获信通院首批唯一认证

    简介:阿里云视频直播服务 7 月 28 日,由中国信息通信研究院主办的 2021 可信云大会上,阿里云凭借在视频直播 "云 - 边 - 端" 的产品技术优势,以最高标准通过了可信云 ...

最新文章

  1. 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、编写自定义函数在三线表中添加p值
  2. vue 动态生成路由菜单(从后端请求到菜单数据,生成左侧菜单栏)
  3. php补充安装扩展支持
  4. java 远程udp_远程客户端不接收UDP数据包
  5. 什么是REST API?
  6. 【尺取或dp】codeforces C. An impassioned circulation of affection
  7. 深入理解计算机系统1——计算机系统漫游
  8. 数据结构知识点大汇总(一)
  9. Struts2的输入验证(三)-短路验证与非字段验证
  10. 做游戏,学编程(C语言) 11 2048
  11. java读取csv文件忽略bom头_PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法...
  12. 【语音合成】基于matlab线性预测系数和预测误差语音合成【含Matlab源码 564期】
  13. 省二级计算机考试VB题库,2015河南省全国计算机等级考试二级笔试试卷VB考试题库...
  14. 利用Audacity软件分析ctf音频隐写
  15. 有道词典翻译功能数字有时无法翻译出来解决方案
  16. 怎么做有内容的二维码?二维码在线制作教程
  17. 微信小程序使用html2wxml渲染HTML或Markdown文本
  18. flutter 轮播组件 Swiper
  19. Centos配置NFS
  20. 【网络】TOE、RDMA、smartNIC 是什么和区别|DPU

热门文章

  1. VMware虚拟机中安装Win10系统
  2. AUTOSAR 基础知识简介
  3. Linux--基础知识点--4.1--vim寄存器
  4. 华为云服务器查看备份文件,云服务器备份查看备份
  5. 安卓自动滑屏脚本_按键精灵自动滑屏脚本
  6. hadoop 查看文件大小以及文件数
  7. 2022年双十二拼多多百亿补贴有活动吗?如何领红包?
  8. 华硕路由桥接模式进入不了界面
  9. Unity3d 给人物模型添加动画
  10. 【正交调制的通信的工程实现!!!】--比通原书讲得好多了,书上大都泛泛而谈!受益匪浅