上一篇我们讲了通过七牛云的私有资源防止付费视频被盗链,今天我们学习一下七牛云的视频切片,并通过AES128进行加密。

视频切片

七牛云提供音视频切片接口以支持HLS(HTTP Live Streaming)播放。HTTP Live Streaming 是由 Apple 提出的基于 HTTP 的流媒体传输协议。它将一整个音频、视频流切割成可由 HTTP 下载的一个个小的音视频流,并生成一个 M3U8 播放列表,客户端只需要获取资源的 M3U8 播放列表即可播放音视频。

如下这是一个M3U8文件,可以看出里面包含了很多个小的视频文件

------------------华丽的分割线------------------

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-ALLOW-CACHE:YES

#EXT-X-TARGETDURATION:14

#EXT-X-KEY:METHOD=AES-128,URI="http://youdomain.com/get-key",IV=0x741f9b7345e36a6ea65f06f4fde35514

#EXTINF:13.680000,

/_XlEtgxmTLlscDTBmPgUbUcxzvA=/lgAqgKcNHyUXskDdH1iOqhet-hP_/000000.ts

#EXT-X-KEY:METHOD=AES-128,URI="http://youdomain.com/get-key",IV=0x09bd63ae40e8e948e7bf0db8880a2203

#EXTINF:10.000000,

/_XlEtgxmTLlscDTBmPgUbUcxzvA=/lgAqgKcNHyUXskDdH1iOqhet-hP_/000001.ts

#EXT-X-KEY:METHOD=AES-128,URI="http://youdomain.com/qiniu/get-key",IV=0x7522ef106dc5fb6d3220b2c2d7712451

#EXTINF:10.000000,

/_XlEtgxmTLlscDTBmPgUbUcxzvA=/lgAqgKcNHyUXskDdH1iOqhet-hP_/000002.ts

#EXT-X-KEY:METHOD=AES-128,URI="http://youdomain.com/get-key",IV=0xacb26644d440caac271c9386b0dd3026

------------------华丽的分割线------------------

我们只需要将m3u8文件传递给浏览器即可,它会自动拉取其中的视频列表。

七牛云视频切片接口规格avthumb/m3u8/noDomain/

/domain/

/segtime/

/ab/

/aq/

/ar/

/r/

/vb/

/vcodec/

/acodec/

/scodec/

/subtitle/

/ss/

/t/

/s/

/stripmeta/

/rotate/

/hlsKey/

/hlsKeyType/

/hlsKeyUrl/

/pattern/参数名称类别必填说明/noDomain/A/V是取值 0 或 1,默认为 0,推荐取值为 1。表示切片索引中的切片列表,是否使用相对地址,设置为 0 则使用绝对地址,设置为 1 则使用相对地址。

/domain/A/V用户指定切片中ts文件的域名。

注意:域名需要urlbase64编码,且不能带http;该参数不能和noDomain/1共同使用。

/segtime/A/V用于自定义每一小段音/视频流的播放时长,单位为秒,取值范围为5-120秒,默认值为10秒。

/ab/A静态码率 (CBR),单位为比特每秒 (bit/s),常用的码率有:64k,128k,192k,256k,320k等。

/aq/A动态码率 (VBR),取值范围为0-9,值越小码率越高。不能与静态码率参数共用。

/ar/A音频采样频率,单位为赫兹 (Hz),常用的采样频率有:8000,12050,22050,44100等。

/r/V视频帧率,每秒显示的帧数,单位为赫兹 (Hz),常用的帧率有:24,25,30等,一般用默认值。

/vb/V视频比特率,单位为比特每秒 (bit/s),常用的视频比特率有:128k,1.25m,5m等。

/vcodec/V视频编码方案,支持的方案有:libx264,libvpx,libtheora,libxvid等,默认为libx264。

/acodec/A音频编码方案,支持的方案有:libmp3lame,libfaac,libvorbis等。

/scodec/V字幕编码方案,支持的方案有:mov_text。该参数仅用于修改带字幕视频的字幕编码。

/subtitle/V添加字幕,支持:srt格式字幕 (uft-8编码和和utf-8 BOM编码),带有字幕的mkv文件,embed (将原视频的字幕流嵌入目标视频)。基于base64编码。

/ss/V指定视频截取的开始时间,单位为秒,支持精确到毫秒,例如3.345s。用于视频截取,从一段视频中截取一段视频。

/t/V指定视频截取的长度,单位为秒,支持精确到毫秒,例如1.500s。用于视频截取,从一段视频中截取一段视频。

/s/V指定视频分辨率,格式为:x,或者预定义值。

/stripmeta/A/V是否清除文件的metadata,1为清除,0为保留。

