查看详情

HDCP 介绍以及在 Web 的应用

HDCP(High-Definition Content Protection)是数字内容保护的一种方案,旨在保护数字视频内容在从设备传输到显示器或投影仪的途中不被非法复制。它由英特尔开发,并已成为高清数字内容传输的行业标准。 HDCP 的工作原理 HDCP 使用一对加密密钥来保护数字内容。第一个密钥由源设备(例如蓝光播放器或计算机)生成,第二个密钥由显示器或投影仪生成。当源设备将视频信号发送到显示器或投影仪时,它会使用第一个密钥对信号进行加密。显示器或投影仪使用第二个密钥来解密信号。如果缺少正确的密钥,则无法解密信号,因此无法复制内容。 HDCP 兼容设备拥有自己独特的加密密钥集,当尝试将受 HDCP 保护的内容从一台设备传输到另一台设备时,它们会相互交换这些密钥。这些加密密钥既可以确认每台设备都符合 HDCP 标准,又可用于在传输内容时对其进行加密,然后在另一端解密。这可以防止中间人攻击在传输过程中窃取未受保护的媒体。 现代显示器理所当然地都支持 HDCP,因此您最有可能遇到与推出时不支持 HDCP 的旧高清电视的兼容性问题。如果您使用不支持 HDCP 的电缆或分线器,即使显示器本身支持 HDCP,也会出现这种情况。 虽然 HDCP 最常用于蓝光光盘等物理媒体,但它也用于一些流媒体服务。例如,迪士尼和华纳兄弟使用 HDCP 来加密和保护几乎所有自己的节目,因此如果您在流媒体服务(尤其是他们的第一方服务)上遇到它们, 详情 »

查看详情

解读 GDPR

GDPR,是指通用数据保护条例(General Data Protection Regulation)的缩写,是欧盟(EU)的一项法规,旨在保护欧盟公民的个人数据并赋予他们对其数据的更多控制权。它于2018年5月25日生效,取代了1998年数据保护指令。你可以前往的官方网站阅读具体的内容,里面罗列了非常详实的条款。 https://gdpr-info.eu/ 如果你的网络服务需要登录欧洲,这个协议是你必须了解的。GDPR 适用于在欧盟运营或处理个人数据的任何组织,无论其总部位于何处。这意味着即使您是一家美国公司,但您收集或处理来自欧盟公民的个人数据,则您也必须遵守 GDPR。你是懂欧洲的违法罚款的,尤其涉及数据隐私。 GDPR 带来的影响有: APP 必须获得个人的同意才能处理他们的个人数据 个人有权访问其个人数据并要求更正或删除不准确的数据 个人有权要求组织停止处理他们的个人数据或限制其处理 APP服务商必须任命数据保护官 (DPO),负责监督其遵守 GDPR 的情况 为了遵守GDPR,应用程序必须采取一些措施,例如: 获得用户的同意才能收集和处理他们的个人数据。 这意味着应用程序必须有一个明确的隐私政策,解释应用程序如何收集、使用和共享数据,以及用户如何控制他们的数据。用户必须能够轻松地同意或拒绝处理他们的数据的请求。 仅收集必要的个人数据。 应用程序只能收集为提供服务或履行合同所需的数据。他们不应该收集不必要或无关的数据。 以安全的方式保护个人数据。 应用程序必须采取适当的技术和组织措施来保护个人数据免遭未经授权的访问、使用、披露、 详情 »

查看详情

快速定位错误的 JEST 测试用例

随着代码集成越来越多,尤其大家对单测质量和覆盖率, 大家在 CI 里寻找错误的测试用例似乎非常麻烦。 其实有网友也有同样的需求: Print list of failed tests at the end of test run 这里面有个非常天才的小伙子,直接来了一个 npx jest 2>&1 | grep '●' Jest 失败的测试用例有个 ● 前缀!!! 为什么我比较喜欢这种,因为不需要更改配置,而且直接可以在网页浏览器搜索 '●' 详情 »

查看详情

实现类似 Medium 风格的视频加载

