🦔

MP4再生

2024/06/01に公開

概要

MP4をAndroidで行うための実装方法を調査

環境

Android 10
AndroidStudio Bumblebee
macOS 12.3
minSdk 28
targetSdk 31

検討

AndroidではMediaPlayerExoPlayerの2種類の方法がある。

MediaPlayerとExoPlayerの違いの詳細は参考資料

概要

  • MediaPlayer
    • Android 1.0の頃からあるライブラリ
    • Androidに保存されている動画・音声、またはRAWリソースファイルの再生ができる。
  • ExoPlayer
    • Googleが提供しているメディア再生用のOSSライブラリ
    • Androidに保存されている動画・音声、またはRAWリソースファイルの再生ができる。
    • メディア配信(DASHHLSSmoothStreaming)・プレイリスト再生・字幕表示などもサポート

サポートデバイス

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
      • デバイスの音声ソースと音声出力管理
  • マニフェストの宣言(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の利点として、カスタムできる。
  • MediaPlayer の使用

    • サポートメディア
      • ローカルリソース
      • コンテンツ リゾルバから取得できるような内部 URI
      • 外部 URL(ストリーミング)
  • サービス内での MediaPlayer の使用

参考資料

MediaPlayer の概要 | Android デベロッパー | Android Developers

[Android]MediaPlayerとExoPlayerの違いをまとめる - Qiita

Discussion