/rotate/V指定顺时针旋转的度数,取值可为:90,180,270,auto,默认为不旋转。

/hlsKey/A/VAES128加密视频的秘钥,必须是16个字节。

/hlsKeyType/A/V密钥传递给我们的方式,0或不填。1.x(1.0, 1.1, ...):见下面详细解释。

/hlsKeyUrl/A/V密钥的访问url

/pattern/A/V为各音视频流ts文件自定义命名。

因为一整段音视频流音视频切片后会生成一个M3U8播放列表和多个默认命名的音视频流ts文件。示例:avthumb/m3u8/noDomain/1/pattern/eGlhb3hpYW8kKGNvdW50KQ==,其中eGlhb3hpYW8kKGNvdW50KQ==是自定义ts文件名,如:qiniu$(count)的URL安全的Base64编码,其中$(count)是必须存在的六位占位符数字串,qiniu可以自己定义。最后得到类似:qiniu000000,qiniu000001,……,qiniu000006命名的ts文件。

示例以预转持久化形式,将 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"

}

主要还是通过配置persistentOps来实现上传后自动进行切片,也可以在上传后调用视频切片接口,后面有范例代码。

hls加密

hls加密是利用AES-128位对每个ts文件进行加密,播放器在取得PlayList文件的时候,会根据里面的#EXT-X-KEY标签请求获得解密的URL,再请求解密密钥,之后会用密钥对获取的ts文件解密。用户可以对密钥的URL做cookie验证等方法来对用户做认证。 例子:PlayList文件 (复制链接,查看文件内容或直接用vlc播放器播放)

参数解释:hlsKey: base64_urlsafe编码或加密过后的密钥

hlsKeyUrl: 指定了密钥放置的url,经过base64_urlsafe编码,这是生成m3u8 PlayList会使用到的,浏览器会向这个地址索取加密的密钥,如果返回的密钥不正确,视频是没法正常播放的,我们可以在这个url接口中,加入我们的业务逻辑,比如如果访问者未登录,则不返回密钥,或者非会员访问不返回密钥等等,以实现我们对视频文件的控制

hlsKeyType: 指定了传送秘钥的方式不指定或者指定为0,则仅仅是以base64_urlsafe编码的方式传送。

指定为1.x(1.0, 1.1, ...),以RSA的OAEP加密方式,再以编码传送密钥,x表示密钥的版本

公钥:1.0

程序实现

音视频切片PHP后台代码

我们使用了七牛的PHP SDK,其中hlsKey后面的数据为加密密钥,16字节,并使用安全的base64编码,hlsKeyUrl后面为返回密钥的接口,浏览器播放m3u8的时候,会向该接口请求密钥。$accessKey =qn_accesskey;

$secretKey = qn_secretkey;

$auth = new Auth($accessKey, $secretKey);

//要转码的文件所在的空间和文件名。

$bucket = qn_bucket;

$key = '3WPart1003.mp4';

//转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline

$pipeline = '';//为空代表使用七牛公用队列

//转码完成后通知到你的业务服务器。

$notifyUrl = '';

$pfop = new PersistentFop($auth, $bucket, $pipeline, $notifyUrl);

//要进行转码的转码操作。 http://developer.qiniu.com/docs/v6/api/reference/fop/av/avthumb.html

$fops = "avthumb/m3u8/noDomain/1/segtime/10/hlsKey/".\Qiniu\base64_urlSafeEncode("abcdefgh12345678")."/hlsKeyType/0/hlsKeyUrl/".\Qiniu\base64_urlSafeEncode("http://youdomain.com/get-key");

list($id, $err) = $pfop->execute($key, $fops);

echo "\n====> pfop avthumb result: \n";

if ($err != null) {

var_dump($err);

} else {

echo "PersistentFop Id: $id\n";

}

//查询转码的进度和状态

list($ret, $err) = $pfop->status($id);

echo "\n====> pfop avthumb status: \n";

if ($err != null) {

var_dump($err);

} else {

var_dump($ret);

}

返回密钥代码

即上面的接口http://youdomain.com/get-key

我这里只添加了一个逻辑,即如果用户登录了,我就返回密码,不登录我就什么也不返回if(!Yii::$app->user->isGuest){

echo "abcdefgh12345678";

}

前端视频播放代码,使用h5的video,不过在PC中,只有safari才能播放这种m3u8格式的视频,后面我们也会继续探讨,m3u8的播放问题。

