关于DRM 中的PSSH Data

PSSH是什么

PSSH: Protection System Specific Headers
PSSH 是一个标准化的容器,用来存放protection system使用到的一些metadata。
PSSH不直接包含加密的key,但是包含key ID、 encryption scheme、和其他的一些用来向license server获取key的一些信息。

如何使用

在对视频做DRM protection的时候,packager需要对视频本身进行加密,并且向内容中添加一些metadata,通常以PSSH Box的形式进行存储。针对不同的DRM system需要添加不同的PSSH Box,分别包含不同的DRM system指定的PSSH Data。
当player播放加密内容时, 读取其中的PSSH Box, 然后利用其中的信息向license server请求key。

PSSH Box 的格式
var pssh = [0x00, 0x00, 0x00, 0x44, 0x70, 0x73, 0x73, 0x68, // BMFF box header (68 bytes, 'pssh')0x01, 0x00, 0x00, 0x00,                         // Full box header (version = 1, flags = 0)0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, // SystemID0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b,0x00, 0x00, 0x00, 0x02,                         // KID_count (2)0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // First KID ("0123456789012345")0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, // Second KID ("ABCDEFGHIJKLMNOP")0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,0x00, 0x00, 0x00, 0x00,                         // Size of Data (0)
];

以上为PSSH version 1格式,version 0不包含其中的KID_count和KID list.

不同DRM system的PSSH Data格式
PlayReady
<WRMHEADER xmlns="http://schemas.microsoft.com/drm/2007/03/PlayReadyHeader" version="4.3.0.0"><DATA><PROTECTINFO><KIDS><KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID><KID ALGID="AESCBC" VALUE="tuhDoKUN7EyxDPtMRNmhyA=="></KID></KIDS></PROTECTINFO><LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL><DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID></DATA>
</WRMHEADER>
Widevine PSSH data 的protobuf 表示

最终写入PSSH box的数据是protobuf序列化后的结果

// Copyright 2016 Google LLC. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
//
// This file defines Widevine Pssh Data proto format.syntax = "proto2";package shaka.media;message WidevinePsshData {enum Algorithm {UNENCRYPTED = 0;AESCTR = 1;};optional Algorithm algorithm = 1;repeated bytes key_id = 2;// Content provider name.optional string provider = 3;// A content identifier, specified by content provider.optional bytes content_id = 4;// The name of a registered policy to be used for this asset.optional string policy = 6;// Crypto period index, for media using key rotation.optional uint32 crypto_period_index = 7;// Optional protected context for group content. The grouped_license is a// serialized SignedMessage.optional bytes grouped_license = 8;// Protection scheme identifying the encryption algorithm. Represented as one// of the following 4CC values: 'cenc' (AES-CTR), 'cbc1' (AES-CBC),// 'cens' (AES-CTR subsample), 'cbcs' (AES-CBC subsample).optional uint32 protection_scheme = 9;
}// Derived from WidevinePsshData. The JSON format of this proto is used in
// Widevine HLS DRM signaling v1.
// We cannot build JSON from WidevinePsshData as |key_id| is required to be in
// hex format, while |bytes| type is translated to base64 by JSON formatter, so
// we have to use |string| type and do hex conversion in the code.
message WidevineHeader {repeated string key_ids = 2;// Content provider name.optional string provider = 3;// A content identifier, specified by content provider.optional bytes content_id = 4;
}
PSSH Data在m3u8中的表示
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;charset=UTF-16;base64,vgEAAAEAAQC0ATwAVwBSAE0AS",IV=0xaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb,KEYFORMATVERSIONS="1",KEYFORMAT="com.microsoft.playready"
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,AAAAOHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABgSEKqqqqqqqqqqqqqqqqbbbbBI88aJmwY=",KEYID=0xaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb,IV=0xaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb,KEYFORMATVERSIONS="1",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb",KEYFORMATVERSIONS="1",KEYFORMAT="com.apple.streamingkeydelivery"

