Chromium Code Reviews| Index: webrtc/examples/unityplugin/simple_peer_connection.h |
| diff --git a/webrtc/examples/unityplugin/simple_peer_connection.h b/webrtc/examples/unityplugin/simple_peer_connection.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e7bfc1ce7e2558efef72cc6451ec9a79d5b58c55 |
| --- /dev/null |
| +++ b/webrtc/examples/unityplugin/simple_peer_connection.h |
| @@ -0,0 +1,125 @@ |
| +/* |
| + * 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 WEBRTC_EXAMPLES_UNITYPLUGIN_SIMPLE_PEER_CONNECTION_H_ |
| +#define WEBRTC_EXAMPLES_UNITYPLUGIN_SIMPLE_PEER_CONNECTION_H_ |
| + |
| +#include <map> |
| +#include <memory> |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "webrtc/api/datachannelinterface.h" |
| +#include "webrtc/api/mediastreaminterface.h" |
| +#include "webrtc/api/peerconnectioninterface.h" |
| +#include "webrtc/examples/unityplugin/unity_plugin_apis.h" |
| + |
| +class Conductor : public webrtc::PeerConnectionObserver, |
|
lliuu
2017/04/24 17:25:32
Can we call this SimplePeerConnection instead? Con
GeorgeZ
2017/04/24 22:57:35
I modify the class name as you suggested.
Conducto
|
| + public webrtc::CreateSessionDescriptionObserver, |
| + public webrtc::DataChannelObserver, |
| + public webrtc::AudioTrackSinkInterface { |
| + public: |
| + Conductor() {} |
| + ~Conductor() {} |
| + |
| + bool InitializePeerConnection(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 RegisterOnVideoFramReady(VIDEOFRAMEREADY_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 ReceivedSdp(const char* sdp); |
| + bool ReceivedIceCandidate(const char* ice_candidate); |
| + |
| + bool SetHeadPosition(float x, float y, float z); |
| + bool SetHeadRotation(float rx, float ry, float rz, float rw); |
| + bool SetRemoteAudioPosition(float x, float y, float z); |
| + bool SetRemoteAudioRotation(float rx, float ry, float rz, float rw); |
| + |
| + protected: |
| + bool CreatePeerConnection(bool receiver); |
| + void CloseDataChannel(); |
| + std::unique_ptr<cricket::VideoCapturer> OpenVideoCaptureDevice(); |
| + 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(const std::string& 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_; |
| + |
| + webrtc::MediaStreamInterface* remote_stream_ = nullptr; |
| + |
| + VIDEOFRAMEREADY_CALLBACK OnVideoFrameReady = nullptr; |
| + 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; |
| + |
| + // disallow copy-and-assign |
| + Conductor(const Conductor&) = delete; |
| + Conductor& operator=(const Conductor&) = delete; |
| +}; |
| + |
| +#endif // WEBRTC_EXAMPLES_UNITYPLUGIN_SIMPLE_PEER_CONNECTION_H_ |