2019-10-01 (Tue) [長年日記]

_ [android]普通の VideoView で普通の MP4 が再生できないとき

Android で動画再生させようと思って VideoView を使ったら、debug は大丈夫なのに release 版では「この動画を再生できません」(Can't play this video.) が表示されました。

という書き方でお分かりでしょうが、原因は build.gradle にありました。

 minifyEnabled true

を false にするだけでした。

permission を確認したり ExoPlayer に変更してみたりと、色々やったのに結局これだけでした。「一部の実機で動かない → 色々やってみる → うまくいかない → じゃあ USB で adb を見てみよう → あれ、動くじゃん」の流れは脱力しました。

ネットにあまり情報が無かったので、ここに書いておきます。

もっと丁寧にやるなら、proguard-rules.pro で

 -printusage deleted.txt

みたいに確認して、必要なものが消えていたら

 -keep class android.support.v4.media.** {*;}

のように指定して保持すれば良いみたいです。

あ、ちなみに ExoPlayer は便利ですが、終了を明示しないといけないのは単純な VideoView より面倒かな、と思いました。VideoView に setVideoURI 等をして setMediaController を付けただけの場合、listener からじゃないと中身の player が変数として出てこないほど勝手にやってくれるわけで、終了も activity 等と同時にやってくれます。一方で ExoPlayer は、ちゃんと stop して release しないと残るみたいです。activity の onStop に付けておきましたけど、onStop を通らないで死んだときは気にしなくても良いのか心配です。

追記

その後ほかのことをしていたら、なぜか再現できなくなったので、もしかすると manifest の中で

 android:extractNativeLibs="false"

にするだけで直る問題だったのかもしれません。


«前の日記(2019-08-14 (Wed)) 最新