获取私有m3u8播放地址

最近更新时间:2024-08-12 16:43:01

我的收藏

简介

获取私有m3u8播放地址功能是由 数据万象(Cloud Infinite,CI)提供的,数据万象将处理能力与 COS SDK 完全结合,您可以直接按照本篇文档指引进行使用。 本文档提供关于获取私有m3u8的相关 API 概览以及 SDK 示例代码。
注意:
该功能需要 COS JAVA SDK v5.6.227 及以上版本。旧版本 SDK 该接口可能未覆盖或缺少更新参数,使用时建议升级到 最新版本
API
操作描述
获取私有 M3U8 ts 资源的下载授权

获取私有 m3u8

功能说明

GetPrivateM3U8 接口用于获取私有 M3U8 ts 资源的下载授权。(此方式通过对象存储转发请求至数据万象)。

请求示例

private static String appId = "123456789";
private static String bucket = "demo-123456789";
private static String objectKey = "test.m3u8";
private static String expires = "3600"; //单位为秒,可自行调整token方法
private static byte[] secret = "YourSecret".getBytes();

public static String generateCosDomainPrivateM3U8Url(COSClient client) throws UnsupportedEncodingException {
PrivateM3U8Request request = new PrivateM3U8Request();
request.setBucketName(bucket);
request.setObject(objectKey);
request.setExpires(expires);
request.setTokenType("JwtToken");
String token = generateToken(appId, bucket, objectKey, secret,expires);
request.setToken(token);
return client.generateCosDomainPrivateM3U8Url(request);
}

public static String generateToken(String appId, String bucketId, String objectKey, byte[] secret, String expires) throws UnsupportedEncodingException {
Instant now = Instant.now();
Instant expire = now.plus(Long.parseLong(expires), ChronoUnit.SECONDS);
String encodedObjectKey;
encodedObjectKey = URLEncoder.encode(objectKey, "UTF-8");

Algorithm algorithm = Algorithm.HMAC256(secret);
JWTCreator.Builder builder = JWT.create().withIssuer("client")
.withIssuedAt(Date.from(now))
.withExpiresAt(Date.from(expire))
.withClaim("Type", "CosCiToken")
.withClaim("AppId", appId)
.withClaim("BucketId", bucketId)
.withClaim("Object", encodedObjectKey)
.withClaim("Issuer", "client")
.withClaim("IssuedTimeStamp", now.getEpochSecond())
.withClaim("ExpireTimeStamp", expire.getEpochSecond())
.withClaim("UsageLimit", 20)
.withClaim("ProtectSchema", "rsa1024")
// .withClaim("PublicKey", "xxx")
.withClaim("ProtectContentKey", 0);
return builder.sign(algorithm);
}

参数说明

Request 中的具体数据描述如下:
参数名称
描述
类型
是否必传
bucketName
资源 bucket 信息
String
object
资源在 cos 桶中的相对位置
String
expires
私有 ts 资源 url 下载凭证的相对有效期,单位为秒,范围为[3600,43200]
String
tokenType
使用的 token 类型
String
token
token 内容,demo 中提供的是 JwtToken 类型的生成示例
String

返回结果说明

成功:返回携带签名与参数的 m3u8播放地址。
失败:发生错误(如 Bucket 不存在),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理

SDK 代码完整示例

请参考 GenerateCosDomainPrivateM3U8Url 获取完整示例。