OculusQuestでWidevine L1コンテンツの再生をする


概要

OculusQuestではWidevine L1コンテンツの再生が可能なため、試してみました。

はじめに

NTTドコモ移動機開発部の蜂谷雄介です。
普段は動画プレイヤー関連の開発を担当しています。

日本での5Gサービスが正式に始まりました。
5Gを活用したサービスとして、VR関連のサービスも一段と盛り上がってきています。
そんな中、Fortnite上で米津玄師さんのライブがありました。
多くの人がVR空間上でのライブという新しい体験で盛り上がりました。
今後、VR空間での動画再生がよりいっそう求められるようになるでしょう。

一方で、コンテンツ保護の観点からすると、動画をDRM(Digital Rights Management)で保護する必要があります。
本記事では、VR空間上(Unity)でのDRMコンテンツ(Widevine)の再生について検証した内容を記載します。

Unityでの動画再生について

Unityで動画再生を行う場合、ただ再生するだけでよければ、VideoPlayerが存在しています。
https://docs.unity3d.com/ja/2020.2/Manual/class-VideoPlayer.html
※Unityの最新バージョンのドキュメントへのリンクです。

クリップとして保存した動画を再生できますし、URLで特定のリンクの動画も再生できます。

Widevineで再生する

コンテンツにDRMをかけたい場合、VideoPlayerだけでは再生できません。
有料のプラグインもありますが、OculusQuestの場合は、OculusIntegrationを活用できます。
https://developer.oculus.com/blog/oculus-developer-release-notes-october-14th-2019/

OVROverlay now supports rendering L1 Widevine DRM protected content. See the updated OVROverlay guide for more information.

というわけで、試してみましょう。

まずは、下記の公式ガイドにしたがって各種設定をしていきます。
https://developer.oculus.com/documentation/unity/unity-import/

・新規プロジェクトを作り、OculusIntegrationをインポートします。
・PlayerSettingなどの設定をOculusで実行できる様に変更します。
・再生時にはAndroidネイティブのプレイヤーを使用するため、
 「Oculus」→「Video」→「Enable Native Android Video Player」を選択し、
 ネイティブのプレイヤーで再生できるようにしておきます。
・再起動後、下記のシーンを開き、OculusQuest上で実行します。
 Assets/Oculus/SampleFramework/Usage/WidevineVideo.unity

デフォルトでは、googleのテスト用コンテンツとしてWidevineコンテンツが設定されています。

[URL] https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears_hd.mpd
[License URL] https://proxy.uat.widevine.com/proxy?provider=widevine_test

Widevine L1コンテンツがOculusQuest上で再生できました!
※本当はスクリーンショットを載せたかったのですが、DRMがかかっているため真っ黒になりました。

内部の仕組み

DRMにはHardware層で暗号化を解除する方法とSoftware層で暗号化を解除する方法があります。
Widevineでは、
Widevine L1→Hardware層で暗号化を解除
Widevine L3→Software層で暗号化を解除
となっています。

Unityを使って動画再生を行う場合、Unityによる描画ではSoftware層での暗号化解除しかできず、基本的にはWidevine L3しか使用できません。
そこでOVROverlayというOculusの仕組みが関係してきます。

Oculus公式ドキュメント OVROverlayについて
https://developer.oculus.com/documentation/unity/unity-ovroverlay/

詳細は読んでいただくとして、、、ここでは要約した内容を説明します。

UnityによるOculusのレンダリングでは、シーンに存在するほとんどのものはアイバッファと呼ばれるレイヤーにレンダリングされます。これはUnityによるレンダリングと思っていただければ想像に難くないと思います。
動画を描画するためのテクスチャーなどがアイバッファのレイヤーに存在する場合、
Widevine L3による暗号化の解除しかできません。

OVROverlayでは、このアイバッファの前方にコンポジターレイヤーと呼ばれる別の層を使用して描画することができます。
※下の図ではOverlayだけでなく、Underlayも使用しています。Underlayの場合はアイバッファの一部を透過設定にします。

このコンポジターレイヤーでは、外部サーフェイスを使用することができます
つまり、AndroidのSurfaceを使用して直接レンダリングができる、ということです。
AndroidネイティブのSurfaceを使用できるため、
Hardwareによって暗号化を解除し、Widevine L1コンテンツを再生することができます。

サンプルコードの中身をみると、JNI経由でNativeVideoPlayer(中身はGoogleのOSSであるExoplayer)を呼び出しており、OculusIntegrationの機能によって生成したネイティブのsurfaceをセットすることで再生を実現しています。

おわりに

OculusQuest上でのWidevine L1コンテンツの再生を検証しました。
(サンプルを動かしただけですが)
OculusQuest2も発売されたことですし、先のFortniteでのライブのようにVR空間でのライブや動画視聴サービスに期待が高まりますね!