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