七牛切片视频php,七牛云6:付费视频防盗链-视频切片并通过AES128加密视频相关推荐

  1. tp框架文件上传七牛服务器,TP5开发 - 七牛云图片上传方法

    1.config.php配置文件里配置七牛云密钥等 里面 secretKey accessKey domain bucket对应换成自己七牛云申请的, 步骤: (1)七牛云注册成功后-对象存储申请10 ...

  2. 七牛上传图片html,使用七牛云上传图片

    七牛云提供的空间还是很不错的.最近闲来无事,看了下七牛的相关东西,现把图片上传的部分记录一下 使用七牛云需要自己注册账号,这个就不再赘述,很简单的 申请好空间之后,上传需要一个上传凭证,七牛真的很体贴 ...

  3. php下载七牛整个文件夹,七牛云存储文件批量下载工具 - 行客工作室

    2.我把下载的文件解压,放在我电脑的D磁盘的aaa文件夹下面.如下图所示. 00 对打开配置文件 runker.conf,然后编辑这个配置文件,如下图所示. 00 配置文件说明 00 我修改的例子,把 ...

  4. 七牛上传图片html,MWEB+七牛 上传图片

    MWEB+七牛 上传图片 博客之前的图片也都用的七牛,但编辑和上传分离还是很麻烦,所以一直很心水meb, 上周mweb降到50¥,感觉短期内应该不会再降了,于是果断入手,今天在和使用图床功能遇到了一些 ...

  5. php七牛持久化处理,使用七牛自定义数据处理范例

    1.下载自定义处理数据命令行工具: 下载地址:https://developer.qiniu.com/dora/tools/1222/qdoractl 下载linux64位版,因为我们的docker安 ...

  6. 七牛php连麦,七牛IOS连麦,主播端无法采集声音

    ios和android都按照文档和DEMO接入了对应的七牛连麦SDK. 推流/播放皆正常,android端主播与android/ios副主播连麦正常,一旦ios是主播,与其他副主播连麦以后,主播端声音 ...

  7. 防盗链python_python一行代码,实现网页视频下载

    python之You-Get库学习 简介 You-Get库是一个基于Python3的视频下载工具,支持多数国内外主流视频站点的视频下载.看一下项目主页的README.md,真的是十分的nice啊,基本 ...

  8. 七牛云存储基于时间戳防盗链算法参考实现

    基于时间戳防盗链的功能其实每家的CDN都是支持的.主要是通过使用约定的加密字符串来对具有访问有效期的资源链接进行一些加密计算的到一个sign值,然后访问外链里面带上这个sign和截止时间戳去访问CDN ...

  9. 七牛切片视频php,音视频切片(HLS)

    音视频切片接口用于支持HTTP Live Streaming播放.HTTP Live Streaming 是由 Apple 提出的基于 HTTP 的流媒体传输协议.它将一整个音频.视频流切割成可由 H ...

最新文章

  1. 收藏起来,史上最全的 MySQL 高性能优化实战总结!
  2. redis保存dataset
  3. Python 小白从零开始 PyQt5 项目实战(7)折叠侧边栏的实现
  4. autofac文档:事件
  5. mysql 5.0创建函数_MySQL5.0中的Function和Procedure
  6. 网络摄像头ip php,C#实现IP摄像头的方法
  7. Spring缓存切面源码解析
  8. IDEA------自动导包快捷键
  9. 前置加加与后置加加的区别
  10. 系统论重要模型_笔记
  11. 子母钟运用在什么领域,设备如何调试,天穹告诉你子母钟系统授时的意义
  12. 【零基础】MT4量化入门三:写一个双均线指标
  13. 海外观看2022卡塔尔世界杯中文直播攻略大全
  14. android极光推送问题,Android 极光推送问题
  15. javascript从入门到跑路-----小文的js学习笔记(11)--------字符串以及字符串的常见方法!
  16. 英雄联盟——心得体会
  17. WebStorm下载、安装、配置/2022最新版
  18. 如何查看ios sdk版本
  19. 谷歌google自动打开开发调式工具问题DevTools
  20. 【MySQL】黑马教程MySQL数据库 MySQL基础(一)

热门文章

  1. coreldraw x4怎么会蓝屏_win10蓝屏终止代码badpoolheader的最佳解决方法
  2. h5互动游戏营销如何做 ?
  3. 分享两种主流的win10系统重装方法,手把手教你重装win10系统
  4. EXCEL日期格式要双击一下单元格才变正确格式
  5. 头歌 第7章 函数2(课后习题8~12)第1关:习题8 椰子数
  6. python制作简单软件_用Python制作简单的钢琴程序的教程
  7. 壮志凌云电影(壮志凌云2)
  8. 18523-47-2,3-Azidopropionic Acid,叠氮基丙酸,可以与炔烃发生点击化学反应
  9. Delphi 环境下使用DirectDraw实现简单的绘制
  10. 360杀毒4.0版Office宏病毒免疫体验