ExoPlayer実践ガイド ~Coreライブラリ編~
- ダウンロード商品¥ 1,480

本書ではExoPlayerを実践的に使いこなすために、動画やストリーミング再生に関する基礎知識から、ExoPlayerで提供されている機能を網羅的に解説しています。 また、サンプルアプリも公開しているため、実際のコードを確認しながら読みすすめることができます。 https://github.com/takusemba/exoplayer-practice-guide-sample ExoPlayerのエクステンション機能に関しては、別書「ExoPlayer実践ガイド Extensionライブラリ編」を販売しています。 https://takusemba.booth.pm/items/2076635
筆者プロフィール
神戸大学(電気電子工学科)を卒業後、2017年4月にCyberAgent株式会社に就職。AbemaTV.Incで、主に動画再生周りを担当し、Androidアプリ開発に従事する。
目次
【はじめに】 本書について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 動作環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 サンプルコード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 お問い合わせ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 免責事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 【第1章 動画について知る】 1.1 動画とは? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2 コンテナフォーマット . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2.1 MPEG2-TS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2.2 MP4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3 コーデック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4 デコーダー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.5 Progressive 再生 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.6 Streming 再生 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.7 Adaptive Bitrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.8 HLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.9 MPEG-DASH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 【第2章 ExoPlayerについて知る】 2.1 ExoPlayer vs MediaPlayer . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2 ドキュメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2.1 Issue/PR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2.2 Release Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2.3 Blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.4 Code Lab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3 主要なコンポーネント . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3.1 DataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3.2 MediaSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3.3 TrackSelector . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.4 Renderer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.5 LoadControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3.6 BandwidthMeter . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4 Extension 機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.5 デモアプリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.5.1 Main デモアプリ . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.5.2 Cast デモアプリ . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.5.3 Surface デモアプリ . . . . . . . . . . . . . . . . . . . . . . . . 28 2.5.4 Gl デモアプリ . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 【第3章 ExoPlayerで動画再生】 3.1 動画再生 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.1.1 playWhenReady . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.1.2 playbackState . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.1.3 プレイヤーの解放 . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.2 MediaSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.2.1 ClippingMediaSource . . . . . . . . . . . . . . . . . . . . . . . 34 3.2.2 LoopingMediaSource . . . . . . . . . . . . . . . . . . . . . . . 34 3.2.3 ConcatenatingMediaSource . . . . . . . . . . . . . . . . . . . 35 3.3 イベント検知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.3.1 プレイヤーの状態検知 . . . . . . . . . . . . . . . . . . . . . . . 36 3.3.2 エラー検知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3.3 シーク検知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.3.4 その他の Listener . . . . . . . . . . . . . . . . . . . . . . . . . 37 【第4章 字幕】 4.1 字幕の実現方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.1.1 オープンキャプション . . . . . . . . . . . . . . . . . . . . . . . 39 4.1.2 クローズドキャプション . . . . . . . . . . . . . . . . . . . . . . 39 4.2 ExoPlayer での字幕表示方法 . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.1 TTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.2 WebVTT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 【第5章 メタデータ】 5.1 メタデータとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.2 TimedMetadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.2.1 メタデータの埋め込み . . . . . . . . . . . . . . . . . . . . . . . 46 5.2.2 メタデータの読み取り . . . . . . . . . . . . . . . . . . . . . . . 48 5.3 EMSG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.3.1 メタデータの埋め込み . . . . . . . . . . . . . . . . . . . . . . . 49 5.3.2 メタデータの読み取り . . . . . . . . . . . . . . . . . . . . . . . 52 【第6章 UIコンポーネント】 6.1 主な UI コンポーネント . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.1.1 PlayerView . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.1.2 PlayerControlView . . . . . . . . . . . . . . . . . . . . . . . . 54 6.1.3 StyledPlayerView . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.1.4 StyledPlayerControlView . . . . . . . . . . . . . . . . . . . . . 55 6.2 使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.3 UI のカスタマイズ方法 . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.3.1 Attribute を使用する . . . . . . . . . . . . . . . . . . . . . . . 56 6.3.2 Drawable を上書きする . . . . . . . . . . . . . . . . . . . . . . 57 6.3.3 layout ファイルを上書きする . . . . . . . . . . . . . . . . . . . 58 6.3.4 独自の layout ファイルを指定する . . . . . . . . . . . . . . . . 59 【第7章 暗号化コンテンツ】 7.1 暗号化の種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 7.2 モードの種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 7.3 暗号化してみる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 7.4 暗号化コンテンツを再生してみる . . . . . . . . . . . . . . . . . . . . . 64 7.5 KEY を漏れにくくする . . . . . . . . . . . . . . . . . . . . . . . . . . 65 【第8章 DRMコンテンツ】 8.1 DRM とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 8.2 DRM の仕組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 8.3 DRM の復号化の流れ . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.4 暗号化方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 8.5 Widevine のセキュリティレベル . . . . . . . . . . . . . . . . . . . . . 73 8.6 ClearKey について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 8.6.1 ClearKey コンテンツの作成 . . . . . . . . . . . . . . . . . . . . 75 8.6.2 ClearKey コンテンツの再生 . . . . . . . . . . . . . . . . . . . . 76 8.7 Widevine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 8.7.1 Widevine コンテンツの作成 . . . . . . . . . . . . . . . . . . . . 78 8.7.2 Widevine コンテンツの再生 . . . . . . . . . . . . . . . . . . . . 79 【第9章 カスタマイズ】 9.1 ExoPlayer のカスタマイズ性 . . . . . . . . . . . . . . . . . . . . . . . 81 9.2 MediaSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 9.3 TrackSelector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 9.4 Renderer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 9.5 LoadControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 9.6 BandwidthMeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 9.6.1 Session Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 9.6.2 Application Scope . . . . . . . . . . . . . . . . . . . . . . . . . 89 9.6.3 Lifetime Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 90 【第10章 Download再生】 10.1 主要なコンポーネント . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 10.2 コンテンツのダウンロード . . . . . . . . . . . . . . . . . . . . . . . . . 93 10.2.1 DownloadManager . . . . . . . . . . . . . . . . . . . . . . . . 93 10.2.2 ForegroundNotification . . . . . . . . . . . . . . . . . . . . . . 95 10.2.3 Scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 10.2.4 DownloadService . . . . . . . . . . . . . . . . . . . . . . . . . 96 10.2.5 ダウンロードの追加 . . . . . . . . . . . . . . . . . . . . . . . . 97 10.2.6 ダウンロードの削除 . . . . . . . . . . . . . . . . . . . . . . . . 98 10.2.7 ダウンロードの停止・再開 . . . . . . . . . . . . . . . . . . . . . 98 10.2.8 ダウンロードの中止 . . . . . . . . . . . . . . . . . . . . . . . . 98 10.3 ダウンロードコンテンツの再生 . . . . . . . . . . . . . . . . . . . . . . 99 10.4 Adaptive なコンテンツのダウンロード . . . . . . . . . . . . . . . . . . 99 10.5 DRM コンテンツのダウンロード . . . . . . . . . . . . . . . . . . . . . 101 10.5.1 オフラインライセンスのダウンロード . . . . . . . . . . . . . . . 102 10.5.2 オフラインライセンスの更新 . . . . . . . . . . . . . . . . . . . 103 【第11章 デバッグ】 11.1 再生時のデバッグ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 11.2 DebugTextViewHelper . . . . . . . . . . . . . . . . . . . . . . . . . . 105 11.3 TrackSelectionDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 11.4 EventLogger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 11.5 PlaybackStatsListener . . . . . . . . . . . . . . . . . . . . . . . . . . 108 11.6 Systrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 【さいごに】
動作環境
- Android Studio 4.1 - Kotlin 1.4.10 - ExoPlayer 2.12.1
アップデート履歴
[2020-05-16: v1.0.0] - 初回リリース [2020-10-27: v1.1.0] - v2.12.1対応 - 細かい言い回しの修正