本实验中 chrome 版本为 57.0.2987.98

01 chromium57 在 win11 版本中启用 widevine 功能

如下网址可以验证浏览器对 widevine的支持

https://shaka-player-demo.appspot.com/support.html

01.01 启用 enable_widevine 选项生成 widevine 相关动态库

在chromium 57 版本中,编译时秩序设置 enable_widevine=true 即可生成
widevinecdm.dllwidevinecdmadapter.dll 动态库

:: 生成57DebugX64工程
gn gen out\57DebugX64 --ide=vs2015 --winsdk=10.0.19041.0 --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=true is_debug=true is_official_build=false remove_webcore_debug_symbols=false google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" enable_nacl=false enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true enable_hevc_demuxing=true enable_webrtc=true rtc_use_h264=true rtc_use_lto=true use_openh264=true enable_widevine=true media_use_libvpx=true "
:: 编译DebugX64版本
ninja -C out\57DebugX64 chrome:: 生成 57ReleaseX64 工程
gn gen out\57ReleaseX64 --ide=vs2015 --winsdk=10.0.19041.0 --args="target_os=\"win\" target_cpu=\"x64\" is_component_build=false is_debug=false is_official_build=true remove_webcore_debug_symbols=true google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" enable_nacl=false enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true enable_hevc_demuxing=true enable_webrtc=true rtc_use_h264=true rtc_use_lto=true use_openh264=true enable_widevine=true media_use_libvpx=true "
:: 编译ReleaseX64版本,且编译mini_installer.exe
ninja -C out\57ReleaseX64 mini_installer

目录结构如下:

d:\git\chromium57\src\out\57ReleaseX64>tree WidevineCdm /F
D:\GIT\CHROMIUM57\SRC\OUT\57RELEASEX64\WIDEVINECDM
│  manifest.json
│
└─_platform_specific└─win_x64widevinecdm.dllwidevinecdm.dll.expwidevinecdm.dll.libwidevinecdm.dll.pdbwidevinecdmadapter.dllwidevinecdmadapter.dll.expwidevinecdmadapter.dll.libwidevinecdmadapter.dll.pdb


生成安装包的目录结构中多出了一个WidevineCdm插件目录结构:

d:\git\chromium57\src\out\57ReleaseX64>tree chrome-bin /F
D:\GIT\CHROMIUM57\SRC\OUT\57RELEASEX64\CHROME-BIN
│  chrome.exe
│
└─57.0.2987.98│  57.0.2987.98.manifest│  chrome.dll...│└─WidevineCdm│  manifest.json│└─_platform_specific└─win_x64widevinecdm.dllwidevinecdmadapter.dll

WidevineCdm/manifest.json 内容如下:

{"manifest_version": 2,"name": "WidevineCdm","description": "Widevine Content Decryption Module Stub","offline_enabled": false,"version": "0.0.0.000","minimum_chrome_version": "54.0.0.0","x-cdm-module-versions": "4","x-cdm-interface-versions": "8","x-cdm-host-versions": "8","x-cdm-codecs": "vp8,vp9.0,avc1","platforms": [{"os": "win","arch": "x86","sub_package_path": "_platform_specific/win_x86/"},{"os": "win","arch": "x64","sub_package_path": "_platform_specific/win_x64/"},{"os": "mac","arch": "x64","sub_package_path": "_platform_specific/mac_x64/"}]
}

02 chromium57 在 ubuntu16.06 版本中启用 widevine 功能

在chromium 57 版本中,编译时秩序设置 enable_widevine=true 即可生成
libwidevinecdm.solibwidevinecdmadapter.so 动态库

02.01 arm64 版本的 widevine 动态库

#./build/linux/sysroot_scripts/install-sysroot.py --arch=arm64
# 生成DebugArm64工程
gn gen out/DebugArm64 --ide=vs2015 --args="target_os=\"linux\" target_cpu=\"arm64\" is_component_build=true is_debug=true is_official_build=false remove_webcore_debug_symbols=false google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" enable_nacl=false enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true enable_hevc_demuxing=true enable_webrtc=true rtc_use_h264=true use_openh264=true enable_widevine=true media_use_libvpx=true remove_webcore_debug_symbols=false symbol_level=2"
# 编译DebugX64版本
ninja -C out/DebugArm64 chrome# 生成 ReleaseArm64 工程
gn gen out/ReleaseArm64 --ide=vs2015 --args="target_os=\"linux\" target_cpu=\"arm64\" is_component_build=false is_debug=false is_official_build=true remove_webcore_debug_symbols=true google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" enable_nacl=false enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true enable_hevc_demuxing=true enable_webrtc=true rtc_use_h264=true use_openh264=true enable_widevine=true media_use_libvpx=true remove_webcore_debug_symbols=true symbol_level=0"
# 编译ReleaseArm64版本
ninja -C out/ReleaseArm64 chrome

