技术博客

内容创建揭秘:开源救星

2015年6月9日

确保优质音频/视频内容的安全主要涉及四个概念:

  1. 身份验证
  2. 授权
  3. 加密
  4. 数字版权管理(DRM)

身份验证是验证请求回放的个人身份(例如用户名/密码)的行为。授权包括确保个人有权查看该内容(例如订阅、租赁)。加密是音频/视频样本的置乱;必须获得解密密钥(许可证)才能在设备上成功播放。最后,DRM系统负责加密密钥的安全交换以及与这些密钥关联的各种“权利”。数字版权可能包括以下内容:

  • 限时(过期)
  • 支持的回放设备
  • 输出限制(如HDMI, HDCP)
  • 能够复制下载的内容
  • 同时查看的数量有限

本文将集中讨论加密和DRM的主题,并描述如何使用开源软件来创建受保护的自适应比特率测试内容,用于评估web浏览器和播放器应用程序。我将通过描述如何创建保护流的步骤来结束本文。

一种加密可以统治所有加密

加密是对数据块应用可逆数学运算以掩盖其内容的过程。已经开发了许多加密算法,每种算法都具有不同的安全级别、输入和输出以及计算复杂性。在大多数系统中,使用加密算法将一个随机的字节序列(密钥)与原始数据(明文)结合起来,以产生数据的打乱版本(密文)。在对称加密系统中,用于加密数据的密钥也用于解密。在非对称系统中,密钥是成对出现的;一个密钥用于加密或解密数据,而与它在数学上相关的兄弟用于执行相反的操作。为了保护数字媒体,我们将只关注对称密钥系统。

有这么多的加密方法可供选择,人们可以合理地期望web浏览器只支持一小部分。如果在不同浏览器中实现的算法集不重叠,则必须将媒体的多个副本存储在流媒体服务器上,以确保在大多数设备上成功播放。这就是ISO通用加密标准的用武之地。这些规范确定亚博苹果版怎么下载了单一加密算法(AES-128)和两个区块链模式(CTR, CBC),所有加密和解密引擎必须支持。流中的元数据描述了键和初始化向量都需要解密媒体样本数据。通用加密也支持“子样本加密”的概念。在这种情况下,未加密的样本被分散在整个样本集中,通用加密元数据被定义来描述加密样本开始和结束的字节偏移量。

除了基于加密的元数据之外,通用加密还定义了特定于保护的系统标头(PSSH)。这部分元数据是一个ISOBMFF框结构,其中包含特定DRM专有的数据,这些数据将指导DRM系统检索解密媒体样本所需的密钥。每个PSSH盒子都包含一个“系统ID”字段,该字段唯一标识所包含数据应用的DRM系统。一个媒体文件中可能会出现多个PSSH框,表示支持多个DRM系统。因此,通用加密的魔力;一个标准加密方案和多drm支持检索解密密钥,所有这些都在一个媒体副本中。

主要的通用加密标准(ISO 23001-7)指定了用于ISO BMFF介质容器的元数据。ISO 23001-9定义了MPEG传输流容器的通用加密。在许多情况下,主要规范中定义的框结构被简单地插入到MPEG TS包中,以避免引入本质上保存相同数据的全新结构。

创建受保护的自适应比特率内容

亚博yabo888vip网页版CableLabs开发了一种创建加密MPEG-DASH自适应比特率媒体的过程,涉及一些自定义软件和现有的开源工具。以下部分将介绍该软件,并介绍创建受保护流的过程。这些工具和一些附带的文档可在GitHub.文档的副本也被托管在这里

EME内容工具

自适应比特率转码

该过程的第一步是将源媒体文件转换为几个比特率较低的版本。这可以简单地降低比特率,但在大多数情况下,分辨率应该降低。为了做到这一点,我们使用了流行的FFMpeg实用程序套件。FFMpeg是一个多用途的音频/视频记录器、转换器和流媒体库,支持数十种格式。FFMpeg安装需要启用x264和fdk_aac编解码器库。如果没有合适的二进制文件,则可以构建它。

亚博yabo888vip网页版CableLabs提供了一个示例脚本这可以作为生成多比特率内容的指南。这个脚本中有一些重要的项目需要注意。

