日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

chromium 50 chromium57 版本编译启用 widevine 功能

發布時間:2023/12/3 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 chromium 50 chromium57 版本编译启用 widevine 功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本實驗中 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 功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。