4.3K Views
October 25, 22
スライド概要
アプリコンテンツの魅力を開拓するべく、アプリ内でストリーミング再生を行い、リアルイベントとアプリ内イベントのコラボレーションを行った事例を、
現在好評リリース中のアサルトリリィとシノアリスの事例からご紹介させていただきます。
Unityを使用したモバイルアプリでストリーミング再生を行うにあたって使用したプラグイン、開発中に起こった困ったこと、その解決方法のご紹介。
そして実際に実装したストリーミング再生を行い、リアルイベントの様子を配信した時のユーザーの反応や問題など、事例を交えてお話しさせていただきます。
こんな人におすすめ:
・ストリーミング再生のノウハウを知りたいエンジニア
・メディアミックスプロジェクトに携わっている方
・コンテンツの魅力発信の方法を模索中のプランナー
受講者が得られる知見:
・Unityアプリ内でストリーミング再生を実装する方法のノウハウ
・ストリーミング再生を使用したコンテンツの活用事例
・動画再生を行うにあたっての経験則、しくじりの知見
出演:
高田 美里 (株式会社ポケラボ)
--
初出: SYNC 2022 #UnitySYNC
https://events.unity3d.jp/sync/
リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。
動画を使ってコンテンツの魅力を伝える! ポケラボ流ストリーミング動画再生のメソッド © POKELABO, INC. 1
本講演で紹介すること メディアミックスプロジェクトにて、 リアルイベントとアプリ内をストリーミング再生を使用して繋げた事例の紹介 ストリーミング再生時に使用した動画再生Unityアセットの紹介 導入時の懸念事項、対処方法 動画コンテンツのセキュリティ担保のため独自に実装したこと 実装中の気づき © POKELABO, INC. 2
講演者紹介 高田 美里(たかだ みさと) 役職 クライアントエンジニア ポケラボ歴 約2年半 Unity歴 業務で6年 © POKELABO, INC. 3
ポケラボのアプリについて アサルトリリィLastBullet SINoALICE ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT © 2017-2022 SQUARE ENIX CO., LTD. All Rights Reserved. © POKELABO, INC. 4
実際の活用事例の具体例紹介 ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT 舞台配信のアプリ内配信などで使用 © POKELABO, INC. 5
ユーザーの反応(配信情報公開後) アプリをパッドにも DLして観よう すごい! 忘れずに観ます! 高田さんに聞く ありがとうございます ありがとうございます ありがとうございます! フルで観られるなんて! © POKELABO, INC. 6
長めの動画をアプリ内で再生するときの悩み 通信量多い、、 読み込みに時間かかる、、 重い、、 ロードを短縮したい、、 キャプチャされたくない、、 © POKELABO, INC. 7
こんな時こそストリーミング再生を! ストリーミング再生がおすすめです! © POKELABO, INC. 8
ポケラボのアプリの動画再生方式 ポケラボのアプリに入っている動画再生方式 ストリーミング方式 ダウンロード方式 動画ファイルを全てDLしてから 再生させるタイプ 動画ファイルを細かく分けて DL、順番に再生していく →再生する分だけ通信量が発生 再生は割と簡単 再生するたび通信が発生する 何度も再生する 必要のある動画向け DL方式よりセキュリティは高い © POKELABO, INC. 9
よくみるストリーミング再生のセキュリティ 動画が見えない キャプチャ開始 画面キャプチャ中 通常再生中 黒い画面になる キャプチャ自体ができない 問題なく動画が再生される © POKELABO, INC. 10
ストリーミングでキャプチャを防止する方法 ストリーミング動画のキャプチャ防止策は2つ挙げられる DRM方式 自作する方式 セキュリティレベル高い コスト高い アプリ側だけで完結する ユーザーの良心に任せられる © POKELABO, INC. 11
DRM方式とは?? Digital Rights Management の略 コンテンツファイル DRMサーバー 端末で再生 暗号化解除 暗号化! セキュリティ抜群だけど導入ハードルが高い。 コンテンツを暗号化するサーバーとDRMに対応している動画再生ソフトが必要。 © POKELABO, INC. 12
ストリーミングでキャプチャを防止する方法 今回は自作方式にて ポケラボで行ったことのある 実装事例を実装方法とともに ご紹介します。 自作する方式 アプリ側だけで完結する ユーザーの良心に任せられる ※プロダクトが求めるセキュリティレベルによって選定する必要がある © POKELABO, INC. 13
自作キャプチャ防止策を行っている時に使用している動画再生プラグイン EasyMovieTexture AVPro Video ▼公式ドキュメント ※すでにアセットストアから削除済み https://www.renderheads.com/content/docs/ AVProVideo/articles/intro.html 「HLS対応をしているプラグイン」基準で調査 上記2つが候補として残った。 © POKELABO, INC. 14
アセット選定のポイント App Store Review ガイドラインに従い、 10分以上のビデオストリーミングコンテンツには HLSを使用する必要があった。 →HLSを使用したUnityAssetに絞って選定開始 ! =HLS https://developer.apple.com/jp/app-store/review/guidelines/#performance © POKELABO, INC. 15
2020年当時のストリーミング再生実装について 選定した2つのプラグインを比較した時、 動画再生時のUIなどがより充実しており、 かつUnityEditorでも動作したAVPro Videoをメインで使用する と当初は考えていた ? 諸々アプリ内で悩みどころが発生 © POKELABO, INC. 16
(当時の)悩みどころ AVPro Videoで発生した問題 アプリのiOS下限に対応していない (AVProVideoの最低保証はiOS10から) 一部でEasyMovieTextureを使用する方針に変更 © POKELABO, INC. 17
自作形式を行う方法 Unityネイティブプラグインで実装を行った Windows /iOS /Androidで設定方法が異なるので それぞれ注意点込みでご紹介していきます Unityネイティブプラグインとは、 Unityからプラットフォーム固有の機能を呼び出せるようにしたものです ▼Unityネイティブプラグインのリファレンス https://docs.unity3d.com/ja/2018.4/Manual/NativePlugins.html © POKELABO, INC. 18
キャプチャ防止ネイティブ側処理:Windows SetWindowDisplayAffinity(GetActiveWindow(), WDA_MONITOR); WindowsAPIの”WDA̲MONITOR”を設定すると キャプチャできなくなる。 (正確にはメインモニタ以外に描画を行わなくなる) 公式リファレンス:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowdisplayaffinity © POKELABO, INC. 19
キャプチャ検出ネイティブ側処理/iOS [UIScreen mainScreen].isCaptured; UIScreenCapturedDidChangeNotification isCapturedで今キャプチャを行っているかの検知を、 UIScreenCapturedDidChangeNotificationでキャプチャのス テータスが変わったかどうかを検知することができる 公式リファレンス:https://developer.apple.com/documentation/uikit/uiscreencaptureddidchangenotification © POKELABO, INC. 20
キャプチャ防止ネイティブ側処理:Android WindowManager.LayoutParams.FLAG_SECURE このフラグが設定されているウィンドウには、 セキュリティ保護が必要なコンテンツがあることを端末側に 設定できる。この設定がシーンにされている場合、キャプチャ などを行ってもAndroid端末側で黒塗り状態にしてくれる。 公式リファレンス:https://developer.android.com/reference/android/view/Display#FLAG̲SECURE © POKELABO, INC. 21
キャプチャ防止機能:クライアント側処理
#if UNITY_ANDROID
public static void SetCaptureProtect(bool enable)
{
// Android側のプラグイン呼び出し
}
#elif UNITY_STANDALONE_WIN
[System.Runtime.InteropServices.DllImport("ScreenshotProtect")]
public static extern void SetCaptureProtect(bool enable); // Windows側のプラグイン呼び出し
#elif !UNITY_EDITOR && UNITY_IOS
public static void SetCaptureProtect(bool enable)
{
// iOS側のプラグイン呼び出し
}
#endif
呼び出し名を各OSで統一すれば、
Unityクライアント側は端末の機種を気にせず
実装することができる。
© POKELABO, INC.
22
クライアント側で行うこと キャプチャを検知した時の処理 キャプチャはご遠慮ください! よくある動画画面を 黒く塗りつぶして 動画自体をキャプチャ中見れ ないようにしてもよし 画面に注意喚起ポップアップ を出してユーザーに理解を 求めるのもよし © POKELABO, INC. どのような処理を行うか に決まりはないので、 自分のプロダクトに合った 見せ方をすることができる 23
まとめ 動画の再生方式は2パターンある ダウンロード方式 ストリーミング方式 長時間の動画再生時におすすめ ストリーミング再生時に気をつけること(動画再生プラグイン) HLS対応しているものを選ぶこと Appleのガイドラインに沿う必要があるため © POKELABO, INC. 24
まとめ ストリーミング再生のセキュリティについて DRM方式 コストが高いが最も高いセキュリティが担保できる 自作方式 ポケラボではUnityネイティブプラグインで実装 プロダクトが求めるセキュリティレベルによって選定するのが大事! © POKELABO, INC. 25
© POKELABO, INC.