02.02 X64 版本的 widevine 动态库

# ./build/linux/sysroot_scripts/install-sysroot.py --arch=amd64
# 生成DebugX64工程
gn gen out/57DebugX64 --ide=vs2015 --args="target_os=\"linux\" target_cpu=\"x64\" is_component_build=true is_debug=true is_official_build=false remove_webcore_debug_symbols=false google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" enable_nacl=false enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true enable_hevc_demuxing=true enable_webrtc=true rtc_use_h264=true rtc_use_lto=true use_openh264=true enable_widevine=true media_use_libvpx=true remove_webcore_debug_symbols=false symbol_level=2 "
# 编译DebugX64版本
ninja -C out/57DebugX64 chrome# 生成 ReleaseX64 工程
gn gen out/57ReleaseX64 --ide=vs2015 --args="target_os=\"linux\" target_cpu=\"x64\" is_component_build=false is_debug=false is_official_build=true remove_webcore_debug_symbols=true google_api_key=false google_default_client_id=false google_default_client_secret=false proprietary_codecs=true media_use_ffmpeg=true ffmpeg_branding=\"Chrome\" enable_nacl=false enable_mse_mpeg2ts_stream_parser=true enable_hls_sample_aes=true enable_ac3_eac3_audio_demuxing=true enable_hevc_demuxing=true enable_webrtc=true rtc_use_h264=true rtc_use_lto=true use_openh264=true enable_widevine=true media_use_libvpx=true  remove_webcore_debug_symbols=true symbol_level=0 "
# 编译ReleaseX64版本,且编译chrome
ninja -C out/57ReleaseX64 chrome

03 linux 版本编译时,可能遇到的问题

上面的验证中使用chromium 57.0.2987.98 版本,ubuntu16.04 上面编译时遇到宏 WIDEVINE_CDM_VERSION_STRING 未定义错误,没详细研究,直接在 chrome/common/chrome_content_client.cc 中定义了 WIDEVINE_CDM_VERSION_STRING 字符串宏,即可编译成功。