Reference
PSSH and PSSH Box - Protection System Specific Headers
PlayReady Header Specification
widevine_pssh_data.proto
Widevine_DRM_for_HLS

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

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

相关文章

.NET 9 的新增功能

文章目录 前言一、.NET 运行时二、序列化三、缩进选项四、默认 Web 选项五、LINQ六、集合七、PriorityQueue.Remove() 方法八、密码九、CryptographicOperations.HashData() 方法十、KMAC 算法十一、反射十二、性能十三、循环优化十四、本机 AOT 的内联改进十五、PGO 改进&…

11.19.2024刷华为OD

文章目录 HJ51HJ53 杨辉三角HJ56HJ57 高精度整数加法HJ58HJ60 简单题HJ63 DNA序列&#xff08;简单题&#xff09;语法知识记录 HJ51 https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d?tpId37&tags&title&difficulty0&judgeStatus0&…

小米表盘自定义工具支持最新小米9pro

app下载(v5.2.28) 点击下载 介绍 米坛小米表盘自定义工具是专为小米手环用户设计的软件&#xff0c;它具备以下特点和功能&#xff1a; 兼容性广泛&#xff1a;支持包括小米手环7、7Pro、8、8Pro、9、9Pro以及小米手表S3、S4在内的多款设备。 持续更新&#xff1a;软件不断…

算法-二叉树(从理论知识到力扣题,递归、迭代。)

二叉树 一、二叉树理论知识1、种类a.满二叉树b.完全二叉树c.二叉搜索树d.平衡二叉搜索树 2、java对于树的理解3、存储a.链式存储&#xff08;常用&#xff09;b.数组存储 4、遍历方式a.深度优先搜索b.广度优先搜索 5、树的定义&#xff08;链式&#xff09; 二、力扣题解写题思…

青训营刷题笔记10

问题描述 小C拿到了一个排列&#xff0c;她想知道在这个排列中&#xff0c;元素 xx 和 yy 是否是相邻的。排列是一个长度为 nn 的数组&#xff0c;其中每个数字从 11 到 nn 恰好出现一次。 你的任务是判断在给定的排列中&#xff0c;xx 和 yy 是否是相邻的。 测试样例 样例1…

时间类的实现

在现实生活中&#xff0c;我们常常需要计算某一天的前/后xx天是哪一天&#xff0c;算起来十分麻烦&#xff0c;为此我们不妨写一个程序&#xff0c;来减少我们的思考时间。 1.基本实现过程 为了实现时间类&#xff0c;我们需要将代码写在3个文件中&#xff0c;以增强可读性&a…

Leetcode 路径总和

