7.9 KiB
licensedManifest: Widevine L1 vs L3 比較
Device: Pixel 4a (5G) / bramble / Android 14
App: Netflix 9.57.0
Endpoint: https://android14.prod.ftl.netflix.com/nq/androidui/samurai/~9.0.0/api
URL: /licensedManifest
概要
同一デバイス (Pixel 4a) で、Widevine L1 (TEE) と L3 (ソフトウェア) の licensedManifest リクエストを比較。 リクエスト構造は同一だが、profiles と challenge の内容が異なる。
リクエスト共通部分
以下のフィールドは L1/L3 で完全に同一:
| フィールド | 値 |
|---|---|
| version | 2 |
| url | /licensedManifest |
| languages | ["en-JP"] |
| method | licensedManifest |
| flavor | PRE_FETCH |
| drmType | widevine |
| manifestVersion | v2 |
| osName | android |
| osVersion | 34 |
| application | samurai |
| clientVersion | 9.57.0 |
| uiVersion | 9.57.0 |
| uiPlatform | android |
| player | streaming |
| hardware | lito |
| licenseType | limited |
| cellularCap | auto |
| netType | wifi |
| supportsWatermark | true |
| supportsPreReleasePin | true |
| supportsAdBreakHydration | true |
| liveAdsCapability | dynamic |
| supportsUnequalizedDownloadables | true |
| requestEligibleABTests | true |
| useBetterTextUrls | true |
| useHttpsStreams | true |
| contentPlaygraph | ["v2"] |
| supportsAuxiliaryManifestDeduplication | true |
| liveMetadataFormat | INDEXED_SEGMENT_TEMPLATE |
| maxSupportedLanguages | -1 |
| supportsPartialHydration | true |
| prefersVerticalVideo | false |
| supportsVideoTrackSwitching | false |
| supportsNetflixMediaEvents | true |
差分1: Profiles
L1 (36 profiles)
HEVC HDR + 高解像度H.264 + VP9を含む全プロファイル:
none-h264mpl30-dash
playready-h264mpl30-dash
none-h264mpl31-dash ← L3にはない
playready-h264mpl31-dash ← L3にはない
none-h264mpl40-dash ← L3にはない
playready-h264mpl40-dash ← L3にはない
hevc-hdr-main10-L30-dash-cenc-prk ← L3にはない (HEVC HDR)
hevc-hdr-main10-L30-dash-cenc-prk-do ← L3にはない
hevc-hdr-main10-L31-dash-cenc-prk ← L3にはない
hevc-hdr-main10-L31-dash-cenc-prk-do ← L3にはない
hevc-hdr-main10-L40-dash-cenc-prk ← L3にはない
hevc-hdr-main10-L40-dash-cenc-prk-do ← L3にはない
hevc-hdr-main10-L41-dash-cenc-prk ← L3にはない
hevc-hdr-main10-L41-dash-cenc-prk-do ← L3にはない
hevc-hdr-main10-L30-dash-cenc-live ← L3にはない
hevc-hdr-main10-L31-dash-cenc-live ← L3にはない
hevc-hdr-main10-L40-dash-cenc-live ← L3にはない
hevc-hdr-main10-L41-dash-cenc-live ← L3にはない
iso_23001_18-dash-live
playready-h264hpl22-dash
h264hpl22-dash-playready-live
playready-h264hpl30-dash
h264hpl30-dash-playready-live
playready-h264hpl31-dash ← L3にはない
h264hpl31-dash-playready-live ← L3にはない
playready-h264hpl40-dash ← L3にはない
h264hpl40-dash-playready-live ← L3にはない
vp9-profile0-L21-dash-cenc
vp9-profile0-L30-dash-cenc
vp9-profile0-L31-dash-cenc ← L3にはない
vp9-profile0-L40-dash-cenc ← L3にはない
heaac-2-dash
xheaac-dash
imsc1.1
nflx-cmisc
BIF320
L3 (14 profiles)
基本的なコーデックのみ。HEVC HDR なし、高解像度 H.264/VP9 なし:
none-h264mpl30-dash
playready-h264mpl30-dash
iso_23001_18-dash-live
playready-h264hpl22-dash
h264hpl22-dash-playready-live
playready-h264hpl30-dash
h264hpl30-dash-playready-live
vp9-profile0-L21-dash-cenc
vp9-profile0-L30-dash-cenc
heaac-2-dash
xheaac-dash
imsc1.1
nflx-cmisc
BIF320
Profile 差分まとめ
| カテゴリ | L1 | L3 |
|---|---|---|
| H.264 Main Profile | L30, L31, L40 | L30のみ |
| H.264 High Profile | L22, L30, L31, L40 | L22, L30のみ |
| HEVC HDR Main10 | L30, L31, L40, L41 (prk, prk-do, live) | なし |
| VP9 Profile0 | L21, L30, L31, L40 | L21, L30のみ |
| Audio/Subtitle/Other | heaac-2, xheaac, imsc1.1, nflx-cmisc, BIF320 | 同一 |
| 合計 | 36 | 14 |
L3 では高解像度ビデオ (L31以上) と HEVC HDR が全て除外される。 H.264基準では最大L30 (720p) だが、VP9 L30 (最大1080p) は含まれる。 実際に返却されるストリーム品質はサーバー側の manifest レスポンスによる。
差分2: Challenge (Widevine License Request)
Challenge はデバイスの Widevine CDM が生成する protobuf バイナリ (Base64エンコード)。 デバイス証明書と OEMCrypto 情報を含む。
L1 Challenge 内の Client Identification
application_name: com.netflix.mediaclient
origin: (empty)
package_certificate_hash_bytes: KAvwDZh6ZPI16jT59NO7L5XUj7ME5e6KKx0eXz0Zz9A=
company_name: Google
model_name: Pixel 4a (5G)
architecture_name: arm64-v8a
device_name: bramble
product_name: bramble
build_info: google/bramble/bramble:14/UP1A.231005.007/10754064:user/release-keys
widevine_cdm_version: 17.0.0
oem_crypto_security_patch_level: 0
oem_crypto_build_information: Build Information: API_Version: 16.3 LibOEMCrypto_Version: 1.56 TA_Version: 1.1382
L3 Challenge 内の Client Identification
application_name: com.netflix.mediaclient
origin: (empty)
package_certificate_hash_bytes: KAvwDZh6ZPI16jT59NO7L5XUj7ME5e6KKx0eXz0Zz9A=
company_name: Google
model_name: Pixel 4a (5G)
architecture_name: arm64-v8a
device_name: bramble
product_name: bramble
build_info: google/bramble/bramble:14/UP1A.231005.007/10754064:user/release-keys
widevine_cdm_version: 17.0.0
oem_crypto_security_patch_level: 0
oem_crypto_build_information: OEMCrypto Level3 Code May 20 2022 21:36:54
Challenge 差分まとめ
| フィールド | L1 | L3 |
|---|---|---|
| oem_crypto_build_information | Build Information: API_Version: 16.3 LibOEMCrypto_Version: 1.56 TA_Version: 1.1382 |
OEMCrypto Level3 Code May 20 2022 21:36:54 |
| RSA公開鍵 | 異なる (TEE内の鍵) | 異なる (ソフトウェア鍵) |
| DRM Session Provider Certificate | 異なる | 異なる |
| challengeBase64 長さ | ~3456文字 | ~3192文字 |
L1 の challenge は TEE (Trusted Execution Environment) 内で生成され、TA (Trusted Application) バージョン情報を含む。 L3 の challenge はソフトウェアで生成され、OEMCrypto Level3 のビルド日時を含む。
差分3: viewableId
両方とも params 配列に3つの viewableId を含むが、viewableId 自体は同一:
| params[n] | viewableId |
|---|---|
| params[0] | 81639724 |
| params[1] | 81756595 |
| params[2] | 80243261 |
Cookies
MSL リクエストは gsid cookie で認証される。以下の cookie が使用される:
| Cookie | 説明 |
|---|---|
nfvdid |
Netflix Virtual Device ID |
flwssn |
Flow Session ID |
NetflixId |
メイン認証 cookie |
SecureNetflixId |
セキュア認証 cookie (HMAC付き) |
gsid |
Global Session ID (MSLリクエスト用) |
実際のcookie値は cookies.txt を参照。
Headers
MSL リクエストは Cronet HTTP クライアント経由で送信される。 主要ヘッダー:
| Header | 値 |
|---|---|
| Content-Type | application/json |
| User-Agent | Dalvik/2.1.0 (Linux; U; Android 14; Pixel 4a (5G) Build/UP1A.231005.007) |
まとめ
| 項目 | L1 (TEE) | L3 (Software) |
|---|---|---|
| 最大画質 | 4K HDR | 720p (H.264) / 1080p (VP9) ※要レスポンス確認 |
| Profiles数 | 36 | 14 |
| HEVC HDR | あり (L30-L41) | なし |
| H.264 最大Level | L40 (1080p+) | L30 (720p) |
| VP9 最大Level | L40 (4K) | L30 (1080p) |
| OEMCrypto | TEE (TA_Version: 1.1382) | Software (Level3 Code) |
| セキュリティ | ハードウェア保護 | ソフトウェアのみ |
| リクエスト構造 | 同一 | 同一 |
| Cookie | 同一 | 同一 |
L1/L3 の違いは challenge と profiles のみ。リクエスト構造、cookie、ヘッダーは完全に同一。 Netflix サーバーは challenge 内の OEMCrypto 情報からセキュリティレベルを判定し、 返却するマニフェスト (利用可能なストリーム品質) を決定する。