Error is unknown.

This error can happen during an ad playback when we encountered an error that we did not expect from the advertising module or the player. Most commonly these errors are thrown when the ad has finished and the player is trying to restore normal playback, but there was an unknown error while we are restoring the content.

During video playback sometimes the playing device can throw an error which we have not identified yet. When this happens this error can be expected. Most common errors we track are PLAYBACK_VIDEO_DECODING_ERROR, NETWORK_ERROR, SOURCE_STREAM_TYPE_NOT_SUPPORTED. Usually happens when a segment is being pushed to the video element and the video element throws an error, which is not handled within the player. The error can occur when playback is started with corrupted segments or during initial loading and pushing of segments.

Troubleshooting steps for unknown errors

  • If this error happens during or after ad playback, you can try playing the video asset instead of playing it as an ad. This will show if the video content is broken or there is a problem with the advertising module. Check the console output for more details. You can enable more detailed logs by setting level to DEBUG in your player config

  • You can try setting a startOffset to a segment later in the stream to see if a specific segment is corrupted and does not allow playback or this is a general problem within the stream

      // For example we take a dash stream
    var source = {
    dash: 'your dash stream here',
    options: {
    startOffset: 10 // If we have a stream with 2s long segments, here we would start at 5th segment.
  • 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="http://www.w3.org/1999/xlink" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:bitmovin="http://www.bitmovin.net/mpd/2015">
    <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 === bitmovin.player.HttpRequestType.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 === bitmovin.player.HttpRequestType.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