http-live-streaming - 在播放器中使用 HLS 和 DASH + DRM 的推荐方式是什么?
问题描述
我正在使用 VideoJS 播放器并有一个 CMAF 视频,所以我使用的是 HLS 和 DASH。我也在使用所有 3 种类型的 DRM。适用于 hls 的 Fairplay,widevine 和 playready 的 dash。
我的问题是我是否应该在播放器中同时包含 hls 和 dash 源并让播放器决定播放哪一个?还是我检测浏览器并仅基于此插入正确的 url?DRM 也是一样的。我可以将所有 DRM 添加到播放器吗?还是我应该只添加适用的一项?
解决方案
HLS 与 DASH 的使用通常由终端设备和客户端功能和规则决定。
iOS 和 Safari 通常使用 HLS 和 FairPlay,Android、Firefox 和 Chrome 使用 DASH 和 Widevine,Windows 和 Edge 使用 DASH 和 PlayReady。
请注意,Widevine 和 PlayReady 可以使用相同的 DASH 流 - CENC,通用加密标准,允许相同的流包含 Widevine 和 PlayReady DRM 信息。
目前,Apple iOS 设备必须对移动网络上超过 10 分钟的内容使用 HLS:
2.5.7 蜂窝网络上超过 10 分钟的视频流内容必须使用 HTTP Live Streaming 并包括基线 192 kbps HTTP Live 流。
(https://developer.apple.com/app-store/review/guidelines/)
因此,提供给 Apple 设备的流通常是 HLS,而 DASH 用于其他设备。
CMAF 允许将相同的分段媒体流同时用于 HLS 和 DASH,从而大大减少了这种影响,而只有“索引”或清单文件特定于每个协议。
对于加密的内容,它有点复杂。此时,FairPlay 使用不同于使用 AES-CTR 的 Widevine 和 PlayReady 的 AES 加密模式 AES CBC。这意味着您仍然需要两个媒体副本来提供加密的内容流。
随着 Widevine 和 PlayReady 现在宣布支持 AES-CBC 和 AES-CTR,这种情况正在发生变化,但是这需要一些时间才能推广到已部署的设备。
推荐阅读
- python - unable to do makemigrations command
- python - 如何在 plotly scattergeo 中自定义颜色条?
- docker - 将 Makefile 移植到 Jenkinsfile,但存在环境变量问题
- python - 如何用随机值刷新字典?
- sql - 有没有办法让我将这些行转换为 oracle 中的列?
- portable-executable - 如何计算导出表的内存虚拟地址的文件偏移量?
- javascript - 在 JavaScript 中,在没有默认参数的其他参数之前为某些参数定义具有默认参数的函数有什么意义?
- angular - 验证 ngx-admin Angular 项目中的表单布局
- node.js - 在上传multer之前检查存在的文件
- java - 为 React Native 客户端获取与服务器端 Java 代码类似的密文