// Copyright 2014 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_RESOURCE_H_ #define MEDIA_BASE_MEDIA_RESOURCE_H_ #include #include "base/callback.h" #include "base/macros.h" #include "base/time/time.h" #include "media/base/demuxer_stream.h" #include "media/base/media_export.h" #include "media/base/media_url_params.h" #include "url/gurl.h" namespace media { // The callback that is used to notify clients about streams being enabled and // disabled. The first parameter is the DemuxerStream whose status changed. The // second parameter is a bool indicating whether the stream got enabled or // disabled. The third parameter specifies the media playback position at the // time the status change happened. using StreamStatusChangeCB = base::RepeatingCallback; // Abstract class that defines how to retrieve "media resources" in // DemuxerStream form (for most cases) or URL form (for the MediaPlayerRenderer // case). // // The derived classes must return a non-null value for the getter method // associated with their type, and return a null/empty value for other getters. class MEDIA_EXPORT MediaResource { public: enum Type { STREAM, // Indicates GetAllStreams() or GetFirstStream() should be used URL, // Indicates GetUrl() should be used }; MediaResource(); virtual ~MediaResource(); virtual MediaResource::Type GetType() const; // For Type::STREAM: // Returns a collection of available DemuxerStream objects. // NOTE: Once a DemuxerStream pointer is returned from GetStream it is // guaranteed to stay valid for as long as the Demuxer/MediaResource // is alive. But make no assumption that once GetStream returned a non-null // pointer for some stream type then all subsequent calls will also return // non-null pointer for the same stream type. In MSE Javascript code can // remove SourceBuffer from a MediaSource at any point and this will make // some previously existing streams inaccessible/unavailable. virtual std::vector GetAllStreams() = 0; // A helper function that return the first stream of the given |type| if one // exists or a null pointer if there is no streams of that type. DemuxerStream* GetFirstStream(DemuxerStream::Type type); // The StreamStatusChangeCB allows clients to receive notifications about one // of the streams being disabled or enabled. virtual void SetStreamStatusChangeCB(const StreamStatusChangeCB& cb) = 0; // For Type::URL: // Returns the URL parameters of the media to play. Empty URLs are legal, // and should be handled appropriately by the caller. // Other types: // Should not be called. virtual MediaUrlParams GetMediaUrlParams() const; private: DISALLOW_COPY_AND_ASSIGN(MediaResource); }; } // namespace media #endif // MEDIA_BASE_MEDIA_RESOURCE_H_