付费视频被人薅走?了解一下hls视频加密

news2024/12/29 9:43:26

前言

作者现在主要负责的项目是通过音视频等课程提高教师职业能力的,说白了就是给老师卖课赚钱。大家都知道知识付费现在还是很火的,既然是要付费的知识,就肯定有人想白嫖,直接去下载课程里面音视频。业界就有很多工具,比如说IDM、NeatDM、迅雷等等(再多说就是在教大家犯罪了哈哈,大家千万不要点开),产品经理就说要做音视频加密。

技术选型

因为项目主要是移动端H5,因为兼容性问题很多防盗方案都不好做。因为直接使用原生播放视频不能够控制视频源的请求,只能由浏览器自己去拉流,没啥操作的余地。想要解决这个问题,就要用到 MSE(Media Source Extensions),基于 XHR 请求动态构造音视频源,大家可以简单了解一下先不用太深入。

但是呢,MSE 这玩意又有很多兼容性问题,比如说在 IOS Safari浏览器上不支持:

但是柳暗花明又一村,IOS 原生支持一种叫 HLS 的视频协议,他是可以做媒体加密的。一起看下他的兼容性:

虽然说红了一片,但是它和 MSE 的兼容性互补呀,其他浏览器可以基于 MSE 实现 HLS 视频播放,IOS浏览器直接用原生的,那不就行了。

业界有很多库可以实现 HLS 音视频的播放,比如说hls.js、video.js、xgplayer、chimee等等。我选用的是hls.js,原因很简单,就是轻量。其它的库会有其定制的UI和内置插件,不够纯粹。

HLS协议介绍

HLS 全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于HTTP的自适应码率流媒体传输协议,包括m3u(8)的索引文件,TS媒体分片文件和key加密串文件,可用于实时媒体流的传输。

好,看下面这个图

可以看到由三个部分组成,分别是Master Playlist、Media Playlist、Media Segments,似乎长得都差不多,展开讲讲是什么。

先说说 Master Playlist 和 Media Playlist

这两分别叫一级索引文件二级索引文件,在上图中可以看到后缀都是.m3u8,一级索引文件可以存放多个索引文件的链接。在播放器“播放”的其实是二级索引文件, `<video>`标签的`src`属性定义为二级索引文件的URI就能播放,如下图:

<video src="${二级索引文件链接}">

既然播放的是二级索引文件,那一级索引文件有什么用呢?为什么需要存放了多个二级索引文件?

一级索引文件内部的多个二级索引文件的码率是不同的,码率越高清晰度一般越高。当`<video>`标签的`src`属性定义为一级索引文件的URI,播放器会根据当前的带宽网速,自动选择合适清晰度的二级索引文件来播放,这就是hls的功能——码率自适应。这块会在我的其他文章中重点讲解。

二级索引文件包含多个Meida Segments。Meida Segments 是媒体片段,含有音视频内容,播放器真正播放的其实是这一部分。媒体片段经过解封装、解码、音视频同步,画面最后在浏览器渲染。

好啦,基本的理论已经有所了解,一起来看看实际案例。

边学边做

hls.js 提供了一个demo站点,让大家快速了解hls协议。

帅哥美女们,可以打开 hls.js demo 点击 Apply 播放视频。

然后用chrome的devtool抓包

上图的就是一级索引文件,他的内容其实就是不同码率的m3u8。

上图可以看到,选择了其中一个二级索引文件播放,随后实时判断网速,又选择了图中另一个二级索引文件播放。

上图的右边部分可以看到一堆的ts后缀的文件,这些就是上面提到的媒体片段

视频解密

回到一开始的界面,选择“AES-128 encrypted, ABR”,他表示使用的是AES-128 的加密算法。

播放视频后,同样进行抓包,可以看到二级索引文件中会有“#EXT-X-KEY”这个标签,里面就有获取密钥的URI。在浏览器请求到密钥之后,在解析每一个ts媒体片段前进行解密。

这里有同学会想,密钥都是可以直接获取的,怎么样防盗?

这里的防盗并不是绝对的防盗,只是提高门槛,而且这个门槛可以设得高一点也可以低一点。

啥意思了?

实际应用中,我们会在密钥URI中加一个令牌,像是这样:

