상품 설명
本書では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対応
- 細かい言い回しの修正
모든 리뷰
더보기리뷰 등록
리뷰를 작성하려면 로그인이 필요합니다.
로그인하고 리뷰 쓰기