Skip to content

Why Your Video Won't Play on Android: Containers, Codecs and Local Files

MP4 and MKV are containers, H.264 and AV1 are codecs, and the difference explains most playback failures. A practical guide to fixing them on Android.

Reign Creative Team7 min read

Key takeaways

  • MP4, MKV and MOV are containers — boxes that hold tracks. H.264, H.265, VP9 and AV1 are codecs — the way the picture inside is compressed. The file extension names the box, not the contents.
  • A file that plays sound with a black screen has almost always hit a video decoder your device does not have; a file that shows picture with no sound has hit an audio one.
  • Stuttering on a high-resolution file usually means the decode fell back to software, which is slower and drains the battery faster than a hardware decoder.
  • A device that decodes 8-bit video in a given codec may still fail on the 10-bit version of the same codec, because those are separate profiles with separate hardware support.
  • Purchases from streaming stores are DRM-protected and are meant to be played in the app that sold them, so a general-purpose local player will not open them.

A file plays perfectly on a laptop. The same file, copied to a phone, gives you thirty seconds of black screen with audio underneath it. Nothing is corrupt, the transfer worked, and re-downloading it will produce exactly the same result.

This happens because the thing people call a "video format" is actually two separate things, and only one of them is in the filename.

Containers and codecs

A container is the box. It holds a video track, one or more audio tracks, and usually subtitle and chapter tracks, plus the timing information that keeps them in sync. The file extension names the box.

A codec is how the contents were compressed. The video track inside the box was encoded by some particular method, and to play it back your device needs a matching decoder.

Containers Video codecs Audio codecs
MP4, MKV, MOV, M4V, WebM, 3GP, FLV, TS, M2TS H.264 (AVC), H.265 (HEVC), VP8, VP9, AV1 AAC, MP3, FLAC, Ogg (Vorbis/Opus)

The consequence is the whole point of this article: the extension tells you almost nothing about whether a file will play. Matroska — the .mkv container — is deliberately permissive about what it will carry, which is why it is popular for archival and also why "MKV doesn't work on my phone" is such a common complaint. The container is fine. Something inside it is not.

Two files can both be .mp4 and one plays while the other does not. That is not inconsistency. It is two different codecs in two identical-looking boxes.

Reading the failure

The way a file fails tells you where the problem is. Four signatures cover nearly everything.

Audio plays, screen is black

The container parsed and the audio decoded, so the file is structurally sound. The video codec, or a specific variant of it, has no decoder available.

The most common version of this in 2020s files is bit depth. H.265 and AV1 both come in 8-bit and 10-bit profiles, and a device can have hardware support for one and not the other. A phone that plays HEVC video happily will still show you a black rectangle for HEVC Main 10 content if its decoder does not cover that profile. The codec name is the same. The support is not.

Picture plays, no sound

Same story on the other track. The audio codec in the file is not one the device decodes — this comes up with less common surround formats and with audio codecs typically found in files prepared for home theatre systems rather than phones.

It plays, but stutters or drops frames

The decode is happening in software rather than on dedicated hardware.

Modern chipsets contain fixed-function decoders for specific codecs, and those are fast and power-efficient. When a codec is not covered by the hardware, playback can fall back to decoding on the CPU. That works for modest resolutions and falls apart at 4K, and it heats the device and drains the battery while it tries. Stuttering that gets worse the longer you watch is usually thermal throttling on a software decode.

Resolution and frame rate also carry their own hardware limits, expressed as codec levels. A device may decode a codec at 1080p and fail on the same codec at 4K60.

Nothing opens at all

Either the container itself is unsupported, or the file is genuinely damaged — an interrupted transfer, a truncated download, a card that was pulled mid-write. Check the file size against the source. Structural damage tends to produce an immediate failure rather than a partial one.

What Android itself provides

Android publishes a baseline of media formats that devices are expected to support, and manufacturers add to that baseline with whatever their chipset provides. Two useful anchors from the platform documentation:

  • AV1 decoding was added at the platform level in Android 10. Hardware AV1 decoders arrived in mobile silicon afterwards, so on many devices AV1 still runs in software, with the CPU and battery cost that implies. AV1 is the royalty-free codec developed by the Alliance for Open Media, and it is increasingly what web video is delivered in.
  • H.264 is the safe bet. It is the most broadly supported video codec on Android by a wide margin. If you are re-encoding something specifically so that it will play everywhere, H.264 in an MP4 container with AAC audio is the combination least likely to surprise you — at the cost of a larger file than a newer codec would need.

That trade-off is the whole codec story in one line: newer codecs give you smaller files for the same quality, and less certainty that a given device can decode them.

A diagnosis order that actually works

Work down this list rather than guessing.

  1. Note the failure signature. Black screen with audio, sound with no picture, stutter, or nothing — from the sections above, that already tells you which track is the problem.
  2. Find out what is inside the file. Not the extension — the actual codecs. Media inspection tools on a computer will list every track with its codec, profile, bit depth, resolution and frame rate.
  3. Compare that against your device. If the file is 10-bit and your device handles 8-bit in that codec, you have your answer.
  4. Try a different player. Some players ship their own software decoders and can handle files the system decoders reject. This is worth thirty seconds and it is not a guaranteed fix.
  5. Re-encode if nothing works. Converting on a computer to H.264/AAC in an MP4 solves the widest range of these problems permanently. You lose some quality re-encoding, and for a file you want to watch on a phone that rarely matters.
  6. Reduce the resolution if it plays but stutters. A 4K file downscaled to 1080p is often the difference between a software decode that struggles and one that keeps up — and on a phone screen the visible difference is small.