# 有如下错误,加一个WIDEVINE_CDM_VERSION_STRING 字符串宏定义即可../../chrome/common/chrome_content_client.cc -o obj/chrome/common/common/chrome_content_client.o
../../chrome/common/chrome_content_client.cc:214:44: error: expected ')'base::StringPrintf("%s (version: " WIDEVINE_CDM_VERSION_STRING ")",^
../../chrome/common/chrome_content_client.cc:214:27: note: to match this '('base::StringPrintf("%s (version: " WIDEVINE_CDM_VERSION_STRING ")",^
../../chrome/common/chrome_content_client.cc:216:28: error: use of undeclared identifier 'WIDEVINE_CDM_VERSION_STRING'widevine_cdm.version = WIDEVINE_CDM_VERSION_STRING;^
../../chrome/common/chrome_content_client.cc:549:33: error: unknown type name 'WIDEVINE_CDM_VERSION_STRING'const base::Version version(WIDEVINE_CDM_VERSION_STRING);^
../../chrome/common/chrome_content_client.cc:549:32: error: parentheses were disambiguated as a function declaration [-Werror,-Wvexing-parse]const base::Version version(WIDEVINE_CDM_VERSION_STRING);^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../chrome/common/chrome_content_client.cc:549:33: note: add a pair of parentheses to declare a variableconst base::Version version(WIDEVINE_CDM_VERSION_STRING);

02.04 linux版本,可以编译 widevine_test_license_server

从代码来看,使用 is_chrome_branded=true 配置项,在linux上面,可以编译 widevine_test_license_server ,没有实际验证。

03 chromium57 版本 widevine 代码结构

A : widevine 功能属于多媒体功能,代码在 media/cdm 下。

B third_party\widevine 目录下主要是一些标准头文件

d:\git\chromium57\src\third_party\widevine>tree . /F
D:\GIT\CHROMIUM57\SRC\THIRD_PARTY\WIDEVINE
│  OWNERS
│
└─cdm│  BRANDING│  BUILD.gn│  DEPS│  README.chromium│  widevine.gni│  widevinecdmadapter.ver│  widevine_cdm_common.h│  widevine_cdm_version.h│├─android│      widevine_cdm_version.h│└─stubmanifest.jsonwidevine_cdm_version.h

05 一些测试资源

media\test\data\eme_player_js 目录下有些 widevine 相关的 js 可供参考

media\test\data\eme_and_get_display_media.html
media\test\data\eme_load_session_after_close_test.html
media\test\data\eme_player.html
media\test\data\eme_remove_session_test.html
media\test\data\encrypted_frame_size_change.html

media\test\data 目录下有很多 media 相关的测试资源。

https://bitmovin.com/demos/drm

https://shaka-player-demo.appspot.com/

06 查看widevine 组件

06.01 chrome://components/ 查看组件

使用 chrome://components/ 查看组件是否启用(加载)

06.02 navigator.plugins

在开发者工具(F12) 中使用命令 navigator.plugins 命令查看

07 ubuntu2204X64 chromium108 widevine 运行效果

ubuntu x64 下运行效果:
临时目录: ~/.config/chromium
测试用例:https://www.iqiyi.com/v_19rro5rids.html

soft@ubuntu220401d:~/.config/chromium/WidevineCdm$ tree
.
├── 4.10.2557.0
│   ├── LICENSE
│   ├── manifest.fingerprint
│   ├── manifest.json
│   ├── _metadata
│   │   └── verified_contents.json
│   └── _platform_specific
│       └── linux_x64
│           └── libwidevinecdm.so
└── latest-component-updated-widevine-cdm

https://shaka-player-demo.appspot.com/support.html

chromium 50 chromium57 版本编译启用 widevine 功能相关推荐

  1. Fedora 23及以后版本中启用fastestmirror功能

    Fedora从22版本开始使用新版的DNF软件包在线升级管理器,替代了原来的YUM.DNF是YUM的一个分支并重新经过改写,支持Python 3而且在软件包依赖性处理.下载安装验证等事务处理方面性能更 ...

  2. chromium android分析,Chromium Android工程迁移编译过程

    本文从Chromium编译的中间产物入手深入分析.学习Chromium Android版本的工程化定制流程.初始工作依赖于Chromium的ninja.GYP构建系统,在构建完成后基于编译中间产物,迁 ...

  3. IDEA报错解决:Error:(33, 35) java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    晚上在用IDEA的时候遇到了报错: Error:(33, 35) java: -source 7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式) ...

  4. java: -source 1.6 中不支持 diamond 运算符, (请使用 -source 7 或更高版本以启用 diamond 运算符)

    正在调的项目,突然编译爆红,提示为:java: -source 1.6 中不支持 diamond 运算符, (请使用 -source 7 或更高版本以启用 diamond 运算符),文件为:biz 改 ...

  5. 索尼美能达50微-版本区别及实拍测评(sony/minolta)50 f2.8 macro

    索尼美能达50微-版本区别及实拍测评(sony/minolta)50 f2.8 macro http://www.360doc.com/content/13/0816/15/187781_307594 ...

  6. 15支持哪些数据库版本 tfs_版本和支持的功能 - SQL Server 2016 | Microsoft Docs

    SQL Server 2016 的各版本和支持的功能Editions and supported features of SQL Server 2016 07/22/2020 本文内容 适用于:App ...

  7. source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符) 问题解决

    在java项目开发中出现language level错误,可能会导致一些代码编译错误,适当做相应调整即可. 对应错误标识为: ource 1.5 中不支持 diamond 运算符 (请使用 -sour ...

  8. Idea报错 -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

    一. Idea 在启动项目的时候报错: Error:(190, 51) java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamo ...

  9. Apache使用mod_deflate模块启用gzip功能

    Apache使用mod_deflate模块启用gzip功能 检查你的网站是否启用了gzip,用chrome打开网站比如http://www.techbrood.com 选中一个请求,查看Respons ...

最新文章

  1. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
  2. mysql 速度优化
  3. 【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )
  4. mongodb 群集图_群集和重叠条形图
  5. 凌乱的yyy(洛谷-P1803)
  6. 利用Excel VBA SQL做特殊文件浏览器
  7. 一步一步搭建oracle 11gR2 rac+dg之环境准备(二)【转】
  8. 「CJOJ2723」Reserve
  9. C语言单链表的应用,单链表应用
  10. 点击更多显示更多内容
  11. 山东理工大学ACM平台题答案关于C语言 1181 C语言实验——最小公倍数和最大公约数...
  12. Windows安装git图文教程
  13. WebView加载失败或网络异常时,替换WebView的错误界面;
  14. aspen压缩因子_Aspen物性参数中英文对照
  15. Mac应用程序无法打开提示不明开发者或文件损坏的处理方法
  16. 第五章:MySQL主从复制
  17. python读取合并单元格并拆分合并单元格写出
  18. 一本正经的经验帖——如何使用FDM 3D打印机进行批量化生产
  19. python文件写入utf-8_关于utf 8:用Python写入UTF-8文件
  20. uniapp应用和页面生命周期

热门文章

  1. USTC算法设计与分析-总结
  2. SPRINGBOOT中如何运用JPA,简单例子
  3. vp230引脚功能_SN65HVD230真正中文资料_应用必备
  4. 2023最新全开源CCPROXY卡密管理系统/用户在线管理Socket通讯
  5. HTML页面每次打开的时候都清除页面缓存
  6. cad快速看图软件免费版(手机在线cad快速看图)
  7. 手把手教你如何找到属于你自己的阿里云镜像加速器
  8. Linux服务器上监控网络带宽工具大全
  9. 【编译原理】学习笔记以及课程设计
  10. 统计计算方法上机考试