16979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef/*
26979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * libjingle
36979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * Copyright 2015 Google Inc.
46979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *
56979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * Redistribution and use in source and binary forms, with or without
66979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * modification, are permitted provided that the following conditions are met:
76979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *
86979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *  1. Redistributions of source code must retain the above copyright notice,
96979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *     this list of conditions and the following disclaimer.
106979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *  2. Redistributions in binary form must reproduce the above copyright notice,
116979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *     this list of conditions and the following disclaimer in the documentation
126979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *     and/or other materials provided with the distribution.
136979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *  3. The name of the author may not be used to endorse or promote products
146979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *     derived from this software without specific prior written permission.
156979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef *
166979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
176979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
186979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
196979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
206979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
216979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
226979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
236979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
246979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
256979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
266979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef */
276979b024d7cebfdcd1e8f66da59ea157bbc9e47edeadbeef
2870ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef// This file contains interfaces for RtpSenders
2970ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef// http://w3c.github.io/webrtc-pc/#rtcrtpsender-interface
3070ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
3170ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#ifndef TALK_APP_WEBRTC_RTPSENDERINTERFACE_H_
3270ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#define TALK_APP_WEBRTC_RTPSENDERINTERFACE_H_
3370ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
3470ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#include <string>
3570ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
3670ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#include "talk/app/webrtc/proxy.h"
3770ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#include "talk/app/webrtc/mediastreaminterface.h"
38fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef#include "talk/session/media/mediasession.h"
3970ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#include "webrtc/base/refcount.h"
4070ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#include "webrtc/base/scoped_ref_ptr.h"
4170ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
4270ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefnamespace webrtc {
4370ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
4470ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefclass RtpSenderInterface : public rtc::RefCountInterface {
4570ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef public:
4670ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  // Returns true if successful in setting the track.
4770ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  // Fails if an audio track is set on a video RtpSender, or vice-versa.
4870ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  virtual bool SetTrack(MediaStreamTrackInterface* track) = 0;
4970ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  virtual rtc::scoped_refptr<MediaStreamTrackInterface> track() const = 0;
5070ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
51fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  // Used to set the SSRC of the sender, once a local description has been set.
52fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  // If |ssrc| is 0, this indiates that the sender should disconnect from the
53fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  // underlying transport (this occurs if the sender isn't seen in a local
54fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  // description).
55fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  virtual void SetSsrc(uint32_t ssrc) = 0;
56fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  virtual uint32_t ssrc() const = 0;
57fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef
58fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  // Audio or video sender?
59fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  virtual cricket::MediaType media_type() const = 0;
60fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef
6170ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  // Not to be confused with "mid", this is a field we can temporarily use
6270ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  // to uniquely identify a receiver until we implement Unified Plan SDP.
6370ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  virtual std::string id() const = 0;
6470ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
65fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  // TODO(deadbeef): Support one sender having multiple stream ids.
66fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  virtual void set_stream_id(const std::string& stream_id) = 0;
67fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef  virtual std::string stream_id() const = 0;
68fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeef
6970ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  virtual void Stop() = 0;
7070ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
7170ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef protected:
7270ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef  virtual ~RtpSenderInterface() {}
7370ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef};
7470ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
7570ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef// Define proxy for RtpSenderInterface.
7670ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefBEGIN_PROXY_MAP(RtpSender)
7770ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefPROXY_METHOD1(bool, SetTrack, MediaStreamTrackInterface*)
7870ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefPROXY_CONSTMETHOD0(rtc::scoped_refptr<MediaStreamTrackInterface>, track)
79fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeefPROXY_METHOD1(void, SetSsrc, uint32_t)
80fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeefPROXY_CONSTMETHOD0(uint32_t, ssrc)
81fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeefPROXY_CONSTMETHOD0(cricket::MediaType, media_type)
8270ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefPROXY_CONSTMETHOD0(std::string, id)
83fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeefPROXY_METHOD1(void, set_stream_id, const std::string&)
84fac0655fd7fe0b40ef50dc5b7f11ea44d72cec6cdeadbeefPROXY_CONSTMETHOD0(std::string, stream_id)
8570ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefPROXY_METHOD0(void, Stop)
8670ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeefEND_PROXY()
8770ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
8870ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef}  // namespace webrtc
8970ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef
9070ab1a1ca89d280a7d51e3fadc51d4be9df209cadeadbeef#endif  // TALK_APP_WEBRTC_RTPSENDERINTERFACE_H_
91