| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_BASE_MEDIA_OBSERVER_H_ |
| #define MEDIA_BASE_MEDIA_OBSERVER_H_ |
| |
| #include "media/base/pipeline_metadata.h" |
| #include "url/gurl.h" |
| |
| namespace media { |
| |
| class MEDIA_EXPORT MediaObserverClient { |
| public: |
| // Reasons to switch to local renderer from using remote renderer. |
| enum class ReasonToSwitchToLocal { |
| NORMAL, // Remoting is disabled or media no longer occupies the viewport. |
| POOR_PLAYBACK_QUALITY, // Playback quality is poor. |
| PIPELINE_ERROR, // Error occurred. |
| ROUTE_TERMINATED, // No longer show the media on remote screen. |
| }; |
| |
| virtual ~MediaObserverClient() {} |
| |
| // Requests to restart the media pipeline and create a new renderer as soon as |
| // possible. When switching to remote renderer, all the optimizations that |
| // might suspend the media pipeline should be disabled. |
| // |remote_device_friendly_name| can be empty if the remote device is unknown. |
| virtual void SwitchToRemoteRenderer( |
| const std::string& remote_device_friendly_name) = 0; |
| |
| // Requests to switch to local renderer. According to |reason|, a text message |
| // may be displayed to explain why the switch occurred. |
| virtual void SwitchToLocalRenderer(ReasonToSwitchToLocal reason) = 0; |
| |
| // Reports the latest compatibility state of the element's source for remote |
| // playback. |
| virtual void UpdateRemotePlaybackCompatibility(bool is_compatible) = 0; |
| |
| // Gets the number of video frames decoded so far from the media pipeline. |
| // All the counts keep increasing and will not be reset during seek. |
| virtual unsigned DecodedFrameCount() const = 0; |
| |
| // Gets the media duration in seconds. Returns |
| // |std::numeric_limits<double>::infinity()| for an infinite stream duration. |
| // TODO(xjz): Use base::TimeDelta for media duration (crbug.com/773911). |
| virtual double Duration() const = 0; |
| }; |
| |
| // This class is an observer of media player events. |
| class MEDIA_EXPORT MediaObserver { |
| public: |
| MediaObserver(); |
| virtual ~MediaObserver(); |
| |
| // Called when the media element starts/stops being the dominant visible |
| // content. |
| virtual void OnBecameDominantVisibleContent(bool is_dominant) {} |
| |
| // Called after demuxer is initialized. |
| virtual void OnMetadataChanged(const PipelineMetadata& metadata) = 0; |
| |
| // Called to indicate whether the site requests that remote playback be |
| // disabled. The "disabled" naming corresponds with the |
| // "disableRemotePlayback" media element attribute, as described in the |
| // Remote Playback API spec: https://w3c.github.io/remote-playback |
| virtual void OnRemotePlaybackDisabled(bool disabled) = 0; |
| |
| // Called on Android, whenever we detect that we are playing back HLS. |
| virtual void OnHlsManifestDetected() = 0; |
| |
| // Called when the media is playing/paused. |
| virtual void OnPlaying() = 0; |
| virtual void OnPaused() = 0; |
| |
| // Called when the data source is asynchronously initialized. |
| virtual void OnDataSourceInitialized(const GURL& url_after_redirects) = 0; |
| |
| // Set the MediaObserverClient. May be called with nullptr to disconnect the |
| // the client from the observer. |
| virtual void SetClient(MediaObserverClient* client) = 0; |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_MEDIA_OBSERVER_H_ |