[Android] If the video does not play well using VideoView or ExoPlayer, check the video format.
background
I made a video playback function using VideoView
and ʻExoPlayer` on Android, but for some reason the video does not play well. ..
I can play it on that version or device without any problems, but for some reason it doesn’t play well on this version or device.
For some reason, blackness appears, the display is corrupted, playback fails and nothing is displayed.
In such a case, it is good to look at the log and doubt whether the implementation is suspicious, but I would like to introduce another approach.
Is the video supported on the Android platform?
Not all video formats are supported on Android.
There are some videos that cannot be played, such as mov files.
The following guidelines are available on the official website.
[Supported media formats | Android developer | Android Developers](https://developer.android.com/guide/topics/media/media-formats?hl=ja) |
It’s also important to check the guidelines to see if the video format is properly supported in the first place.
If you don’t do this, you will never know the cause and you will get stuck.
(It was quite tricky, such as the feeling of encounter and the occurrence of the phenomenon.)
How to check the video format
One way to check the video format is to use FFmpeg.
(You can also use Mediainfo)
To install it, just hit the following command with Homebrew.
brew install ffmpeg
The command to check the video format is as follows.
ffmpeg -i [Input file name]
For example, download the following video and check it.
https://bestvpn.org/html5demos/assets/dizzy.mp4
~ ffmpeg -i /Users/Hitoshi/Downloads/dizzy.mp4
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.62)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/Hitoshi/Downloads/dizzy.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isomavc1mp42
creation_time : 2009-10-25T14:18:33.000000Z
Duration: 00:00:25.00, start: 0.000000, bitrate: 510 kb/s
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 93 kb/s (default)
Metadata:
creation_time : 2009-10-25T14:18:33.000000Z
handler_name : (C) 2007 Google Inc. v08.13.2007.
Stream #0:1(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x360 [SAR 1:1 DAR 4:3], 413 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc (default)
Metadata:
creation_time : 2009-10-25T14:18:33.000000Z
handler_name : (C) 2007 Google Inc. v08.13.2007.
At least one output file must be specified
When you roughly unravel the inside, the voice first
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 93 kb/s (default)
Since the format is like “AAC-LC”, you can see that it is a format supported by Android.
Also, the video
Stream #0:1(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x360 [SAR 1:1 DAR 4:3], 413 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc (default)
Since the format is like “H.264 AVC Baseline Profile (BP)”, you can see that this is also a supported format.
You can also know the resolution and frame rate, so compare this information to determine if it is supported.
It may be a bit muddy, but you can isolate the problem with an approach to whether the video format was supported.
If it is not supported, the implementation seems to be okay, if it is supported, the implementation seems to be problematic, and so on.
Summary
When the video does not play well on Android, there is a possibility that the video format is not supported in some cases, and I briefly introduced how to check the video format using FFmpeg.
Reference URL
-Use MediaInfo on Mac command line –Qiita
-It can be done with FFmpeg! –Qiita