七牛云直播java服务端,新人鉴权访问问题教程
七牛云直播java服务端接入
七牛云直播服务开通准备工作
七牛云申请直播服务操作参考官方文档:
参考地址:
链接: 七牛云官方参考文档.
七牛云java—sdk官方参考案例
参考GitHub地址:
链接: 七牛云官方java参考案例.
运行环境
- Jdk 1.8
- Gradle-6.4.1
操作第一步
- 我是用的SpringBoot + Gradle 框架进行操作的,框架根据自己使用的就行
- URL
RTMP推流地址: client.RTMPPublishURL(domain, hub, streamKey, expireAfterDays)
RTMP直播地址: RTMPPlayURL(domain, hub, streamKey)
HLS直播地址: HLSPlayURL(domain, hub, streamKey)
HDL直播地址: HDLPlayURL(domain, hub, streamKey)
直播封面地址: SnapshotPlayURL(domain, hub, streamKey)
Hub
创建流: hub.create(streamKey)
查询流: hub.get(streamKey)
列出流: hub.list(prefix, limit, marker)
列出正在直播的流: hub.listLive(prefix, limit, marker)
批量查询直播实时信息: hub.batchLiveStatus(streamTitles)
Stream
流信息: stream.info()
禁用流: stream.disable() / stream.disable(disabledTill)
解禁流: stream.enable()
查询直播状态: stream.liveStatus()
保存直播回放: stream.save(key, start, end) / stream.save(saveOptions)
保存直播截图: stream.snapshot(snapshotOptions) zzz
更改流的实时转码规格: stream.updateConverts(profiles)
查询直播历史: stream.historyRecord(start, end) - 我引入的jar包,仅供参考
// 引入jar包,多余的可以删除
compile 'com.qiniu:qiniu-java-sdk:7.2.+'
compile 'commons-codec:commons-codec:1.10'
compile 'org.springframework.boot:spring-boot-starter-web'
compile group:'com.squareup.okhttp3', name:'okhttp', version:'3.2.0'
compile group:'com.google.code.gson', name:'gson', version:'2.6.2'
testCompile 'org.springframework.boot:spring-boot-starter-test'
testImplementation group: 'junit', name: 'junit', version: '4.12'
操作第二步
引入官方提供的工具,多余的可自行删除,主要用Client.java中的方法,主要是官方的工具里没有封装鉴权方法,这边需要自己改造一下
鉴权参考地址:七牛云官方参考鉴权文档.
主要是这里面的KEY,在官方文档没有说清楚,造成鉴权失败,这边跟七牛云技术支持让他们帮忙看,也说不清个所以然,只会让参考这个文档,那个文档,所以发帖说明这个KEY是从哪里来的
在七牛云中时间戳防盗链会有很多地方都会进行设置,cdn加速那块也有时间戳防盗链,开始问七牛云的技术支持问他是不是哪里的key,回复我是的,结果不是那里的,害的浪费时间去处理鉴权;
这个key会有三个地方进行获取,在直播空间中域名管理里面获取,这里会配置三个域名作为播放,RTMP、HLS、HDL,还有一个RTMP推流域名
这里点击操作里的管理
这里设置主密钥跟副密钥,也就是在鉴权时用的key,官方文档没有说明,被坑三天
配置完KEY,就是改造代码
- 找到Client.java
这边找个方法举例
官方封装的方法是这样的
/*
HLSPlayURL generates HLS play URL
*/
public String HLSPlayURL(String domain, String hub, String streamKey) {
return String.format("http://%s/%s/%s.m3u8", domain, hub, streamKey);
}
我改造的代码,可能不够简洁,这样返回的就是鉴权后的播放地址
/*
HLSPlayURL generates HLS play URL
设置的过期时间戳:expireAfterSeconds
这个就是空间域名里的时间戳防盗链里设置里配置的key: hlsKey
*/
public String HLSPlayURL(String domain, String hub, String streamKey, int expireAfterSeconds, String hlsKey) {
long expire = System.currentTimeMillis() / 1000 + expireAfterSeconds;
String path = "/"+hub+"/"+streamKey+".m3u8";
String expireHex = Long.toHexString(expire);
String toSignStr = String.format("%s%s%s", hlsKey, path, expireHex);
String signedStr = md5ToLower(toSignStr);
return String.format("http://%s/%s/%s.m3u8?sign=%s&t=%s", domain, hub, streamKey,signedStr,expireHex);
}
如有侵权请联系删除
邮箱:18827526631@163.com