使用递归算法 class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {// 如果节点为空&#xff0c;返回falseif (root null) {return false;}// 如果是叶子节点&#xff0c;检查路径和是否等于目标值if (root.left null && root.right null) …

Linux开发讲课50--- epoll、poll、select的原理和区别

一、什么是epoll&#xff1f; epoll是一种I/O事件通知机制&#xff0c;是linux 内核实现IO多路复用的一个实现。IO多路复用是指&#xff0c;在一个操作里同时监听多个输入输出源&#xff0c;在其中一个或多个输入输出源可用的时候返回&#xff0c;然后对其的进行读写操作。 ep…

MySQL datetime不同长度的影响

MySQL datetime长度的影响 1.背景 MySQL数据库中某张表的某个字段类型设置datetime, 长度为0&#xff0c;在进行插入数据时&#xff0c;MySQL会对该字段进行舍入操作。 2.测试 1.创建一张测试表&#xff0c;里面有两个时间字段都是datetime&#xff0c;但其中一个长度为3 …

数据灾备方案学习

1. 数据灾备 1.1 备份 将数据由一份数据转存为多份数据的过程&#xff0c;即为备份&#xff0c;通常指将数据通过某些手段&#xff0c;将数据存放到其他不同设备中&#xff0c;防止数据丢失。指用户为应用系统产生的重要数据&#xff08;或者原有的重要数据信息&#xff09;制…

在centos7中安装SqlDeveloper的Oracle可视化工具

1.下载安装包 &#xff08;1&#xff09;在SqlDeveloper官网下载&#xff08;Oracle SQL Developer Release 19.2 - Get Started&#xff09;对应版本的安装包即可&#xff08;安装包和安装命令如下&#xff09;&#xff1a; &#xff08;2&#xff09;执行完上述命令后&#x…

矩阵论在深度学习中的应用

摘要&#xff1a; 本文深入探讨了矩阵论在深度学习领域的广泛应用。首先介绍了深度学习中数据表示和模型结构与矩阵的紧密联系&#xff0c;接着详细阐述了矩阵论在神经网络训练算法优化、卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;及其…

AlphaFold 3开源,谷歌DeepMind诺奖AI项目,革新蛋白质结构预测,加速新药和疫苗研发

AlphaFold 3是什么&#xff1f; MeoAI了解到这个模型在2024年因其在蛋白质结构预测方面的贡献获得了诺贝尔化学奖。AlphaFold 3 是由 DeepMind 开发的一款人工智能&#xff08;AI&#xff09;软件&#xff0c;它能够以前所未有的精确度预测几乎所有生命大分子&#xff08;蛋白…

Excel如何把两列数据合并成一列,4种方法

Excel如何把两列数据合并成一列,4种方法 参考链接:https://baijiahao.baidu.com/s?id=1786337572531105925&wfr=spider&for=pc 在Excel中,有时候需要把两列或者多列数据合并到一列中,下面介绍4种常见方法,并且提示一些使用注意事项,总有一种方法符合你的要求:…

甲骨文云服务器 (Oracle Cloud) 终极防封、防回收的教程!

1.WindTerm 远程终端连接器&#xff1a;【官方下载】、【备用下载 】 2.AA面板&#xff1a;【安装脚本】 3.开启端口&#xff1a; sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -F 4.WordPress&#xf…

c++源码阅读__ThreadPool__正文阅读

一. 简介 本章我们开始阅读c git 高星开源项目ThreadPool, 这是一个纯c的线程池项目, 并且代码量极小, 非常适合新手阅读 git地址: progschj / ThreadPool 二. 前提知识 为了面对不同读者对c掌握情况不同的情况, 这里我会将基本上稍微值得一说的前提知识点, 全部专门写成一篇…

环形子数组的最大和

题目 给定一个长度为 n 的环形整数数组 nums &#xff0c;返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上&#xff0c; nums[i] 的下一个元素是 nums[(i 1) % n] &#xff0c; nums[i] 的前一个元素是 nums[(i - 1 n) % …

二叉搜索树的基本操作(最全面)

目录 二叉搜索的定义: 节点类: 查找关键词对应的值: 非递归 递归: 查找最小关键词对应的值: 方法一: 方法二: 查找最大关键词对应的值: 方法一: 方法二: 存贮关键词对应的值: 查找关键词的前驱值: 查找关键词对应的后继值: 删除节点: 非递归: 递归: 范围 1.…

python爬虫-爬虫常用函数及其用法-1

1、urllib库 urllib库是python中一个最基本的网络请求库。可以模拟浏览器的行为&#xff0c;向指定的服务器发送一个请求&#xff0c;并可以保存服务器返回的数据。 &#xff08;1&#xff09;urlopen函数 在 python3 的 urllib 库中&#xff0c;所有和网络请求相关的方法&a…

vue3 路由守卫

在Vue 3中&#xff0c;路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理&#xff0c;比如权限验证、数据预取等&#xff0c;从而增强应用的安全性和效率。路由守卫分为几种不同的类型&#xff0c;每种类型的守卫都有其特定的应用场景。 其实路…