You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Conductor.h 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include <webrtc/api/peer_connection_interface.h>
  2. #include <memory>
  3. namespace rtcutil {
  4. class ConductorObserver {
  5. public:
  6. enum class ErrorType {
  7. WARNING,
  8. RECEIVE_OFFER,
  9. RECEIVE_ICE_CANDIDATE,
  10. CREATE_ANSWER,
  11. };
  12. virtual void onError(ErrorType type, std::string err);
  13. virtual void onIceCandidate(std::string mid, int index, std::string sdp) = 0;
  14. virtual void onAnswer(std::string sdp) = 0;
  15. virtual void onRemoteTrack(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track) = 0;
  16. virtual void removeRemoteTrack(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track) = 0;
  17. };
  18. class Conductor:
  19. public webrtc::PeerConnectionObserver,
  20. public webrtc::CreateSessionDescriptionObserver {
  21. public:
  22. Conductor(ConductorObserver &observer): observer_(observer) {}
  23. void receiveOffer(const std::string &sdp);
  24. void receiveOffer(std::unique_ptr<webrtc::SessionDescriptionInterface> offer);
  25. void receiveIceCandidate(std::string mid, int index, std::string sdp);
  26. void ensurePeerConnection();
  27. protected:
  28. // PeerConnectionObserver
  29. void OnAddTrack(
  30. rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver,
  31. const std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>> &streams) override;
  32. void OnRemoveTrack(
  33. rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver) override;
  34. void OnIceCandidate(const webrtc::IceCandidateInterface *candidate) override;
  35. void OnSignalingChange(
  36. webrtc::PeerConnectionInterface::SignalingState new_state) override {}
  37. void OnDataChannel(
  38. rtc::scoped_refptr<webrtc::DataChannelInterface> channel) override {}
  39. void OnRenegotiationNeeded() override {}
  40. void OnIceConnectionChange(
  41. webrtc::PeerConnectionInterface::IceConnectionState new_state) override {}
  42. void OnIceGatheringChange(
  43. webrtc::PeerConnectionInterface::IceGatheringState new_state) override {}
  44. void OnIceConnectionReceivingChange(bool receiving) override {}
  45. // CreateSessionDescriptionObserver
  46. void OnSuccess(webrtc::SessionDescriptionInterface* desc) override;
  47. void OnFailure(webrtc::RTCError error) override;
  48. // Overridables for consumers
  49. virtual rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
  50. doCreatePeerConnectionFactory();
  51. virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface>
  52. doCreatePeerConnection(webrtc::PeerConnectionFactoryInterface &factory);
  53. virtual void doAddTracks(webrtc::PeerConnectionInterface &conn) {};
  54. ConductorObserver &observer_;
  55. rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> peer_conn_factory_;
  56. rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_conn_;
  57. };
  58. }