webrtc/examples/unityplugin/simple_peer_connection.h
Harald Alvestrand 73771a893f Prepare to remove old OnFailure implementations
This removes usage of the old OnFailure methods on CreateSessionDescriptionObserver
and SetSessionDescriptionObserver, so that WebRTC will continue to compile
once all the default implementations are removed.

Bug: chromium:589455
Change-Id: Id67295b3ad0c30d24d79589c2041acdd507a19f3
Reviewed-on: https://webrtc-review.googlesource.com/78480
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23427}
2018-05-29 10:34:14 +00:00

136 lines
5.5 KiB
C++

/*
* 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/datachannelinterface.h"
#include "api/mediastreaminterface.h"
#include "api/peerconnectioninterface.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();
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(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_