ABR打包器的工作之一是将源流分割为“段”。这些片段的持续时间通常在2到10秒之间,并且在媒体的所有比特率表示中保持帧精确对齐。为了让比特率切换对用户来说是无缝的,玩家必须能够在任何段边界的不同比特率流之间切换,并确保视频解码器能够接受数据。为了确保打包器可以在规则边界上分割流,我们需要确保转码器在转码过程中定期插入i - frame(不依赖于其他帧的视频帧)。脚本中x264的以下参数完成了这一任务:

(萤光笔线= 0)

-x264opts”keyint = $帧速率:min-keyint = $帧速率:no-scenecut”

我们使用在源媒体中检测到的帧速率来指示编码器至少每秒钟插入一次新的i帧。假设我们的包装器将使用整数秒进行分段,流将得到适当的条件调节。no- scencut参数告诉编码器,当它检测到源材料中的场景变化时,不要插入随机i帧。我们使用FFMpeg的ffprobe实用程序检测源视频的帧率。

帧速率= $('。/ffprobe $1 -select_streams v -show_entries stream=avg_frame_rate -v quiet -of csv="p=0"`))

在脚本的底部,我们可以看到使用比特率、分辨率和我们所需的编解码器配置文件/级别选择执行转码的命令。

Transcode_video "360k" "512:288" "main" 30 $2 $1 Transcode_video "620k" "704:396" "main" 30 $2 $1 Transcode_video "1340k" "896:504" "high" 31 $2 $1 Transcode_video "2500k" "1280:720" "high" 32 $2 $1 Transcode_video "4500k" "1920:1080" "high" 40 $2 $1 transcode_audio "128k" $2 $1 transcode_audio "192k" $2 $1

例如,第一个视频表示是360kb/s,使用AVC主配置文件3.0级,分辨率为512x288像素。另一件需要注意的事情是脚本分别对音频和视频进行转码。这是由于DASH- if准则禁止多路复用音频/视频段(参见DASH AVC/264的DASH- if互操作性点v3.0章节3.2.1)。

加密

接下来,我们必须加密我们创建的视频和/或音频表示文件。为此,我们使用MP4Box实用程序从GPAC.MP4Box非常适合这个任务,因为它支持通用加密标准并且高度可定制。不仅将执行AES-128 CTR或CBC模式加密,但它可以做子样例加密和插入多个,用户指定的PSSH框到输出媒体文件。

为了配置MP4Box执行普通加密,用户创建一个“cryptfile”。cryptfile是加密参数和PSSH框的基于xml的描述。下面是一个cryptfile的例子:


          

顶级< GPACDRM >元素表示我们正在执行AES-128 CTR模式普通加密。的< DRMInfo >元素描述了我们想要包括的PSSH框。最后,一个< CrypTrack >元素是为要加密的源媒体中的每个音轨指定的。可以为每个轨道指定多个加密密钥,在这种情况下,在移动到列表中的下一个密钥之前,将用单个密钥指示要加密的样本数量。

由于PSSH盒子实际上只是任意数据的容器,MP4Box定义了一组XML元素,专门用于定义数据中的位流< DRMInfo >节点。请参阅MP4Box网站获取比特流描述语法的完整描述。

一旦生成了cryptfile,您只需在命令行上将它作为参数传递给MP4Box。我们创建了一个简单的脚本帮助一次加密多个文件(因为您很可能为您的ABR媒体加密每个比特率表示文件)。

创建MP4Box加密文件与DRM支持

在任何安全系统中,解密受保护媒体所需的密钥肯定与媒体本身是分开的。DRM系统负责检索解密密钥和内容所有者为该内容提供给用户的任何权利。如果我们希望加密我们自己的内容,我们还需要确保加密密钥在每个drm的基础上可用,以便在内容回放时检索。

亚博yabo888vip网页版CableLabs开发了自定义软件来生成MP4Box加密文件,并确保所需的密钥在一个或多个许可服务器上可用。该软件是用Java编写的,可以在任何支持Java运行时的平台上运行。一个简单的Apache Ant构建文件提供用于编译软件和生成可执行JAR文件。我们的工具目前支持谷歌Widevine和Microsoft PlayReady DRM系统,并为每种系统提供了一对许可证服务器选择。第一个Adobe Access CDM刚刚在Firefox中发布,我们希望在未来几个月内更新工具以支持Adobe DRM。对W3C ClearKey加密的支持也是可用的,但是为了本文的目的,我们将主要关注商业DRM系统。

该软件的基本库是CryptfileBuilder.这组Java类提供了抽象,以方便MP4Box加密文件的构造和输出。工具集中的所有其他模块都依赖于这个库。每个特定于drm的工具在命令行(-h arg)和上都有详细的文档我们的网站

微软PlayReady测试服务器

PlayReady软件库中的代码提供了2个主要功能:

  1. PlayReady用于MP4Box加密文件的PSSH生成器
  2. 的加密密钥生成器微软PlayReady测试许可服务器

许可证服务器不允许客户端获取自己的密钥,而是使用基于“密钥种子”和128位密钥ID的算法来派生解密密钥。算法定义可以在这个文档来自微软(在标题为“内容键算法”部分)。使用这个算法、测试服务器使用的键种子和我们选择的键ID,我们可以派生出内容键,该内容键将在内容回放期间由服务器返回。

Widevine许可证门户

与PlayReady类似,我们的Widevine工具集为Widevine DRM系统提供了PSSH生成器。然而,Widevine不提供像微软那样的通用测试服务器。用户需要联系Widevine在他们的服务器上获得自己的许可门户。使用该门户,您将获得用于对请求进行签名的签名密钥和初始化向量。将此信息作为输入提供给Widevine加密文件生成器。

Widevine许可服务器将根据给定的“内容ID”和媒体类型(例如HD、SD、AUDIO等)生成加密密钥和密钥ID。自我们的工具开发以来,他们的API已经更新,现在他们支持摄取“外键”,我们的工具可以自己生成,但我们目前不支持。

DRMToday

当您在单个内容中添加对多个DRM系统的支持时,公共加密的真正威力就显现出来了。对于我们前面示例中使用的许可服务器,这是不可能的,因为我们不能选择自己的加密密钥(如前所述,Widevine已经添加了对“外密钥”的支持,但我们的工具还没有更新到可以使用它们)。考虑到这一点,我们需要一个新的许可系统来提供我们所寻求的功能。

亚博yabo888vip网页版CableLabs与CastLabs整合对他们的支持DRMToday多drm授权服务在我们的内容创作工具。DRMToday提供一整套内容保护服务,包括加密和打包。对于我们的需求,我们只依赖于多drm授权服务器功能。DRMToday提供了一个REST API,我们的软件使用该API将通用加密密钥摄取到他们的系统中,以便稍后由受支持的DRM系统之一检索。

MPEG-DASH分割和包装

该过程的最后一步是分割加密媒体文件并生成MPEG-DASH清单(.mpd)。为此,我们再次使用MP4Box,但这一次我们使用-dash参数。在MP4Box中有许多分割媒体文件的选项,所以请运行MP4Box -h破折号来查看配置的完整列表。

出于本文的目的,我们将重点关注生成满足DASH-IF DASH-AVC264“OnDemand”配置文件要求的内容。我们的存储库包含辅助脚本它将获取一组MP4文件,并根据DASH- if指南生成DASH内容。运行此脚本生成分段媒体文件并生成清单。

格雷格Rutz他是CableLabs的首席架构师,从事多个与亚博yabo888vip网页版数字视频编码/转码和在线视频数字版权管理相关的项目。

这篇文章是技术博客系列的一部分。基于标准的现代Web优质内容".

隐私偏好中心

    严格的必要

    网站正常运行所必需的cookie。

    PHPSESSID, __cfduid hubspotutk

    性能

    它们用于跟踪用户交互并检测潜在的问题。这些数据有助于我们通过提供用户如何使用本网站的分析数据来改善我们的服务。

    BizoID, wooTracker, GPS, _ga, _gat, _gid, _hjIncludedInSample, mailmunch_second_pageview

    针对

    这些cookies用于(1)发送与您和您的兴趣更相关的广告;(2)限制你看广告的次数;(3)帮助衡量广告活动的效果;(4)了解人们在观看广告后的行为。

    __hssc, __hssrc, __hstc,