media_url_demuxer.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef MEDIA_BASE_MEDIA_URL_DEMUXER_H_
  5. #define MEDIA_BASE_MEDIA_URL_DEMUXER_H_
  6. #include <stddef.h>
  7. #include "base/callback.h"
  8. #include "base/memory/raw_ptr.h"
  9. #include "base/memory/weak_ptr.h"
  10. #include "media/base/demuxer.h"
  11. #include "url/gurl.h"
  12. namespace base {
  13. class SingleThreadTaskRunner;
  14. } // namespace base
  15. namespace net {
  16. class SiteForCookies;
  17. } // namespace net
  18. namespace media {
  19. // Class that saves a URL for later retrieval. To be used in conjunction with
  20. // the MediaPlayerRenderer.
  21. //
  22. // Its primary purpose is to act as a dummy Demuxer, when there is no need
  23. // for DemuxerStreams (e.g. in the MediaPlayerRenderer case). For the most part,
  24. // its implementation of the Demuxer are NOPs that return the default values and
  25. // fire any provided callbacks immediately.
  26. //
  27. // If Pipeline where to be refactored to use a MediaResource instead of
  28. // a Demuxer, MediaUrlDemuxer should be refactored to inherit directly from
  29. // MediaResource.
  30. class MEDIA_EXPORT MediaUrlDemuxer : public Demuxer {
  31. public:
  32. MediaUrlDemuxer(
  33. const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
  34. const GURL& media_url,
  35. const net::SiteForCookies& site_for_cookies,
  36. const url::Origin& top_frame_origin,
  37. bool allow_credentials,
  38. bool is_hls);
  39. MediaUrlDemuxer(const MediaUrlDemuxer&) = delete;
  40. MediaUrlDemuxer& operator=(const MediaUrlDemuxer&) = delete;
  41. ~MediaUrlDemuxer() override;
  42. // MediaResource interface.
  43. std::vector<DemuxerStream*> GetAllStreams() override;
  44. const MediaUrlParams& GetMediaUrlParams() const override;
  45. MediaResource::Type GetType() const override;
  46. void ForwardDurationChangeToDemuxerHost(base::TimeDelta duration) override;
  47. // Demuxer interface.
  48. std::string GetDisplayName() const override;
  49. void Initialize(DemuxerHost* host, PipelineStatusCallback status_cb) override;
  50. void StartWaitingForSeek(base::TimeDelta seek_time) override;
  51. void CancelPendingSeek(base::TimeDelta seek_time) override;
  52. void Seek(base::TimeDelta time, PipelineStatusCallback status_cb) override;
  53. void Stop() override;
  54. void AbortPendingReads() override;
  55. base::TimeDelta GetStartTime() const override;
  56. base::Time GetTimelineOffset() const override;
  57. int64_t GetMemoryUsage() const override;
  58. absl::optional<container_names::MediaContainerName> GetContainerForMetrics()
  59. const override;
  60. void OnEnabledAudioTracksChanged(const std::vector<MediaTrack::Id>& track_ids,
  61. base::TimeDelta curr_time,
  62. TrackChangeCB change_completed_cb) override;
  63. void OnSelectedVideoTrackChanged(const std::vector<MediaTrack::Id>& track_ids,
  64. base::TimeDelta curr_time,
  65. TrackChangeCB change_completed_cb) override;
  66. private:
  67. MediaUrlParams params_;
  68. raw_ptr<DemuxerHost> host_;
  69. scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
  70. };
  71. } // namespace media
  72. #endif // MEDIA_BASE_MEDIA_URL_DEMUXER_H_