技术博客

内容创作启发:开源救援

2015年6月9日

涉及四个主要概念获得优质音频/视频内容:

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

身份验证是验证的行为个体的身份请求播放(如用户名/密码)。授权包括确保个人观点的权利内容(例如订阅、租赁)。加密是匆忙的音频/视频样本;解密密钥(许可证)必须获得,使成功的设备上播放。最后,DRM系统负责安全的加密密钥交换和各种“权利”的协会与钥匙。数字版权可能包括诸如:

  • 有限的时间内(过期)
  • 支持播放设备
  • 输出的限制(例如HDMI, HDCP)
  • 能够复制下载内容
  • 有限数量的同步的观点

本文将关注加密和数字版权管理的主题和描述如何开源软件可以用来创建保护,自适应比特率测试内容用于评估web浏览器和播放器应用程序。我将关闭这篇文章通过描述的步骤保护流是如何创建的。

一个加密规则

加密的过程应用可逆的数学运算的数据块来掩盖其内容。众多的加密算法被开发出来,每个都有不同程度的安全,输入和输出,计算复杂度。在大多数系统中,随机字节序列(关键)是结合原始数据(明文)使用加密算法产生的炒版本数据(密文)。在对称加密系统中,使用相同的密钥来加密数据也可以用于解密。在不对称系统中,密钥成对地出现;一个密钥用于加密或解密数据,同时其数学相关的兄弟是用来执行逆操作。为保护数字媒体的目的,我们将只关注对称密钥系统。

这么多的加密方法可供选择,一个可以合理地认为web浏览器只支持一个小子集。如果设置的算法实现在不同的浏览器不重叠,媒体的多个副本必须存储在流媒体服务器,以确保成功的大多数设备上播放。这就是ISO常见的加密标准。这些规范确定亚博苹果版怎么下载一个单一的加密算法(aes - 128)和两个块链接模式加拿大广播公司(CTR),所有加密和解密引擎必须支持。元数据描述了密钥和流初始化向量需要解密媒体示例数据。常见的加密也支持“子样品加密”的概念。在这种情况下,未加密的样本分布在总组样本和常见的加密定义元数据来描述字节偏移量加密的样品开始和结束的地方。

除了加密的元数据,通用加密定义保护特定系统头(PSSH)。这个元数据是一个ISOBMFF框结构,包含专有数据到一个特定的DRM指导的DRM系统检索密钥来解密媒体样本。每个PSSH框包含一个“系统ID”字段,惟一地标识的DRM系统所包含的数据应用。多个PSSH盒子可能出现在一个媒体文件表明支持多个DRM系统。因此,常见的加密的魔力;标准的解密密钥的加密方案和multi-DRM支持检索所有在一个复制的媒体。

主要常见的加密标准(ISO 23001 - 7)指定元数据用于ISO BMFF媒体容器。ISO 23001 - 9定义常见的加密的MPEG传输流容器。在许多情况下,箱子结构规范中定义的主要只是插入MPEG TS数据包为了避免引入全新的结构本质上相同的数据。

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

亚博yabo888vip网页版CableLabs发展过程来创建加密MPEG-DASH自适应比特率媒体涉及一些定制软件结合现有的开源工具。下面的部分将介绍创建保护的软件和过程流。这些工具和一些附带的文档GitHub。文档的一个副本也主持在这里

高速内容工具

自适应比特率转码

这个过程的第一步是转换媒体文件分成几个来源,低比特率的版本。这可以简单地降低比特率,但在大多数情况下,应该降低分辨率。为此,我们使用流行的FFMpeg套工具。FFMpeg是多功能音频/视频记录器,转换器,和流媒体库的支持的格式。FFMpeg安装需要x264和fdk_aac编解码器库启用。如果没有可用适当的二进制文件,它可以被构建。

亚博yabo888vip网页版CableLabs提供了一个示例脚本可以用作生成multi-bitrate内容指南。有一些重要的物品在这个脚本中,应该注意。

上包装机的工作之一是把源流分成”部分。“这些领域通常2到10秒时间,通过在所有媒体的比特率表示。比特率出现无缝切换到用户,玩家必须能够切换不同的比特率流边界,保证任何一段视频解码器能够接受数据。确保包装机可以在常规分割流边界,我们需要确保我们的代码转换器是插入I-Frames(视频帧,没有依赖于其他帧)定期在转换过程中。以下参数x264的脚本完成的任务:

(萤光笔线= 0)

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

我们使用帧速率检测源媒体指导编码器中插入新的I-Frames过至少一次。假设我们的包装机将使用积分的秒数段,流将适当的条件。no-scenecut参数告诉编码器不要插入随机I-Frames当它检测到一个场景的变化源材料。我们检测源视频的帧速率使用ffprobe实用程序是FFMpeg的一部分。

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

在脚本的底部,我们看到命令执行代码转换使用比特率,决议和编解码器配置文件/水平选择,我们需要。

transcode_video“360 k”“512:288”“主要”30 $ 2 $ 1 transcode_video“620 k”“704:396”“主要”30 $ 2 $ 1 transcode_video“1340 k”“896:504”“高”31 $ 2 $ 1 transcode_video“2500 k”“1280:720”“高”32 2美元1美元transcode_video“4500 k”“1920:1080”“高”40 $ 2 $ 1 transcode_audio“128 k”$ 2 $ 1 transcode_audio $ 2 $ 1 192 k

