# Source: streaming/MediaPlayerEvents.js

    /**
     * The copyright in this software is being made available under the BSD License,
     * included below. This software may be subject to other third party and contributor
     * rights, including patent rights, and no such rights are granted under this license.
     *
     * Copyright (c) 2013, Dash Industry Forum.
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without modification,
     * are permitted provided that the following conditions are met:
     *  * Redistributions of source code must retain the above copyright notice, this
     *  list of conditions and the following disclaimer.
     *  * Redistributions in binary form must reproduce the above copyright notice,
     *  this list of conditions and the following disclaimer in the documentation and/or
     *  other materials provided with the distribution.
     *  * Neither the name of Dash Industry Forum nor the names of its
     *  contributors may be used to endorse or promote products derived from this software
     *  without specific prior written permission.
     *
     *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY
     *  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     *  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     *  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     *  POSSIBILITY OF SUCH DAMAGE.
     */
    import EventsBase from '../core/events/EventsBase';

    /**
     * @class
     * @implements EventsBase
     */
    class MediaPlayerEvents extends EventsBase {

        /**
         * @description Public facing external events to be used when developing a player that implements dash.js.
         */
        constructor() {
            super();
            /**
             * Triggered when playback will not start yet
             * as the MPD's availabilityStartTime is in the future.
             * Check delay property in payload to determine time before playback will start.
             * @event MediaPlayerEvents#AST_IN_FUTURE
             */
            this.AST_IN_FUTURE = 'astInFuture';

            /**
             * Triggered when the BaseURLs have been updated.
             * @event MediaPlayerEvents#BASE_URLS_UPDATED
             */
            this.BASE_URLS_UPDATED = 'baseUrlsUpdated';

            /**
             * Triggered when the video element's buffer state changes to stalled.
             * Check mediaType in payload to determine type (Video, Audio, FragmentedText).
             * @event MediaPlayerEvents#BUFFER_EMPTY
             */
            this.BUFFER_EMPTY = 'bufferStalled';

            /**
             * Triggered when the video element's buffer state changes to loaded.
             * Check mediaType in payload to determine type (Video, Audio, FragmentedText).
             * @event MediaPlayerEvents#BUFFER_LOADED
             */
            this.BUFFER_LOADED = 'bufferLoaded';

            /**
             * Triggered when the video element's buffer state changes, either stalled or loaded. Check payload for state.
             * @event MediaPlayerEvents#BUFFER_LEVEL_STATE_CHANGED
             */
            this.BUFFER_LEVEL_STATE_CHANGED = 'bufferStateChanged';

            /**
             * Triggered when the buffer level of a media type has been updated
             * @event MediaPlayerEvents#BUFFER_LEVEL_UPDATED
             */
            this.BUFFER_LEVEL_UPDATED = 'bufferLevelUpdated';

            /**
             * Triggered when a dynamic stream changed to static (transition phase between Live and On-Demand).
             * @event MediaPlayerEvents#DYNAMIC_TO_STATIC
             */
            this.DYNAMIC_TO_STATIC = 'dynamicToStatic';

            /**
             * Triggered when there is an error from the element or MSE source buffer.
             * @event MediaPlayerEvents#ERROR
             */
            this.ERROR = 'error';
            /**
             * Triggered when a fragment download has completed.
             * @event MediaPlayerEvents#FRAGMENT_LOADING_COMPLETED
             */
            this.FRAGMENT_LOADING_COMPLETED = 'fragmentLoadingCompleted';

            /**
             * Triggered when a partial fragment download has completed.
             * @event MediaPlayerEvents#FRAGMENT_LOADING_PROGRESS
             */
            this.FRAGMENT_LOADING_PROGRESS = 'fragmentLoadingProgress';
            /**
             * Triggered when a fragment download has started.
             * @event MediaPlayerEvents#FRAGMENT_LOADING_STARTED
             */
            this.FRAGMENT_LOADING_STARTED = 'fragmentLoadingStarted';

            /**
             * Triggered when a fragment download is abandoned due to detection of slow download base on the ABR abandon rule..
             * @event MediaPlayerEvents#FRAGMENT_LOADING_ABANDONED
             */
            this.FRAGMENT_LOADING_ABANDONED = 'fragmentLoadingAbandoned';

            /**
             * Triggered when {@link module:Debug} logger methods are called.
             * @event MediaPlayerEvents#LOG
             */
            this.LOG = 'log';

            /**
             * Triggered when the manifest load is started
             * @event MediaPlayerEvents#MANIFEST_LOADING_STARTED
             */
            this.MANIFEST_LOADING_STARTED = 'manifestLoadingStarted';

            /**
             * Triggered when the manifest loading is finished, providing the request object information
             * @event MediaPlayerEvents#MANIFEST_LOADING_FINISHED
             */
            this.MANIFEST_LOADING_FINISHED = 'manifestLoadingFinished';

            /**
             * Triggered when the manifest load is complete, providing the payload
             * @event MediaPlayerEvents#MANIFEST_LOADED
             */
            this.MANIFEST_LOADED = 'manifestLoaded';

            /**
             * Triggered anytime there is a change to the overall metrics.
             * @event MediaPlayerEvents#METRICS_CHANGED
             */
            this.METRICS_CHANGED = 'metricsChanged';

            /**
             * Triggered when an individual metric is added, updated or cleared.
             * @event MediaPlayerEvents#METRIC_CHANGED
             */
            this.METRIC_CHANGED = 'metricChanged';

            /**
             * Triggered every time a new metric is added.
             * @event MediaPlayerEvents#METRIC_ADDED
             */
            this.METRIC_ADDED = 'metricAdded';

            /**
             * Triggered every time a metric is updated.
             * @event MediaPlayerEvents#METRIC_UPDATED
             */
            this.METRIC_UPDATED = 'metricUpdated';

            /**
             * Triggered when a new stream (period) starts.
             * @event MediaPlayerEvents#PERIOD_SWITCH_STARTED
             */
            this.PERIOD_SWITCH_STARTED = 'periodSwitchStarted';

            /**
             * Triggered at the stream end of a period.
             * @event MediaPlayerEvents#PERIOD_SWITCH_COMPLETED
             */
            this.PERIOD_SWITCH_COMPLETED = 'periodSwitchCompleted';

            /**
             * Triggered when an ABR up /down switch is initiated; either by user in manual mode or auto mode via ABR rules.
             * @event MediaPlayerEvents#QUALITY_CHANGE_REQUESTED
             */
            this.QUALITY_CHANGE_REQUESTED = 'qualityChangeRequested';

            /**
             * Triggered when the new ABR quality is being rendered on-screen.
             * @event MediaPlayerEvents#QUALITY_CHANGE_RENDERED
             */
            this.QUALITY_CHANGE_RENDERED = 'qualityChangeRendered';

            /**
             * Triggered when the new track is being rendered.
             * @event MediaPlayerEvents#TRACK_CHANGE_RENDERED
             */
            this.TRACK_CHANGE_RENDERED = 'trackChangeRendered';

            /**
             * Triggered when a stream (period) is being loaded
             * @event MediaPlayerEvents#STREAM_INITIALIZING
             */
            this.STREAM_INITIALIZING = 'streamInitializing';

            /**
             * Triggered when a stream (period) is loaded
             * @event MediaPlayerEvents#STREAM_UPDATED
             */
            this.STREAM_UPDATED = 'streamUpdated';

            /**
             * Triggered when a stream (period) is activated
             * @event MediaPlayerEvents#STREAM_ACTIVATED
             */
            this.STREAM_ACTIVATED = 'streamActivated';

            /**
             * Triggered when a stream (period) is deactivated
             * @event MediaPlayerEvents#STREAM_DEACTIVATED
             */
            this.STREAM_DEACTIVATED = 'streamDeactivated';

            /**
             * Triggered when a stream (period) is activated
             * @event MediaPlayerEvents#STREAM_INITIALIZED
             */
            this.STREAM_INITIALIZED = 'streamInitialized';

            /**
             * Triggered when the player has been reset.
             * @event MediaPlayerEvents#STREAM_TEARDOWN_COMPLETE
             */
            this.STREAM_TEARDOWN_COMPLETE = 'streamTeardownComplete';

            /**
             * Triggered once all text tracks detected in the MPD are added to the video element.
             * @event MediaPlayerEvents#TEXT_TRACKS_ADDED
             */
            this.TEXT_TRACKS_ADDED = 'allTextTracksAdded';

            /**
             * Triggered when a text track is added to the video element's TextTrackList
             * @event MediaPlayerEvents#TEXT_TRACK_ADDED
             */
            this.TEXT_TRACK_ADDED = 'textTrackAdded';

            /**
             * Triggered when a throughput measurement based on the last segment request has been stored
             * @event MediaPlayerEvents#THROUGHPUT_MEASUREMENT_STORED
             */
            this.THROUGHPUT_MEASUREMENT_STORED = 'throughputMeasurementStored';

            /**
             * Triggered when a ttml chunk is parsed.
             * @event MediaPlayerEvents#TTML_PARSED
             */
            this.TTML_PARSED = 'ttmlParsed';

            /**
             * Triggered when a ttml chunk has to be parsed.
             * @event MediaPlayerEvents#TTML_TO_PARSE
             */
            this.TTML_TO_PARSE = 'ttmlToParse';

            /**
             * Triggered when a caption is rendered.
             * @event MediaPlayerEvents#CAPTION_RENDERED
             */
            this.CAPTION_RENDERED = 'captionRendered';

            /**
             * Triggered when the caption container is resized.
             * @event MediaPlayerEvents#CAPTION_CONTAINER_RESIZE
             */
            this.CAPTION_CONTAINER_RESIZE = 'captionContainerResize';

            /**
             * Sent when enough data is available that the media can be played,
             * at least for a couple of frames.  This corresponds to the
             * HAVE_ENOUGH_DATA readyState.
             * @event MediaPlayerEvents#CAN_PLAY
             */
            this.CAN_PLAY = 'canPlay';

            /**
             * This corresponds to the CAN_PLAY_THROUGH readyState.
             * @event MediaPlayerEvents#CAN_PLAY_THROUGH
             */
            this.CAN_PLAY_THROUGH = 'canPlayThrough';

            /**
             * Sent when playback completes.
             * @event MediaPlayerEvents#PLAYBACK_ENDED
             */
            this.PLAYBACK_ENDED = 'playbackEnded';

            /**
             * Sent when an error occurs.  The element's error
             * attribute contains more information.
             * @event MediaPlayerEvents#PLAYBACK_ERROR
             */
            this.PLAYBACK_ERROR = 'playbackError';

            /**
             * Sent when playback is not allowed (for example if user gesture is needed).
             * @event MediaPlayerEvents#PLAYBACK_NOT_ALLOWED
             */
            this.PLAYBACK_NOT_ALLOWED = 'playbackNotAllowed';

            /**
             * The media's metadata has finished loading; all attributes now
             * contain as much useful information as they're going to.
             * @event MediaPlayerEvents#PLAYBACK_METADATA_LOADED
             */
            this.PLAYBACK_METADATA_LOADED = 'playbackMetaDataLoaded';

            /**
             * The event is fired when the frame at the current playback position of the media has finished loading;
             * often the first frame
             * @event MediaPlayerEvents#PLAYBACK_LOADED_DATA
             */
            this.PLAYBACK_LOADED_DATA = 'playbackLoadedData';

            /**
             * Sent when playback is paused.
             * @event MediaPlayerEvents#PLAYBACK_PAUSED
             */
            this.PLAYBACK_PAUSED = 'playbackPaused';

            /**
             * Sent when the media begins to play (either for the first time, after having been paused,
             * or after ending and then restarting).
             *
             * @event MediaPlayerEvents#PLAYBACK_PLAYING
             */
            this.PLAYBACK_PLAYING = 'playbackPlaying';

            /**
             * Sent periodically to inform interested parties of progress downloading
             * the media. Information about the current amount of the media that has
             * been downloaded is available in the media element's buffered attribute.
             * @event MediaPlayerEvents#PLAYBACK_PROGRESS
             */
            this.PLAYBACK_PROGRESS = 'playbackProgress';

            /**
             * Sent when the playback speed changes.
             * @event MediaPlayerEvents#PLAYBACK_RATE_CHANGED
             */
            this.PLAYBACK_RATE_CHANGED = 'playbackRateChanged';

            /**
             * Sent when a seek operation completes.
             * @event MediaPlayerEvents#PLAYBACK_SEEKED
             */
            this.PLAYBACK_SEEKED = 'playbackSeeked';

            /**
             * Sent when a seek operation begins.
             * @event MediaPlayerEvents#PLAYBACK_SEEKING
             */
            this.PLAYBACK_SEEKING = 'playbackSeeking';

            /**
             * Sent when the video element reports stalled
             * @event MediaPlayerEvents#PLAYBACK_STALLED
             */
            this.PLAYBACK_STALLED = 'playbackStalled';

            /**
             * Sent when playback of the media starts after having been paused;
             * that is, when playback is resumed after a prior pause event.
             *
             * @event MediaPlayerEvents#PLAYBACK_STARTED
             */
            this.PLAYBACK_STARTED = 'playbackStarted';

            /**
             * The time indicated by the element's currentTime attribute has changed.
             * @event MediaPlayerEvents#PLAYBACK_TIME_UPDATED
             */
            this.PLAYBACK_TIME_UPDATED = 'playbackTimeUpdated';

            /**
             * Sent when the video element reports that the volume has changed
             * @event MediaPlayerEvents#PLAYBACK_VOLUME_CHANGED
             */
            this.PLAYBACK_VOLUME_CHANGED = 'playbackVolumeChanged';

            /**
             * Sent when the media playback has stopped because of a temporary lack of data.
             *
             * @event MediaPlayerEvents#PLAYBACK_WAITING
             */
            this.PLAYBACK_WAITING = 'playbackWaiting';

            /**
             * Manifest validity changed - As a result of an MPD validity expiration event.
             * @event MediaPlayerEvents#MANIFEST_VALIDITY_CHANGED
             */
            this.MANIFEST_VALIDITY_CHANGED = 'manifestValidityChanged';

            /**
             * Dash events are triggered at their respective start points on the timeline.
             * @event MediaPlayerEvents#EVENT_MODE_ON_START
             */
            this.EVENT_MODE_ON_START = 'eventModeOnStart';

            /**
             * Dash events are triggered as soon as they were parsed.
             * @event MediaPlayerEvents#EVENT_MODE_ON_RECEIVE
             */
            this.EVENT_MODE_ON_RECEIVE = 'eventModeOnReceive';

            /**
             * Event that is dispatched whenever the player encounters a potential conformance validation that might lead to unexpected/not optimal behavior
             * @event MediaPlayerEvents#CONFORMANCE_VIOLATION
             */
            this.CONFORMANCE_VIOLATION = 'conformanceViolation';

            /**
             * Event that is dispatched whenever the player switches to a different representation
             * @event MediaPlayerEvents#REPRESENTATION_SWITCH
             */
            this.REPRESENTATION_SWITCH = 'representationSwitch';

            /**
             * Event that is dispatched whenever an adaptation set is removed due to all representations not being supported.
             * @event MediaPlayerEvents#ADAPTATION_SET_REMOVED_NO_CAPABILITIES
             */
            this.ADAPTATION_SET_REMOVED_NO_CAPABILITIES = 'adaptationSetRemovedNoCapabilities';

            /**
             * Triggered when a content steering request has completed.
             * @event MediaPlayerEvents#CONTENT_STEERING_REQUEST_COMPLETED
             */
            this.CONTENT_STEERING_REQUEST_COMPLETED = 'contentSteeringRequestCompleted';

            /**
             * Triggered when an inband prft (ProducerReferenceTime) boxes has been received.
             * @event MediaPlayerEvents#INBAND_PRFT
             */
            this.INBAND_PRFT = 'inbandPrft';
        }
    }

    let mediaPlayerEvents = new MediaPlayerEvents();
    export default mediaPlayerEvents;

#### Search results