#EXT-X-KEY:METHOD=AES-128,URI="oceans.key?token=${令牌}"

这个令牌会有时效性,可以是一次性的或者时效性(一段时间后失效)。如果是一次性的,就可以防住大多数的视频下载软件,因为这些软件都是基于已有资源链接,再次请求实现视频下载的。按照这个原理,时效性的令牌是不能防住这些软件的,但是可以让m3u8索引文件的链接具有时效性,假如用户直接把这个链接分享出去给其他没有权限的人看,一段时间后就会失效了。

最后只需要根据用户权限,后台给前端返回m3u8索引文件时加上令牌,就可以实现视频的防盗。

下面这张图简单讲解了整体的解密流程

好!文章到这里就结束了,祝各位跑得比别人快,飞得比别人高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

世界杯观赛调研公布: Z世代消费者首选海信电视

2022世界杯决赛在即&#xff0c;作为观赛主体的Z世代迎来了四年一度的足球狂欢季。12月12日&#xff0c;市场研究机构千趣GKURC&#xff08;关键用户调查研究中心&#xff09;发布了《Z世代2022世界杯观赛和消费行为特征》调查报告&#xff08;以下简称报告&#xff09;。 报告…

图解设计模式:Teamplate Method 模板方法模式 由子类实现具体内容的模式

前言 &#x1f4e3; &#x1f4e3; &#x1f4e3; &#x1f4e2;&#x1f4e2;&#x1f4e2; ☀️☀️点开就是缘分认识一下&#xff0c;我是小冷。是一个兴趣驱动自学练习两年半的的Java工程师。 &#x1f4d2; 一位十分喜欢将知识分享出来的Java博主⭐️⭐️⭐️&#xff0c;…

ChatGPT的博弈:一场猫捉老鼠的游戏画上句号

