| // 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 CONTENT_RENDERER_MEDIA_MEDIA_STREAM_H_ |
| #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/callback.h" |
| #include "base/compiler_specific.h" |
| #include "base/threading/thread_checker.h" |
| #include "content/common/content_export.h" |
| #include "third_party/WebKit/public/platform/WebMediaStream.h" |
| |
| namespace webrtc { |
| class MediaStreamInterface; |
| } |
| |
| namespace content { |
| |
| // MediaStreamObserver can be used to get notifications of when a track is |
| // added or removed from a MediaStream. |
| class MediaStreamObserver { |
| public: |
| // TrackAdded is called |track| is added to the observed MediaStream. |
| virtual void TrackAdded(const blink::WebMediaStreamTrack& track) = 0; |
| // TrackRemoved is called |track| is added to the observed MediaStream. |
| virtual void TrackRemoved(const blink::WebMediaStreamTrack& track) = 0; |
| |
| protected: |
| virtual ~MediaStreamObserver() {} |
| }; |
| |
| // MediaStream is the Chrome representation of blink::WebMediaStream. |
| // It is owned by blink::WebMediaStream as blink::WebMediaStream::ExtraData. |
| // Its lifetime is the same as the blink::WebMediaStream instance it belongs to. |
| class CONTENT_EXPORT MediaStream |
| : NON_EXPORTED_BASE(public blink::WebMediaStream::ExtraData) { |
| public: |
| // Constructor for local MediaStreams. |
| MediaStream(const blink::WebMediaStream& stream); |
| |
| // Constructor for remote MediaStreams. |
| // TODO(xians): Remove once the audio renderer don't separate between local |
| // and remotely generated streams. |
| explicit MediaStream(webrtc::MediaStreamInterface* webrtc_stream); |
| |
| virtual ~MediaStream(); |
| |
| // Returns an instance of MediaStream. This method will never return NULL. |
| static MediaStream* GetMediaStream( |
| const blink::WebMediaStream& stream); |
| |
| // Returns a libjingle representation of a remote MediaStream. |
| // TODO(xians): Remove once the audio renderer don't separate between local |
| // and remotely generated streams. |
| static webrtc::MediaStreamInterface* GetAdapter( |
| const blink::WebMediaStream& stream); |
| |
| // Adds an observer to this MediaStream. Its the callers responsibility to |
| // remove the observer before the destruction of the MediaStream. |
| void AddObserver(MediaStreamObserver* observer); |
| void RemoveObserver(MediaStreamObserver* observer); |
| |
| // TODO(xians): Remove |is_local| once AudioTracks can be rendered the same |
| // way regardless if they are local or remote. |
| bool is_local() const { return is_local_; } |
| |
| // Called by MediaStreamCenter when a track has been added to a stream stream. |
| bool AddTrack(const blink::WebMediaStreamTrack& track); |
| |
| // Called by MediaStreamCenter when a track has been removed from |stream|. |
| bool RemoveTrack(const blink::WebMediaStreamTrack& track); |
| |
| protected: |
| virtual webrtc::MediaStreamInterface* GetWebRtcAdapter( |
| const blink::WebMediaStream& stream); |
| |
| private: |
| base::ThreadChecker thread_checker_; |
| const bool is_local_; |
| const std::string label_; |
| std::vector<MediaStreamObserver*> observers_; |
| |
| // TODO(xians): Remove once the audio renderer don't separate between local |
| // and remotely generated streams. |
| scoped_refptr<webrtc::MediaStreamInterface> webrtc_media_stream_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MediaStream); |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_H_ |