Improving playback compatibility with players

Moritz Bunkus edited this page Feb 24, 2016 · 4 revisions
Clone this wiki locally

Options for improving playback on players that don't implement the full Matroska specification

The problem

My player doesn't play a file properly. What can I do to make it work?

The answer

Different players support different subsets of the Matroska specifications. mkvmerge tends to use all the latest features all the time, and this can pose problems for such players.

There are several options that can improve playback for those players (both hardware and software based ones). Changing them always requires re-muxing the whole file, preferably from the original source files and not from an intermediate Matroska file the player already has a problem with.

If you try these don't try them all at once but try to find out which particular option gives your player pause. Ideally report that issue including your findings to the manufacturer.

Not using certain new elements in the cues with --engage no_cue_duration and --engage no_cue_relative_position

There were two recent additions to the Matroska specs, CueDuration and CueRelativePosition. They're meant to make the life of demuxers easier by providing additional information about the exact location and duration of certain elements in their respective clusters via the index (the "cues" in Matroska terms). As has been said those elements are additional elements, and they're purely optional; both playback and seeking can work just fine without them.

The Matroska specs intention is for players to simply skip elements they don't know if they encounter any. Unfortunately not all players do that.

The symptoms of a player having problems with those two additions include not being able to seek at all in a file or only with very long wait times inbetween, especially with seeks to far-away positions; problems with fast-forwarding or rewinding; or even the player not playing the file in the first place.

You can prevent mkvmerge from writing these two elements with the command line options "--engage no_cue_duration,no_cue_relative_position". In mmg you can add those options via the "Add command line options" dialog from the "Muxing" menu. Select the two options "--engage no_cue_duration" and "--engage no_cue_relative_position" and press the "Add" button for each.

Referencing each cluster from the meta index with --clusters-in-meta-seek

There two kinds of indexes in Matroska files: the "cues" and the "meta seek elements". The former is used for telling a player where the key frames are in a file. The latter are used for telling a player where certain important Matroska elements are in a file.

In Matroska a cluster is a unit that contains a number of frames of all track types. A file is often made up of hundreds if not thousands of clusters. Normally the "cues" provide enough information for a player in order to find the cluster that contains a certain key frame a player wants to seek to. Some players also need the clusters themselves to be referenced in the "meta seek elements".

Symptoms include seeking in your player doesn't work properly or takes a lot of time. This also applies to skipping/selecting chapters to go to as that is a seeking operation as well.

This is a global option. Therefore you only have to use it once on the command line, and its position does not matter. You can enable it in mmg by selecting the option "Add command line options" from the "Muxing" menu, selecting the option "--clusters-in-meta-seek" from the drop down box and pressing the "Add" button.

Disabling lacing of frames in a single block with --disable-lacing

Lacing is a technique for putting several frames of a track (up to 8) into a single Matroska element called 'BlockGroup' or 'SimpleBlock'. This reduces file size overhead. Some players don't support each and every kind of lacing method that Matroska files can use.

Symptoms of a player not supporting some lacing methods or lacing in general include not playing certain tracks at all or only in certain parts of a file or only for very short periods of time.

This is a global option. Therefore you only have to use it once on the command line, and its position does not matter. You can enable it in mmg by selecting the option "Add command line options" from the "Muxing" menu, selecting the option "--disable-lacing" from the drop down box and pressing the "Add" button.

Not using SimpleBlock elements with --engage no_simpleblocks

In Matroska there are two element types that contain the actual frames: the older 'BlockGroup' structure and the newer (introduced roughly around 2004) 'SimpleBlock' structure. The former is more flexible, the latter has less overhead. Muxers usually use both in the same file: 'BlockGroup' if they need certain features for a frame (e.g. a special duration) and the 'SimpleBlock' element otherwise (in order to reduce file size overhead).

Symptoms of a player not supporting 'SimpleBlock' elements include include not playing certain tracks at all or only in certain parts of a file or only for very short periods of time.

This is a global option. Therefore you only have to use it once on the command line, and its position does not matter. You can enable it in mmg by selecting the option "Add command line options" from the "Muxing" menu, selecting the option "--engage no_simpleblock" from the drop down box and pressing the "Add" button.

Turning off track compression with --compression

--compression: This option is already mentiond in the FAQ entry about header removal compression. With this option that compression could be turned off, but it is not necessary anymore starting with v6.0.0. In v6.0.0 mkvmerge has been switched to not using header removal compression at all. Therefore you do not have to tell it to anymore. The corresponding option in mmg's preferences to always disable the header removal compression has been removed for the same reason.

Categories: merging, playback