1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include <webrtc/api/peer_connection_interface.h>
- #include <memory>
-
- namespace rtcutil {
-
- class ConductorObserver {
- public:
- enum class ErrorType {
- WARNING,
- RECEIVE_OFFER,
- RECEIVE_ICE_CANDIDATE,
- CREATE_ANSWER,
- };
-
- virtual void onError(ErrorType type, std::string err);
-
- virtual void onIceCandidate(std::string mid, int index, std::string sdp) = 0;
- virtual void onAnswer(std::string sdp) = 0;
- virtual void onRemoteTrack(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track) = 0;
- virtual void removeRemoteTrack(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track) = 0;
- };
-
- class Conductor:
- public webrtc::PeerConnectionObserver,
- public webrtc::CreateSessionDescriptionObserver {
- public:
- Conductor(ConductorObserver &observer): observer_(observer) {}
-
- void receiveOffer(const std::string &sdp);
- void receiveOffer(std::unique_ptr<webrtc::SessionDescriptionInterface> offer);
- void receiveIceCandidate(std::string mid, int index, std::string sdp);
-
- void ensurePeerConnection();
-
- protected:
- // PeerConnectionObserver
- void OnAddTrack(
- rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver,
- const std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>> &streams) override;
- void OnRemoveTrack(
- rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver) override;
- void OnIceCandidate(const webrtc::IceCandidateInterface *candidate) override;
-
- void OnSignalingChange(
- webrtc::PeerConnectionInterface::SignalingState new_state) override {}
- void OnDataChannel(
- rtc::scoped_refptr<webrtc::DataChannelInterface> channel) override {}
- void OnRenegotiationNeeded() override {}
- void OnIceConnectionChange(
- webrtc::PeerConnectionInterface::IceConnectionState new_state) override {}
- void OnIceGatheringChange(
- webrtc::PeerConnectionInterface::IceGatheringState new_state) override {}
- void OnIceConnectionReceivingChange(bool receiving) override {}
-
- // CreateSessionDescriptionObserver
- void OnSuccess(webrtc::SessionDescriptionInterface* desc) override;
- void OnFailure(webrtc::RTCError error) override;
-
- // Overridables for consumers
- virtual rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
- doCreatePeerConnectionFactory();
- virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface>
- doCreatePeerConnection(webrtc::PeerConnectionFactoryInterface &factory);
- virtual void doAddTracks(webrtc::PeerConnectionInterface &conn) {};
-
- ConductorObserver &observer_;
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> peer_conn_factory_;
- rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_conn_;
- };
-
- }
|