Java 实现阿里云直播
阿里云播放器直接在线点播视频以及直播技术,此处记录直播实现过程
更多精彩
- 更多技术博客,请移步 IT人才终生实训与职业进阶平台
官网
阿里云直播-快速入门
准备步骤
- 创建 阿里云账号
- 根据 流程 完成实名认证,以确保可以使用阿里云相应服务
- 在密钥管理页面获取阿里云访问密钥,AccessKeyId 和 AccessKeySecret
- 开通阿里云直播服务
关键点
- 阿里云直播服务端提供了 一系列 API ,但如果只是单纯的直播[推流和拉流] ,实际不需要使用这些 API
推流准备
- 推流即直播人员进行视频播放的操作,这需要使用推流客户端 第三方推流工具 OBS
- 在推流工具中需要指定推流地址、流名称、鉴权密钥
- 如果上述信息阿里云验证合法,既可以开始直播,在阿里云后端可以看到正在直播的流信息
拉流准备
- 拉流即直播观众通过视频播放器在线获取直播信息,播放器使用 阿里云播放器 即可,该播放器目前只是阿里云的点播和直播服务
- 获取拉流地址后传入播放器,即可开始观看直播
Java 开发注意点
- 在阿里云直播的文档中有提供 Java SDK
- 目前 SDK 中推荐引入的版本号是 2.3.0 ,但其实所有 API 参照的都是最新版 SDK ,最新的版本号可在 阿里云SDK频道 找到
- 但如果只是单纯的直播[推流和拉流] ,则不需要进行以上操作
- 推流的关键点在于 直播鉴权
- 此处介绍的直播鉴权只是说的 auth_key 的拼接和验证规则
- 完整的推流和拉流地址并不知这些,需要依旧案例参考
获取推流地址
- 此处获取的只是推流地址的房间号及其他请求参数
- 完整的推流地址需要加上阿里云直播中心地址和用户的产品名称
- 直播中心地址
http://video-center.alivecdn.com
- 产品名称[支持自定义]
/appName/
- 直播中心地址
vhost
用于接收拉流地址,即申请阿里云直播时准备的直播域名- 此处使用 Java MD5加密 实现字串加密,加密后长度需要是 32 位
- 加密串中的
Constants.ALI_LIVE_PRIVATE_KEY
可在阿里云后端的直播鉴权处获取
// 获取推流地址
public String getPushUri(String roomName, Long endTime) {return getRoomName(roomName) + "vhost=" + Constants.ALI_LIVE_PULL_URL + "&" + generateAuthKey(roomName, endTime);
}// 房间号
private String getRoomName(String roomName) {return roomName + "?";
}// 完整验签串
private String generateAuthKey(String roomName, Long endTime) {return "auth_key=" + endTime + generateUuid() + generateEncryptStr(roomName, endTime);
}// 唯一标识
private String generateUuid() {String uuid = "0";String uid = "0";return "-" + uuid + "-" + uid + "-";
}// 验签密钥
private String generateEncryptStr(String roomName, Long endTime) {String uri = Constants.ALI_LIVE_APP_NAME + roomName;return md5(uri + "-" + endTime + generateUuid() + Constants.ALI_LIVE_PRIVATE_KEY);
}
获取拉流地址
- 此处获取的拉流地址是完整的,因为拉流地址是直接获取后传入前端的阿里云播放器中
- 注意房间名后面加的后缀
.m3u8
用于表示接受的直播视频类型,阿里云官方还提供其他几种类型,可在文档中查看 - 拉流地址和推流地址最大的区别在于请求地址的不同,拉流是请求自己提供给阿里云的直播域名,而拉流是请求阿里云的直播中心
- 而且推流时需要指定
vhost
告知阿里云直播域名,但拉流时不需要 - 获取到拉流地址后可直接参照 Java + jQuery 实现阿里云播放器接口 实现播放器的对接
- 在播放器的的配置中指明
isLive: true
表名是直播操作 - 上述笔记中实现的是点播接口,利用的通过
vid
获取playAuth
的方式,这不适用于直播 - 直播需要直接指定
source: url
即可
- 在播放器的的配置中指明
public String getPullUrl(String roomName, Long endTime) {roomName += ".m3u8";return "http://" + Constants.ALI_LIVE_PULL_URL + generateUri(roomName) + generateAuthKey(roomName, endTime);
}// 获取请求参数
private String generateUri(String roomName) {return Constants.ALI_LIVE_APP_NAME + getRoomName(roomName);
}// 房间号
private String getRoomName(String roomName) {return roomName + "?";
}// 完整验签串
private String generateAuthKey(String roomName, Long endTime) {return "auth_key=" + endTime + generateUuid() + generateEncryptStr(roomName, endTime);
}// 唯一标识
private String generateUuid() {String uuid = "0";String uid = "0";return "-" + uuid + "-" + uid + "-";
}// 验签密钥
private String generateEncryptStr(String roomName, Long endTime) {String uri = Constants.ALI_LIVE_APP_NAME + roomName;return md5(uri + "-" + endTime + generateUuid() + Constants.ALI_LIVE_PRIVATE_KEY);
}
Java 实现阿里云直播相关推荐
- JAVA生成阿里云直播推流和拉流
import cn.hutool.crypto.digest.DigestUtil; import org.apache.commons.lang.StringUtils;import java.ut ...
- java阿里云直播推流拉流工具类
package com.core.common.utils;import com.alibaba.fastjson.JSONObject;import java.util.HashMap; impor ...
- 超级详细!java实现阿里云视频直播功能
java实现阿里云视频直播 准备工作 [官方地址](https://help.aliyun.com/document_detail/198676.html?spm=a2c4g.446769.0.0.1 ...
- java 阿里云直播配置及推拉流地址获取
一.开通阿里云直播 首先进入阿里云直播产品主页:https://www.aliyun.com/product/live . 点击下方的"立即开通". 如果是还未注册的用户请按照页面 ...
- 阿里云直播、直播录制和点播
近来公司有个直播类的项目,让我调研下阿里云直播,花了3.4天调研结束后,做下笔记,一方面自己日后便于查看,另一方面与大家做个交流,有说的不正确的.欢迎指正. 需求说明:本项目有三个媒体端,分别是app ...
- 猫晚流量再创记录,阿里云直播方案护航优酷2500万用户体验
对"剁手党而言,天猫双11早已经超越了简单的"买买买",更是一场边看边玩的狂欢盛宴.今年的天猫双11狂欢夜晚会(简称"猫晚")在上海举办,这台兼具年轻 ...
- 阿里云直播PHP SDK如何使用
前一篇聊了聊关于阿里云直播,如何进行进行调试,ok,那这篇我们就聊一聊关于阿里云直播的SDK(当然是关于PHP的),基于下面的原因: 1.直播云没有单独的SDK,直播部分的SDK是直接封装在CDN的相 ...
- 首帧秒开+智能鉴黄+直播答题,阿里云直播系统背后技术大起底
摘要: 想要快速实现直播能力,并对原有业务不产生任何影响,依托如阿里云一样的直播平台,来搭建移动直播系统,将技术难题交给阿里云,把更多的精力放在核心业务的本身,是最为稳妥和高效的选择.本文介绍阿里云直 ...
- iOS直播集成和问题总结(阿里云直播)
https://www.jianshu.com/p/714ce954e628 最近接手公司的直播项目,对以前遗留的问题做处理和优化, 于是顺便看了下阿里云直播的文档,在下面写下对直播的理解和遇到的问题 ...
最新文章
- 2.2元组介绍+字符串操作
- proteus仿真micropython_[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
- 如何在 SAP Hybris WCMS cockpit 里创建新的 website
- jsp调用controller方法_RPC调用_服务注册与发现
- Linux网络编程--聊天室客户端程序
- 一加7发布之后 雷军微博沦陷:米粉直呼心累
- php跳转post,php如何使用post跳转页面
- C语言实现高尔顿钉板实验(模拟正态分布)
- OSPF的Router-LSA和Network-LSA
- 深度学习平台配置 Pytorch+RTX3090+Pycharm
- Untiy InputSystem(一) 新旧API对比
- 惠普linux系统改装win7,惠普EliteDesk800 G3台式机预装win10改win7教程
- 如何根据快递单号物流信息自动识别快递状态
- Android 电池管理
- 要习惯同时兼顾几个学习项目
- C语言逻辑左移指令shl怎么用,汇编语言SHL(左移)指令:将操作数逻辑左移一位...
- 中公教育培训python
- 《大数据技术从零开始》自学知识库(2022年整理)
- LeetCode | Path Sum II
- 【考研数学】八.曲面积分
热门文章
- [serviceMesh]陌陌实践
- 鸿蒙内核为linux,现在linux改叫内核(非OS),安卓/iOS/鸿蒙才能被称为“操作系统 - 水木快照 JinghuaSoft...
- Java学习笔记———选择结构
- Android Q 分区储存: 最佳实践和几项更新
- iframe中的onload事件深藏功与名
- 简单的爬虫入门--爬取百度股票信息--来自mooc嵩老师视频
- 开机读不了bios,提示为 press del to enter setup, esc to enter boot menu?
- Rust 中级教程 第5课——trait(3)
- seat TCC 实战(图解_秒懂_史上最全)
- 【三维人脸识别】matlab读取.wrl三维图像文件