音视频切片(HLS)
简介
音视频切片接口,用于支持HTTP Live Streaming播放。HTTP Live Streaming 是由 Apple 提出的基于 HTTP 的流媒体传输协议。它将一整个音频、视频流切割成可由 HTTP 下载的一个个小的音视频流,并生成一个 M3U8 播放列表,客户端只需要获取资源的 M3U8 播放列表即可播放音视频。以下用 HLS 代指 HTTP Live Streaming。
参数说明
avthumb/m3u8 或 hls
/...
/noDomain/<NoDomain>
/domain/<Domain>
/segtime/<SegSeconds>
/segFirstTime/<SegSeconds>
/hlsKey/<HLSKey>
/hlsKeyType/<HLSKeyType>
/hlsKeyUrl/<HLSKeyUrl>
/hlsIVType/<HLSIVType>
/hlsIV/<HLSIV>
/hlsDurationModify/<HLSDurationModify>
/multiAudio/<MultiAudio>
/segmentType/<SegmentType>
/segmentInit/<SegmentInit>
/savePattern/<savePattern>
参数名称 | 类别 | 必填 | 说明 |
---|---|---|---|
<Format> |
A/V | 是 | 输出音视频切片格式,可设置为 m3u8 或 hls 。 |
... |
A/V | 音频视频切片要使用其他转码参数,请参考 音视频转码(avthumb) | |
/noDomain/<NoDomain> |
A/V | 取值 0 或 1,默认为 0,推荐取值为 1。表示切片索引中的切片列表,是否使用相对地址,设置为 0 则使用绝对地址,设置为 1 则使用相对地址。 | |
/domain/<Domain> |
A/V | 指定ts文件域名、基于base64编码。 注意:不可与 noDomain/1 同时使用。 |
|
/segtime/<SegSeconds> |
A/V | 用于 HLS 自定义每一小段视频流及其包含的音频流的播放时间长度,取值范围为: 2 - 120(秒),默认值为 10秒。 | |
/segFirstTime/<SegSeconds> |
A/V | 用于 HLS 自定义第一段音/视频流的播放时间长度,取值范围为: 1 - 120 (秒) 不设置时,第一段ts长度默认遵循 segtime。 |
|
/hlsKey/<HLSKey> |
A/V | AES128加密视频的秘钥,必须是16个字节。 | |
/hlsKeyType/<HLSKeyType> |
A/V | 密钥传递给我们的方式,0或不填。1.x(1.0, 1.1, …):见下面详细解释。 | |
/hlsKeyUrl/<HLSKeyUrl> |
A/V | 密钥的访问ur | |
/hlsIVType/<HLSIVType> |
A/V | 默认值为 0,使用系统生成的动态 iv 值;值为 1 时,必须使用 hlsIV 指定的固定 iv 值。 | |
/hlsIV/<HLSIV> |
A/V | 指定的固定 iv 值,使用 base64_urlsafe 编码,编码前长度必须为 16 个字节。只有 hlsIVType 为 1 值,才可使用该参数。 | |
/hlsDurationModify/<HLSDurationModify> |
A/V | vcodec 方式为 copy 的情况下,是否修正 m3u8 中记录的切片文件时长;可选值为 0 或者 1,当选择为 1 时,计算真实的切片 duration,而不是根据估计帧率计算出的时长;建议运用在视频帧率不稳定的情况。 | |
/multiAudio/<MultiAudio> |
A/V | 指定支持多音轨,默认为 0,若存在多音轨,则输出只含第一条音轨,置 1 后将保留所有音轨,对于有多条音轨的源视频,本参数会让输出改变。注意,与 segmentType/fmp4 、 domain 、pattern 参数不兼容。 |
|
/segmentType/<SegmentType> |
A/V | 指定分片的格式,支持 mpegts 与 fmp4,默认为 mpegts。 | |
/segmentInit/<SegmentInit> |
A/V | 当分片格式为 fmp4 时,指定初始化文件的名称,也即由 EXT-X-MAP 指定的 URI 名称,需要 base64_urlsafe 编码。注意,使用该参数指定的输出文件的文件名后缀如果不是输出文件的真实格式,可能使某些媒体播放器不兼容。 | |
/savePattern/<savePattern> |
A/V | 为各音视频流ts文件自定义命名。 因为一整段音视频流音视频切片后会生成一个M3U8播放列表和多个音视频流ts文件。 命名支持使用变量: 1. 可以使用 $(变量名) 或${变量名} 形式求值,魔法变量使用说明,参考 文件名变量 。2. 注意: $(count) 为必填项,必须存在的六位占位符数字串。示例: 输出的m3u8文件名为: output.m3u8 ,cmd为:avthumb/m3u8/noDomain/1/savePattern/JChzYXZlYXMua2V5UHJlZml4KSAkKGNvdW50KS50cw== ,其中 JChzYXZlYXMua2V5UHJlZml4KSAkKGNvdW50KS50cw== 是自定义 ts 文件名,$(saveas.keyPrefix) $(count).ts 的URL安全的Base64编码。最后得到类似:output000000.ts,output000001.ts,……,output000006.ts 命名的 ts 文件,跟输出的m3u8文件是关联的。 |
注意:
avthumb
切片的结果会保存在原文件的空间中,包含多个小的 ts 文件和 m3u8 playlist 文件,但是 m3u8 playlist 文件名按照默认规则生成,为了方便获取切片后的 m3u8 资源链接,建议自定义处理结果资源的名称,请参考 处理结果另存 (saveas)。
hls加密
hls加密是利用AES-128位对每个ts文件进行加密,播放器在取得PlayList文件的时候,会根据里面的#EXT-X-KEY
标签请求获得解密的URL,再请求解密密钥,之后会用密钥对获取的ts文件解密。用户可以对密钥的URL做cookie验证等方法来对用户做认证。
例子:PlayList文件 (复制链接,查看文件内容或直接用vlc播放器播放)
参数解释:
hlsKey
: base64_urlsafe编码或加密过后的密钥hlsKeyUrl
: 指定了密钥放置的url,经过base64_urlsafe编码,这是生成m3u8 PlayList会使用到的hlsKeyType
: 指定了传送秘钥的方式- 不指定或者指定为0,则仅仅是以base64_urlsafe编码的方式传送。
- 指定为1.x(1.0, 1.1, …),以RSA的OAEP加密方式,再以<urlsafe_base64_encode>编码传送密钥,x表示密钥的版本
- 公钥:1.0
如何加密RSA
可以编程的方法,或者使用openssl
,下面提供openssl
的版本:
$ echo -n [AES128KEY] | openssl rsautl -encrypt -oaep -inkey [QINIU_PUB_KEY_FILE] -pubin | openssl base64 -A | tr "+/" "-_"
参数解释:
- AES128Key:HLS_AES128加解密密钥(用户定义的加解密密钥)
- QINIU_PUB_KEY_FILE:加密上述AES128Key的RSA算法公钥文件(前文七牛提供的公钥1.0)
示例
-
不使用rsa加密:
avthumb/m3u8/noDomain/1/s/720x480/vb/640k/hlsKey/ZXhhbXBsZWtleTEyMzQ1Ng==/hlsKeyUrl/aHR0cDovL29ndG95d2Q0ZC5ia3QuY2xvdWRkbi5jb20vaGxzMTI4LmtleQ==
-
使用rsa加密:
avthumb/m3u8/noDomain/1/s/720x480/vb/640k/hlsKey/lsLFcVEISp-1iCoKCMRii6EgqAuUJs-f3FupKlFlbYnAjst5tsZ5U5cttUHp6TKIwW3eNMoBjjTgBnFlBoOku_DR0RMmFDgRxADf7vKRaaISSK0-rm3E4PzMiGybIpf9WIGzmQZLNpCcHOG1ThQU_8j3H4qQAX0nd7HxPcPEaPk=/hlsKeyType/1.0/hlsKeyUrl/aHR0cDovL29ndG95d2Q0ZC5ia3QuY2xvdWRkbi5jb20vaGxzMTI4LmtleQ==
操作方式
您可以通过以下几种方式来创建任务:
方式一:使用任务触发器
-
对符合规则策略的上传文件自动触发
:在具体空间下,选择任务与工作流,进入任务触发器页面,点击新建 任务触发器;创建完成后,需要开启 上传触发开关,然后通过左侧文件管理或 API/SDK 上传文件到触发器指定的输入路径;将对符合规则策略的上传文件自动触发多媒体处理,并将结果文件保存到目标路径。
方式二:使用对象存储控制台
-
上传文件手动触发
:在具体空间下, 上传文件 时,指定工作流模板 。 -
指定文件手动触发
:有两种指定单个文件创建任务的入口-
第一个入口:在具体空间下,在文件列表中指定文件,在操作栏【更多】中点击【创建多媒体任务】。
注意:仅对音视频/gif动图/webp动图文件提供该操作。
-
第二个入口:在具体空间下,选择任务与工作流,进入任务管理页面,点击【新建任务】。
-
方式三:使用API
资源上传时手动触发
:可以在构造上传凭证时在上传策略中,设置相关字段,在资源文件上传时触发处理。对已有资源手动触发
:可以在调用 持久化数据处理(pfop) 时,设置相关字段,对已存在空间中的资源文件发起处理。
方式四:使用SDK
- 查看各语言 SDK 使用指南中
持久化数据处理
章节,可在七牛官方SDK 进行下载。
操作示例
-
以 资源上传时手动触发 形式,将 mp4 视频按 vb/240k 预设规格切片(15秒一片):
{ "scope": "qiniu-ts-demo:sample.mp4", "deadline": 1390528576, "persistentOps": "avthumb/m3u8/noDomain/1/segtime/15/vb/240k", "persistentNotifyUrl": "http://fake.com/qiniu/notify" }
-
以 对已有资源手动手动触发 形式,将 mp4 视频切片,静态码率为 320K,帧率为 24fps:
POST /pfop/ HTTP/1.1 Host: api.qiniu.com Content-Type: application/x-www-form-urlencoded Authorization: Qiniu <AccessToken> bucket=qiniu-ts-demo&key=sample.mp4&workflowTemplateID=transcode¬ifyURL=http%3A%2F%2Ffake.com%2Fqiniu%2Fnotify
注意:要在 Authorization 头部的<AccessToken>
前添加 Qiniu
和半角空格。
计费说明
音视频切片价格同 音视频转码(avthumb)。