例如,第一个视频表示是360 kb / s的决议512 x288像素使用AVC主要轮廓,3.0水平。另外要注意的是,该脚本对单独的音频和视频。这是由于这一事实DASH-IF准则禁止多路音频/视频谈一段(见3.2.1节DASH-IF互操作性点v3.0的破折号AVC / 264)。

加密

接下来,我们必须加密音频和/或视频表示我们创建的文件。为此,我们使用MP4Box实用程序从GPAC。MP4Box这个任务,因为它是完美的支持常见的加密标准高度可定制的。不仅将执行aes - 128点击率或CBC模式加密,但它可以加密和子插入多个指定PSSH箱子塞进媒体文件的输出。

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


          

顶级< GPACDRM >元素表明我们正在执行aes - 128 CTR常见的加密方式。的< DRMInfo >元素描述PSSH盒子我们希望包括。最后,一个< CrypTrack >元素为每个跟踪指定源媒体我们想加密。为每个跟踪可能指定多个加密密钥,在这种情况下,样本的数量来加密将表示与前一个键移动到下一个关键在列表中。

自从PSSH盒子只是任意数据的容器,MP4Box专门定义一组XML元素定义的比特流< DRMInfo >节点。请参见MP4Box网站比特流的完整描述描述语法。

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

创建MP4Box Cryptfiles DRM的支持

在任何安全系统,所需的密钥解密保护媒体肯定会分开媒体本身。DRM系统的职责是检索解密密钥和任何权利向用户提供内容的所有者。如果我们希望加密自己的内容,我们还需要确保加密密钥上可用per-DRM检索内容回放时的依据。

亚博yabo888vip网页版CableLabs开发定制软件生成MP4Box cryptfiles并确保所需的密钥都可以在一个或多个许可证服务器。软件是用Java编写的,可以运行在任何支持Java的平台运行时。一个简单的Apache Ant构建文件提供了编译软件和生成可执行的JAR文件。目前我们的工具支持Google都和微软PlayReady DRM系统的许可证服务器的选择。第一个Adobe获得CDM是刚刚被释放在Firefox和我们希望更新工具在未来几个月支持Adobe DRM。支持W3C ClearKey加密也可以,但我们会关注商业DRM系统本文的目的。

软件的基础库CryptfileBuilder。这一组Java类提供了抽象,以促进建设和输出MP4Box cryptfiles。工具集是所有其他模块依赖于这个库。每个DRM-specific工具都有详细的文档可以在命令行中(- h参数)我们的网站

微软PlayReady测试服务器

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

  1. PlayReady PSSH发电机为MP4Box cryptfiles
  2. 加密密钥生成器的使用微软PlayReady测试许可服务器

而不是让客户吸收自己的钥匙,许可服务器使用一个算法基于一个“关键种子”和一个128位的密钥ID来推导出解密密钥。该算法定义中可以找到这个文档从微软(在“内容关键算法”一节)。使用该算法,关键测试服务器使用的种子,我们的选择和关键ID,我们可以推导出内容的关键,期间将服务器返回的播放的内容。

都许可门户

PlayReady相似,我们都工具集提供了一个PSSH发电机都DRM系统。然而,都没有提供一个通用的测试服务器从微软的。用户需要联系都获得自己的许可证门户服务器。门户网站,你会得到一个签名的密钥和初始化向量签署你的请求。你提供这些信息作为输入都cryptfile生成器。

都许可服务器将生成加密密钥和密钥ID基于给定的“内容识别”和媒体类型(例如高清、SD、音频等)。以来的API已经更新我们的工具开发和他们现在支持摄取的“外键”,我们的工具可以生成本身,但是我们目前不支持。

DRMToday

常见的加密的真正力量是由明显当你添加支持多种DRM系统在一个单一的内容。在我们之前使用的许可证服务器的例子,这是不可能的,因为我们无法选择自己的加密密钥(如前所述,都增加了对“外键”的支持,但没有更新我们的工具使用)。有鉴于此,需要提供一个新的许可制度我们所寻求的功能。

亚博yabo888vip网页版CableLabs已经与CastLabs将对他们的支持DRMToday在我们的内容创建工具multi-DRM许可服务。DRMToday提供一整套内容保护服务包括加密和包装。对于我们的需求,我们只有依靠multi-DRM许可服务器功能。DRMToday提供了一个REST API,我们的软件使用常见的加密密钥吞入他们的系统供以后检索一个支持的DRM系统。

MPEG-DASH分段和包装

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

对于本文的目的,我们将专注于生成内容符合要求的DASH-IF DASH-AVC264“调控”形象。我们的库包含一个辅助脚本这需要一组MP4文件并生成缓冲内容根据DASH-IF指南。运行此脚本生成分段媒体文件和生产你的清单。

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

这篇文章是一个技术博客系列的一部分,”现代Web标准,优质内容”。

隐私偏好中心

    严格的必要

    必需的饼干,网站正常运行。

    PHPSESSID, __cfduid hubspotutk

    性能

    这些都是用于追踪用户交互和发现潜在的问题。这些帮助我们改善我们的服务通过提供分析数据,用户如何使用这个网站。

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

    针对

    这些饼干是用来(1)提供更相关的广告对你和你的利益;(2)限制你看到一个广告的次数;(3)帮助衡量广告的有效性;(4)理解人们的行为后,查看广告。

    __hssc、__hssrc __hstc,