非常早之前写过关于一篇《[译]Medium 是如何优化图片加载的》 的文章。 最近在看一些视频封面的优化,其中会有一些黑屏的问题,于是乎想到了是不是可以借鉴这种风格。 大概原理还是,可以根据视频的 loadeddata 事件,然后将覆盖在上面的模糊的封面图隐藏,然后播放视频。 html <div class="video-container"> <video width="720" src=""></video> <div class="cover"></div> </div> CSS .video-container { position: relative; width: 720px; display: none; 详情 »

查看详情

AB 实验结果分析的多重性

在公司工作,普遍采用了AB实验去验证某个 Feature 的效果,但是客户端或者前端工作而言,我们在做实验分析的时候还需要做更多的事情。 去年自己遇到一个 Case 便是如此。这里不太会透露很多业务的细则。 比如自己再做的的一个实验 A, 它在前端整体跑下来的结果是 显著 positive 的。比如它从设计的出发,会带来某个指标的增长。从假设出发,到最后的结果,我们发现符合预期的。因此我们计划将它应用到全量用户。 总的来说这里没什么问题,但是我们都知道前端其实面临非常多设备型号, 有可能存在某种型号在这个 feature 上的失效,带来负面的影响。虽然我们看到了总体的增长,但是部分用户我们其实并没有看到预期增长,这个是我们工作需要去重视的。 因此后来我们也提议,在做实验结果 Review 的时候,可以 Review Top5 的机型指标增长情况。 很多人提出为什么不再测试阶段去针对多个机型的测试呢? 这里引入另外一个自己的 Case。前端工作的多重性,会让我们的工作总会有所疏漏。 自己在做的某个实验 B,它的假设是可以降低某种错误。然后我们开始进行多个平台的实验,发现普遍都取得了一些效果,然后我们准备去进行全量铺开。然后全量铺开的过程,发现它带来了某一项别的指标的异常上升。然后我们 Review 发现,它在某种机型某种条件下才会失效。 详情 »

查看详情

一台电脑与多个 Github 账户协作

很多公司都是企业组织在 Github 上进行代码的管理,因此大家可能需要一个工作的账户和个人的账户区分。其实这个非常好弄,只需要两部即可: Step1 配置多份配置 你可以在你的根目录,创建下面的的结构 ~ ├── .gitconfig <-- global └── Developer/ ├── personal/ │ ├── project_1/ │ ├── project_2/ │ ├── project_#/ │ └── .gitconfig <-- personal └── company/ ├── project_1/ ├── project_2/ ├── project_#/ └── .gitconfig <-- company 然后更新两份配置 # ~/Developer/personal/.gitconfig [credential] username = <github-user> [user] name = <github-user> email = <github-user>@users.noreply.github. 详情 »

查看详情

视频前沿技术

这篇文章摘自《在线视频-技术精要》。这是一本非常适合从事多媒体工作的开发人员的手册,里面设计了非常多的方便,不单单是视频编解码,也包括其延伸和基础服务这些。 这里简要罗列下最近阅读的章节,前沿技术趋势。 10bit我们目前主流的 8bit,其实就是我们 RGB 进行组合会有 256 (28) * 256 * 256 总可能性。而 10Bit 也就是 1024(210) * 1024 * 1024 总可能性;这大概可以提供10.71个不同颜色,这无疑将会对图像还原提供更加精准的支持。但是考虑到市场大量的设备仅仅支持 8 bit,显示设备对尚未形成普遍需求。 全面应用还需要等待更长的时间使用颜色更加清晰的活泼的图像,会给人一种更好的体验 HDRHDR(高动态范围)频已经在照片领域广为流行,但是由于传感器所限图像和视频拍摄时,无法保留光照的完全细节需要节奏技术手段给不同种曝光,设置照片组合出HDR的图像HDR并非只影响明暗度,他们与更广的社育和更高的相处比绑在一起为了保证第二内容可以显示,设备上得到正确的渲染。 HDR对视频处理流程中带来的主要变化是显示的预处理和后处理细节,考虑到对SDR内容的兼容有两种流媒体的方案, 一种方案是基于可伸缩视频编码及SDR内容为基础,增强层带有额外的动态颜色范围信息分别进行编码和传述支持需要用专门的解码及极品 HDR 重建另一种方案,这事情生产一个层流和包含额外动态范围与颜色信息的原数据,传统的播放数据则忽略这些元数据,支持HDR的设备进行重建。目前很多设备包括手机都有对 HDR 的支持,总的来说这一块还算比较热门了。 详情 »

查看详情

什么是 DRM

DRM (英语:Digital rights management,缩写为DRM)是一系列访问控制技术,通常用于控制数字内容和设备在被销售之后的使用过程[3][4][5]。DRM有时也称为拷贝保护、复制控制、技术保护措施等。许多数字出版社和软件厂商都使用了DRM,例如亚马逊、AT&T、AOL、Apple Inc等。它如今一次成为很多公司最为基本的一想服务和要求。而且在音视频,文档,电子书领域都有他的存在。这里自己主要介绍音视频中的 DRM。 如今,电视音乐已经成为我们生活的一部分。如果大家回忆历史的话,我们最初接触这些东西是通过电视,而不是 APP。那个时候大家还流行通过租借 VCD 的形式,来看成龙周星驰的电影。随着数字媒体的兴起,我们可以非常容易的在网上看到最新的电影,这给电影的制作商带来了非常大的利益损失。因此对于非常复制的盗版打击,一直都是这些从事内容提供商一直需要去处理的事情。 DVD论坛的内容扰乱系统是一个早期的DRM系统。它使用简单的加密算法,制作DVD播放器的厂商必须获得授权在产品中实现此技术,然后才能解密并播放DVD中的加密内容。授权条款规定了播放DVD内容的方式,包括输出信号的格式和方式,以保证在电视上播放时视频的加密不受破坏。 在1999年,微软发布了WMDRM,用于执行媒体文档包含的DRM指令,限制用户对媒体文档的使用。这些DRM指令可以指定文档的播放次数、是否能被备份或转发。 详情 »

查看详情

深入理解 DRM 系列

准备开始写一系列关于 DRM。由于自己主要从事流媒体工作,这里也以流媒体的内容为主。 这里大概会写几篇,代码部分会聚焦在 Web 端的内容处理。自己最近一直在从事这方面的工作,因此也希望罗列整理一些资料,分享自己在这方面的一些心得。 DRM 目前已经存在于绝大多数的服务 APP 中。最直观的体验,就是你可以尝试看一些来自 Disney 等电影公司的电影,时候你可以尝试截图试一下: 我们可以从 Bilibili 网站点击进去,发现截图的时候是黑屏。这样也是为了防止录屏将视频流出去。尽管我们有 DRM 保护技术,但是还是依旧存在严重的流媒体盗版事件。因此DRM发展依旧有很长的路。 这一些列文章,自己将从下面几个部分区介绍: 什么是 DRM 常见的流媒体DRM 方案 Web 前端如何支持 DRM 深入理解 Widevine HDCP介绍 常见的 DRM 问题 希望这一系列文章,可以帮助大家去慢慢理解 DRM 工作,并且在日常工作中有所实践。 详情 »

查看详情

Typesctip unknown vs any

Typescript 如今已经成为非常火的开发语言,很多公司都将它作为首要的项目搭配。自己也是在使用中,发现了国外工程师非常严苛的要求用对 unknown 和 any。 unknown 类型,顾名思义:任何值都可以分配给unknown类型,但如果没有类型断言,unknown则不能分配给除自身和any类型之外的任何值。unknown同样,如果没有首先断言或将其限制为更精确的类型,则不允许对类型设置为 as 的值进行任何操作。 any 则是当变量的类型未知或变量的类型尚未定义时使用的泛型类型 其实我们看一段代码就很好理解了: let vAny: any = 10; // We can assign anything to any let vUnknown: unknown = 10; // We can assign anything to unknown just like any let s1: string = vAny; // Any is assignable to anything let s2: 详情 »