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,根据需要使用