// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_MIRRORING_SERVICE_MEDIA_REMOTER_H_ #define COMPONENTS_MIRRORING_SERVICE_MEDIA_REMOTER_H_ #include <optional> #include "base/component_export.h" #include "base/memory/raw_ptr.h" #include "media/cast/cast_config.h" #include "media/mojo/mojom/remoting.mojom.h" #include "media/mojo/mojom/remoting_common.mojom.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/system/data_pipe.h" #include "third_party/openscreen/src/cast/streaming/sender.h" namespace media::cast { class CastEnvironment; } // namespace media::cast namespace mirroring { class RpcDispatcher; class RemotingSender; // MediaRemoter remotes media content directly to a Cast Receiver. When // MediaRemoter is started, it connects itself with a source tab in browser // through the Mirroring Service mojo interface and allows the browser to access // this MediaRemoter to start/stop individual remoting sessions, which are // caused by user actions (i.e., when they somehow indicate a desire to // enter/leave an immersive video-watching mode). // // When a remoting session is started, MediaRemoter will first request that tab // mirroring be switched into content remoting mode. If granted, it will notify // the browser that this has succeeded. At this point, two-way RPC binary // messaging begins, and the MediaRemoter simply forwards messages between the // browser and the Cast Receiver. The audio/video data streams are delivered // from the media renderer to the Mirroring Service through mojo datapipes, and // are then sent out to Cast Receiver through Cast Streaming. class COMPONENT_EXPORT(MIRRORING_SERVICE) MediaRemoter final : public media::mojom::Remoter { … }; } // namespace mirroring #endif // COMPONENTS_MIRRORING_SERVICE_MEDIA_REMOTER_H_