An error occurred while trying to demux or decode the content.

This error can occur when the browser or device is unable to either demux or decode the content. This can have a multitude of reasons, but it is usually an indication of there either being an issue with the asset itself, or the player not properly supporting the provided stream.

Furthermore, this error can be thrown whenever the video element throws a MEDIA_ERR_DECODE, which is also an indication of there being an underlying issue with the provided stream.

Some recommendation to identify the root cause for this issue:

  • Try playing the stream audio- or video-only, e.g. by removing the other mime type from the manifest, e.g. using the preprocessHttpResponse to narrow the demuxing/decoding issues down. You can also provide a changed version of the manifest which uses only one of the mime types instead of using the player configuration

    @Example Dash manifest
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MPD id="f08e80da-bf1d-4e3d-8899-f0f6155f6efa" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" availabilityStartTime="2015-08-04T09:33:14.000Z" publishTime="2015-08-04T10:47:32.000Z" mediaPresentationDuration="P0Y0M0DT0H3M30.000S" minBufferTime="P0Y0M0DT0H0M1.000S" bitmovin:version="1.6.0" xmlns:ns2="" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:bitmovin="">
    <AdaptationSet mimeType="video/mp4" codecs="avc1.42c00d">
    <SegmentTemplate media="../video/$RepresentationID$/dash/segment_$Number$.m4s" initialization="../video/$RepresentationID$/dash/init.mp4" duration="100000" startNumber="0" timescale="25000"/>
    <Representation id="180_250000" bandwidth="250000" width="320" height="180" frameRate="25"/>
    <Representation id="270_400000" bandwidth="400000" width="480" height="270" frameRate="25"/>
    <Representation id="360_800000" bandwidth="800000" width="640" height="360" frameRate="25"/>
    <Representation id="540_1200000" bandwidth="1200000" width="960" height="540" frameRate="25"/>
    <Representation id="720_2400000" bandwidth="2400000" width="1280" height="720" frameRate="25"/>
    <Representation id="1080_4800000" bandwidth="4800000" width="1920" height="1080" frameRate="25"/>
    <AdaptationSet lang="en" mimeType="audio/mp4" codecs="mp4a.40.2" bitmovin:label="English stereo">
    <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    <SegmentTemplate media="../audio/$RepresentationID$/dash/segment_$Number$.m4s" initialization="../audio/$RepresentationID$/dash/init.mp4" duration="191472" startNumber="0" timescale="48000"/>
    <Representation id="1_stereo_128000" bandwidth="128000" audioSamplingRate="48000"/>
    @Example HLS manifest
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English stereo",LANGUAGE="en",AUTOSELECT=YES,URI="f08e80da-bf1d-4e3d-8899-f0f6155f6efa_audio_1_stereo_128000.m3u8"
    var config = {
    network: {
    preprocessHttpResponse: function(type, response) {
    if (type === 'manifest/dash') {
    // Replace the video mp4 format with an unknown format, which the player does not recognize.
    // Likewise changing the audio/mp4 to an unknown format will force only video playback.
    // Refer to the manifest example above for the a structure we use for video and audio.
    response.body = response.body.replace('mimeType="video/mp4"', 'mimeType="unknown/no-format"');

    if (type === 'manifest/hls/master') {
    // Replace all tags to remove any playback.
    response.body = response.body.replace(/(.*video.*)|(.*#EXT-X-STREAM-INF:BANDWIDTH=.*)/g, '');
    // Append a single stream tag to play only audio.
    // Refer to the example HLS manifest that we use in this case.
    response.body += '#EXT-X-STREAM-INF:BANDWIDTH=48708' + '\n' + 'f08e80da-bf1d-4e3d-8899-f0f6155f6efa_audio_1_stereo_128000.m3u8'
    return Promise.resolve(response);
  • Try playing back a single and fixed audio or video quality, e.g. using onVideoAdaptation or onAudioAdaptation, as the issue may occur only with a certain set of qualities (e.g. only the highest video quality)


    // Adapt based on needs - to only manipulate audio, only video or both at the same time.
    // This example forces both video and audio representations
    var config = {
    adaptation: {
    onVideoAdaptation: function(data) {
    // Force lowest quality for video
    return data.representations[0].id
    onAudioAdaptation: function(data) {
    // Force highest quality for audio
    return data.representations[data.representations.length - 1].id
  • Try using a stream validation tool to validate that there is no issue with the stream, e.g. the mediastreamvalidator for HLS streams

  • Try inspecting the chrome://media-internals in Chrome, as they can also provide additional and detailed information about stream demuxing or decoding issues