🦔
MP4再生
概要
MP4をAndroidで行うための実装方法を調査
環境
Android | 10 |
---|---|
AndroidStudio | Bumblebee |
macOS | 12.3 |
minSdk | 28 |
targetSdk | 31 |
検討
AndroidではMediaPlayerとExoPlayerの2種類の方法がある。
※MediaPlayerとExoPlayerの違いの詳細は参考資料
概要
-
MediaPlayer
- Android 1.0の頃からあるライブラリ
- Androidに保存されている動画・音声、またはRAWリソースファイルの再生ができる。
-
ExoPlayer
- Googleが提供しているメディア再生用のOSSライブラリ
- Androidに保存されている動画・音声、またはRAWリソースファイルの再生ができる。
- メディア配信(DASH・HLS・SmoothStreaming)・プレイリスト再生・字幕表示などもサポート
サポートデバイス
Android Min Version | API Min Level | 資料 | |
---|---|---|---|
MediaPlayer | 1.0 | 1 | |
ExoPlayer | 4.1 | 16 | https://exoplayer.dev/supported-devices.html |
サポート機能
機能 | ストリーミング配信 | プレイリスト再生 | |
---|---|---|---|
MediaPlayer | ・音声・映像再生(AAC・MP3・FLAC・MP4・WebM)・ストリーミング再生(RTSP・HTTP Progressive Streaming)・DRMコンテンツ再生・画像表示(BMP・GIF・JPEG・PNG) | RTSP(レガシー)を再生できる | 未対応 |
ExoPlayer | ・音声・映像再生(AAC・MP3・FLAC・MP4・WebM)・ストリーミング再生(DASH・HLS・SmoothStreaming)・DRMコンテンツ再生・プレイリスト再生・UIコンポーネント | DASH・HLS(モダン)を再生できる | 対応 |
プレイリスト再生
-
MediaPlayer
- 映像切り替え時にバッファリングが発生してしまうので映像が途切れる
- 映像切り替え時にバッファリングが発生してしまうので映像が途切れる
-
ExoPlayer
- 映像切り替え時に次の動画を切り替える前にバッファリングしてくれるので映像を途切れさせない
- 映像切り替え時に次の動画を切り替える前にバッファリングしてくれるので映像を途切れさせない
結果
上記の検討を踏まえて、現状複数メディアを操作しない(MP4のみ?)のでMediaPlayerで実装を進める。
MediaPlayer
-
使用するもの
- MediaPlayer
- 音声と動画の再生API
- AudioManager
- デバイスの音声ソースと音声出力管理
- MediaPlayer
-
マニフェストの宣言(AndroidManifest.xml)
- インターネット権限
<uses-permission android:name="android.permission.INTERNET" />
- wake lock 権限
- プレーヤー アプリで画面が暗くならないようする
- プロセッサをスリープ状態にしないようにする
-
[MediaPlayer.setScreenOnWhilePlaying()](https://developer.android.com/reference/android/media/MediaPlayer#setScreenOnWhilePlaying(boolean))
[MediaPlayer.setWakeMode()](https://developer.android.com/reference/android/media/MediaPlayer#setWakeMode(android.content.Context,%20int))
等を使用するときに記述が必要
<uses-permission android:name="android.permission.WAKE_LOCK" />
-
レイアウト作成
- VideoView or SurfaceView
- VideoViewはSurfaceViewを継承している
- VideoView = SurfaceView + MediaPlayerのようなイメージ
- SurfaceView + MediaPlayerの利点として、カスタムできる。
- VideoView or SurfaceView
-
MediaPlayer の使用
- サポートメディア
- ローカルリソース
- コンテンツ リゾルバから取得できるような内部 URI
- 外部 URL(ストリーミング)
- サポートメディア
-
サービス内での MediaPlayer の使用
参考資料
MediaPlayer の概要 | Android デベロッパー | Android Developers
Discussion