前言 上周日我在B站发了个视频(https://www.bilibili.com/video/BV1Ud4y1e7BP)&#xff0c;本来想水一期的(毕竟一个半月没更新了)&#xff0c;不过借着ChatGPT的热度&#xff0c;播放量突破2w。 随之而来的是大批网友涌入群聊&#xff0c;想测验一下ChatGPT的性能&#xff0…

手把手教你在Ubuntu定制文件系统

为了给客户的测试和开发提供便利&#xff0c;飞凌嵌入式的开发板产品一般都支持多种操作系统&#xff0c;以基于全志T507H处理器设计研发的OKT507-C开发板为例&#xff0c;它支持三种操作系统&#xff0c;分别是&#xff1a;Linux、Android 和 Forlinx Desktop&#xff08;Ubun…

招聘惊现997工作要求!HR:因为下班比较晚,所以公司一般不加班

对于程序员来说&#xff0c;加班就像阳光和空气&#xff0c;实在是太正常不过的事情了。 就算本身并不是需要加班的公司&#xff0c;在项目上线的前夕多多少少肯定还是需要加一些班的&#xff01; 但是&#xff0c;下面这家公司就不一样了&#xff0c;直言公司就是997工作制……

Centos 配置磁盘加密(crypt-disk)

文章目录 Crypt-disk 创建一块新的磁盘,启用磁盘加密,解锁密码为“CSK2022!”; 映射到/dev/mapper/crypt 分区,并挂载到/mut/crypt 目录。一、去虚拟机添加一块磁盘二、安装cryptsetup2.对/dev/sdb 进行加密操作3.映射加密磁盘4.格式化5.挂载到到/mut/crypt 目录。题目 Cry…

Pytest测试框架(二):fixture 方法等相关操作--自定义测试用例的前置后置条件

pytest中的fixture&#xff1a; fixture是pytest特有的功能&#xff0c;它用pytest.fixture标识&#xff0c;定义在函数前面。fixture有明确的名字&#xff0c;在其他函数&#xff0c;模块&#xff0c;类或整个工程调用它时会被激活。fixture是基于模块来执行的&#xff0c;每个…

如何用C#制作 微信个人机器人

打包下载..https://github.com/wechaty/dotnet-wechaty在windows上安装docker&#xff0c;由于可能不是专业版windows10&#xff0c;可能会遇到一系列问题&#xff0c;百度能解决。可以参考 win10安装docker&#xff08;适用于windows家庭版&#xff09;_一起玩编程的博客-CSDN…

基于jsp+mysql+SSM学生兼职信息网站-计算机毕业设计

项目介绍 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 硬件环境&#xff1a; windows 7/8/10 1G内存以上 管理员角色…

系统的混乱并非业务本身之复杂,我们并不擅长处理『简单』

作者&#xff1a;聂晓龙 一、前言 一群高智商青年在餐厅吃饭&#xff0c;餐桌上一个瓶盖标识为盐的瓶子里装的是胡椒粉&#xff0c;而标识为胡椒粉的瓶子里装的却是盐&#xff0c;他们想出了一个充满才气的方案来完成对调--仅需要一张餐巾纸、一根吸管和两个空碟子。当他们叫来…

Jmeter 性能测试入门 ——性能插件介绍

目录 一、前言 1、首先&#xff0c;JMeter提供了三个基本的线程组&#xff0c;分别为: 2、其他线程组可以通过集成插件的方式使用&#xff0c;包括&#xff1a; 二、集成插件下载安装 1、下载地址&#xff1a;jmeter-plugins.org 2、安装&#xff1a;下载后文件为plugins…

nodejs+vue015疫情社区管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可…

Python自学教材推荐 初学者必看

Python是一种面向对象、解释性的高级程序语言&#xff0c;它已经被应用在众多领域&#xff0c;因此学习Python变得越来越有必要。传智播客针对编程零基础的初学者&#xff0c;编著出版了高质量的Python自学教材——《Python快速编程入门》。下面我将把这本书推荐给大家&#xf…

陈天老师的Rust培训(1)学习笔记

https://tyrchen.github.io/rust-training/ 跟C互操作时&#xff0c;加上上面图片的宏&#xff0c;rust会根据你的各个域的内存的占用自动去调整内存中的位置&#xff0c;让你的内存占用是最优的&#xff0c;而且rust在生成数据结构的结构的时候&#xff0c;它会做一些padding&…

新零售@2022: 调料、精酿、预制菜

【潮汐商业评论/原创】 圣诞节临近&#xff0c;刚刚下班的Emily想着好久没有与闺蜜见面了&#xff0c;于是相约着过平安夜。 她顺手就打开盒马APP下单了适合女生的微醺精酿&#xff0c;同时发现零售平台上新了一款可以用来拌蔬菜的中式沙拉川式椒麻汁&#xff0c;想起中午做饭…

常见音视频编码格式

1、常见的音频编码格式 MP3 这种压缩方式的全称叫MPEG Audio Layer3,MP3是利用MPEG Audio Layer 3的技术&#xff0c;将音乐以1:10甚至1:12 的压缩率&#xff0c;压缩成容量较小的file&#xff0c;换句话说&#xff0c;能够在音质丢失很小的情况下把文件压缩到更小的程度。而且…

收获一个python识别率超级高的OCR包,值得推荐

他的开源项目地址&#xff1a;https://github.com/sml2h3/ddddocr 他支持的类型还是挺多的&#xff1a; 本次更新新增了两种滑块识别算法&#xff0c;算法非深度神经网络实现&#xff0c;仅使用opencv和PIL完成。 算法1 小滑块为单独的png图片&#xff0c;背景是透明图&…

大一新生HTML期末作业——大学生抗疫感动专题网页设计作业

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

栈,队列和链表三者之间的关系与区别

最近一直在学习算法&#xff0c;刷算法题&#xff0c;但是自从大学毕业以来&#xff0c;数据结构的知识都还给老师了&#xff0c;只会个数组&#xff0c;所以前期刷的题目也都是有关数组的 最近跟着小册重学了一遍数据结构&#xff0c;今天就记录一下栈,队列和链表三者之间的关…

MindFusion.Diagramming for JavaScript V4.2.4

MindFusion.Diagramming for JavaScript V4.2.4 现在支持使用套索工具进行缩放的多种方式。2022 年 12 月 15 日 - 15:44新版本特征 套索缩放工具- 该控件现在支持使用套索工具进行缩放的多种方式。新的“PanAndModify”行为允许您在鼠标指针悬停在某个项目上或平移视图时进行选…