What a local player should give you

Once a file plays, the rest is about not fighting the interface. Regal Video Player is built for exactly this case: media already sitting on your phone or tablet, opened directly, with no account required for normal local playback.

Format coverage. MP4, MKV and MOV alongside M4V, WebM, 3GP, FLV, TS and M2TS containers, built for H.264, H.265, VP8, VP9 and AV1 video with AAC, MP3, FLAC and Ogg audio. What actually plays still depends on the file and the decoders your device provides — that caveat applies to every player on Android, and any app claiming otherwise is claiming something the hardware does not let it deliver.

Speed in 0.1x steps from 0.1x to 3.0x. The granularity is the point. Most players jump between 1x, 1.5x and 2x, and the useful setting for a fast talker is often 1.3x, while a demonstration you are trying to follow frame by frame wants something well below 1x.

Resume, recents and favorites. Your position is saved, so an unfinished video is one tap from where you stopped, with playback history and a favorites list for the files you return to.

Gestures and a screen lock. Seeking, jumping forward and back, volume, brightness, mute and rotate are handled by gesture, and the screen lock stops a stray tap from interrupting something long — the single most useful control on a phone you are holding in bed.

Picture-in-Picture and a sleep timer. PiP floats a video while you use other apps on supported devices; availability depends on your device and Android version, because it is a platform capability rather than something an app can add. The sleep timer stops playback after a length of time you choose or at the end of the current video, and repeat mode loops a clip you want again.

Recent videos, playback history, saved positions and favorites are stored locally on the device. The free version covers local playback and is supported by ads; an optional Premium purchase removes ads and unlocks extra themes, with monthly, yearly and lifetime options shown by Google Play. It sits with the rest of our video and utility apps.

Where local video legitimately comes from

Worth stating plainly, because "local player" gets used as a euphemism and this is not that.

The files this is for are ones you already hold as ordinary media: video you shot yourself, exports from a camera or drone, screen and meeting recordings, DRM-free course and conference downloads, files a client or colleague sent you, and media you have ripped from discs you own where your local law permits it.

What it is not for is content bought or rented from a streaming store. Those files are DRM-protected and licensed to be decrypted inside the app that sold them, so a general-purpose player has no legitimate route to opening them, and that is by design rather than an oversight.

If the reason you have a folder of downloaded lectures is that you are studying something, two adjacent pieces cover that side of it: mental math methods worth drilling and how to get real value out of a history timeline.

The short version

The filename names the container. The container holds tracks. The tracks are compressed with codecs, and your device decodes the codecs it has decoders for — which is why the same .mkv can play on one phone and not another.

Diagnose by failure signature: black screen means the video track, silence means the audio track, stutter means a software decode, and nothing at all means the container or the file itself. Check the codec and profile rather than the extension, and when a device simply cannot decode something, re-encoding to H.264 in an MP4 is the fix that ends the problem rather than working around it.

Good to know

Frequently asked questions

What is the difference between a container and a codec?
A container is the file format that packages tracks together — MP4, MKV, MOV, WebM and others. A codec is the compression method used for the picture or the sound inside, such as H.264, H.265, VP9, AV1, AAC or FLAC. The extension on the filename tells you the container, so two files both ending in .mkv can contain completely different codecs and one may play while the other does not.
Why does my video play audio but show a black screen?
The container opened and the audio track decoded, but the device could not decode the video track. That normally means the video codec, or the specific profile of it, is not supported by your device's decoders — 10-bit HEVC on a device that only handles 8-bit is a common case. It is a decoder limitation, not a corrupt file, and re-downloading the same file will not change anything.
Does Android support AV1?
AV1 decoding was added at the Android platform level in Android 10, and hardware AV1 decoders appeared in mobile chipsets later than that. On a device without a hardware decoder, AV1 may still play through software decoding, which uses more CPU and more battery and can struggle at high resolutions. Availability therefore depends on both your Android version and your hardware.
Will a different player app fix a file that will not play?
Sometimes, if the player bundles its own software decoders rather than relying only on the ones your device provides. It cannot help when the limitation is the hardware itself and the file is too demanding to decode in software. The most reliable fix for a file that no player on your device will handle is to re-encode it on a computer into a codec your device supports.
Can I play movies I bought from a streaming store in a local player?
Generally no. Purchases from streaming services are protected with DRM and are licensed to be decrypted and played inside the app or platform that sold them. A general-purpose local player is for files you hold as ordinary media — your own recordings, camera exports, and DRM-free downloads.

Sources

  1. Supported media formats (opens in a new tab)Android Developers, Google — accessed
  2. Media and playback documentation (opens in a new tab)Android Developers, Google — accessed
  3. Matroska media container (opens in a new tab)Matroska.org — accessed
  4. Alliance for Open Media (opens in a new tab)Alliance for Open Media — accessed