| /* | |
| * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| #ifndef EXAMPLES_UNITYPLUGIN_SIMPLE_PEER_CONNECTION_H_ | |
| #define EXAMPLES_UNITYPLUGIN_SIMPLE_PEER_CONNECTION_H_ | |
| #include <map> | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| #include "api/data_channel_interface.h" | |
| #include "api/media_stream_interface.h" | |
| #include "api/peer_connection_interface.h" | |
| #include "examples/unityplugin/unity_plugin_apis.h" | |
| #include "examples/unityplugin/video_observer.h" | |
| class SimplePeerConnection : public webrtc::PeerConnectionObserver, | |
| public webrtc::CreateSessionDescriptionObserver, | |
| public webrtc::DataChannelObserver, | |
| public webrtc::AudioTrackSinkInterface { | |
| public: | |
| SimplePeerConnection() {} | |
| ~SimplePeerConnection() {} | |
| bool InitializePeerConnection(const char** turn_urls, | |
| const int no_of_urls, | |
| const char* username, | |
| const char* credential, | |
| bool is_receiver); | |
| void DeletePeerConnection(); | |
| void AddStreams(bool audio_only); | |
| bool CreateDataChannel(); | |
| bool CreateOffer(); | |
| bool CreateAnswer(); | |
| bool SendDataViaDataChannel(const std::string& data); | |
| void SetAudioControl(bool is_mute, bool is_record); | |
| // Register callback functions. | |
| void RegisterOnLocalI420FrameReady(I420FRAMEREADY_CALLBACK callback); | |
| void RegisterOnRemoteI420FrameReady(I420FRAMEREADY_CALLBACK callback); | |
| void RegisterOnLocalDataChannelReady(LOCALDATACHANNELREADY_CALLBACK callback); | |
| void RegisterOnDataFromDataChannelReady( | |
| DATAFROMEDATECHANNELREADY_CALLBACK callback); | |
| void RegisterOnFailure(FAILURE_CALLBACK callback); | |
| void RegisterOnAudioBusReady(AUDIOBUSREADY_CALLBACK callback); | |
| void RegisterOnLocalSdpReadytoSend(LOCALSDPREADYTOSEND_CALLBACK callback); | |
| void RegisterOnIceCandiateReadytoSend( | |
| ICECANDIDATEREADYTOSEND_CALLBACK callback); | |
| bool SetRemoteDescription(const char* type, const char* sdp); | |
| bool AddIceCandidate(const char* sdp, | |
| const int sdp_mlineindex, | |
| const char* sdp_mid); | |
| protected: | |
| // create a peerconneciton and add the turn servers info to the configuration. | |
| bool CreatePeerConnection(const char** turn_urls, | |
| const int no_of_urls, | |
| const char* username, | |
| const char* credential); | |
| void CloseDataChannel(); | |
| void SetAudioControl(); | |
| // PeerConnectionObserver implementation. | |
| void OnSignalingChange( | |
| webrtc::PeerConnectionInterface::SignalingState new_state) override {} | |
| void OnAddStream( | |
| rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) override; | |
| void OnRemoveStream( | |
| rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) 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 OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override; | |
| void OnIceConnectionReceivingChange(bool receiving) override {} | |
| // CreateSessionDescriptionObserver implementation. | |
| void OnSuccess(webrtc::SessionDescriptionInterface* desc) override; | |
| void OnFailure(webrtc::RTCError error) override; | |
| // DataChannelObserver implementation. | |
| void OnStateChange() override; | |
| void OnMessage(const webrtc::DataBuffer& buffer) override; | |
| // AudioTrackSinkInterface implementation. | |
| void OnData(const void* audio_data, | |
| int bits_per_sample, | |
| int sample_rate, | |
| size_t number_of_channels, | |
| size_t number_of_frames) override; | |
| // Get remote audio tracks ssrcs. | |
| std::vector<uint32_t> GetRemoteAudioTrackSsrcs(); | |
| private: | |
| rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_; | |
| rtc::scoped_refptr<webrtc::DataChannelInterface> data_channel_; | |
| std::map<std::string, rtc::scoped_refptr<webrtc::MediaStreamInterface> > | |
| active_streams_; | |
| std::unique_ptr<VideoObserver> local_video_observer_; | |
| std::unique_ptr<VideoObserver> remote_video_observer_; | |
| webrtc::MediaStreamInterface* remote_stream_ = nullptr; | |
| webrtc::PeerConnectionInterface::RTCConfiguration config_; | |
| LOCALDATACHANNELREADY_CALLBACK OnLocalDataChannelReady = nullptr; | |
| DATAFROMEDATECHANNELREADY_CALLBACK OnDataFromDataChannelReady = nullptr; | |
| FAILURE_CALLBACK OnFailureMessage = nullptr; | |
| AUDIOBUSREADY_CALLBACK OnAudioReady = nullptr; | |
| LOCALSDPREADYTOSEND_CALLBACK OnLocalSdpReady = nullptr; | |
| ICECANDIDATEREADYTOSEND_CALLBACK OnIceCandiateReady = nullptr; | |
| bool is_mute_audio_ = false; | |
| bool is_record_audio_ = false; | |
| bool mandatory_receive_ = false; | |
| // disallow copy-and-assign | |
| SimplePeerConnection(const SimplePeerConnection&) = delete; | |
| SimplePeerConnection& operator=(const SimplePeerConnection&) = delete; | |
| }; | |
| #endif // EXAMPLES_UNITYPLUGIN_SIMPLE_PEER_CONNECTION_H_ |