当前位置: 首页 > news >正文

Qt WebEngine播放DRM音视频

Qt WebEngine播放DRM受保护视频,前提是Qt WebEngine开启音视频编码器,能够支持网页上普通视频的播放。开启音视频编码器需要自己编译源码,这里不做介绍。

什么是DRM音视频

DRM视频是指数字版权管理(Digital Rights Management)视频,它是通过技术手段对视频内容的使用和传播进行控制和限制的一种方式。通过DRM技术,视频内容提供商可以对视频文件进行加密,限制用户在特定设备上播放或复制视频内容,以保护视频内容的版权和收益。常见的DRM视频包括Netflix和HBO等在线视频平台上的付费内容。

比如Spotify、Netflix音视频都是使用DRM技术进行加密,播放时需使用谷歌提供的widevinecdm库进行解密播放。

浏览器不支持DRM播放时,AppleMusic点击播放就会报错

Qt WebEngine配置支持DRM音视频

我们直接来看官方的说明

官方提供的方法需要环境变量配置widevinecdm库路径,这样就能支持DRM受保护视频的播放。

上面的方式是启动程序的时候设置环境变量,指定widevinecdm库路径。实际使用中,win下只要把widevinecdm库和程序放在同级目录下,程序是能够找到的。

如果实在要指定,可在代码中添加,在Application前设置环境变量即可,下面的代码是Mac的,win的需要做些调整,原理就是拿到第一个启动参数,第一个启动参数是程序的启动路径,根据这个路径找到widevinecdm库路径即可。

if(argc > 0) {char *appPath = argv[0];QString appRunPath(const_cast<const char *>(appPath));auto list = appRunPath.split("/");list.removeLast();QString widevinePath = "\"--widevine-path=" + list.join("/") + "/../../../../Frameworks/libwidevinecdm.dylib\"";qDebug() << __FUNCTION__ << "song" << "widevinePath:" << widevinePath;qputenv("QTWEBENGINE_CHROMIUM_FLAGS", widevinePath.toStdString().c_str());
}

widevinecdm库获取

由于Qt WebEngine也是谷歌内核,所以我们可以直接拿谷歌浏览器的widevinecdm库,理论上widevinecdm库要和浏览器内核版本对应,但目前来看使用谷歌浏览器的最新版本没发现有什么异常。

win下widevinecdm库路径:C:\Users\admin\AppData\Local\Google\Chrome\Application\127.0.6533.89\WidevineCdm\_platform_specific\win_x64

实在找不到可通过everything工具全局搜索,找个谷歌浏览器下的widevinecdm库就行

mac下widevinecdm库路径:

在谷歌浏览器安装目录下,分为arm64和x86_64,根据需要使用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 马尔科夫决策过程
  • Windows编译Boost需要注意的问题
  • C++面试基础算法的简要介绍
  • Java ExecutorService:你真的了解它吗?
  • 小程序支付(前端)
  • 自注意力和位置编码
  • 西部菱斑响尾蛇教你基础IO
  • 拉削基础知识——拉床的类型及特点
  • 自己履行很多的话语,依旧按照这个方式进行生活
  • 近期关于云服务器window server 2012屏蔽游戏加速器/IP加速器模拟IP连接限制策略
  • 基于python旅游推荐系统(源码+论文+部署讲解等)
  • OpenAI not returning a result?
  • 【WEB】ctfshow-萌新-web9-15
  • GO之基本语法
  • JavaScript 箭头函数
  • 【前端学习】-粗谈选择器
  • js ES6 求数组的交集,并集,还有差集
  • JSONP原理
  • Redis在Web项目中的应用与实践
  • scala基础语法(二)
  • Vue 重置组件到初始状态
  • 浮动相关
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 基于 Babel 的 npm 包最小化设置
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何解决微信端直接跳WAP端
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 首页查询功能的一次实现过程
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • #微信小程序(布局、渲染层基础知识)
  • (1)STL算法之遍历容器
  • (8)STL算法之替换
  • (第61天)多租户架构(CDB/PDB)
  • (回溯) LeetCode 46. 全排列
  • (四)软件性能测试
  • (原创)可支持最大高度的NestedScrollView
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net Core 中间件验签
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .sh
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [000-01-011].第2节:持久层方案的对比
  • [20161214]如何确定dbid.txt
  • [AIGC 大数据基础]hive浅谈
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Android]使用Git将项目提交到GitHub
  • [C][数据结构][树]详细讲解
  • [C++]spdlog学习
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [Day 8] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • [Design Pattern] 工厂方法模式