blob: cb8501d9ce9c5b2a50e36128a9b26c4c3a33506e [file] [log] [blame]
Anders Carlsson73119182018-03-15 09:41:03 +01001/*
2 * Copyright 2018 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef EXAMPLES_OBJCNATIVEAPI_OBJCCALLCLIENT_H_
12#define EXAMPLES_OBJCNATIVEAPI_OBJCCALLCLIENT_H_
13
14#include <memory>
15#include <string>
16
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020017#import "sdk/objc/base/RTCMacros.h"
18
Steve Anton10542f22019-01-11 09:11:00 -080019#include "api/peer_connection_interface.h"
Mirko Bonadeid9708072019-01-25 20:26:48 +010020#include "api/scoped_refptr.h"
Artem Titovd15a5752021-02-10 14:31:24 +010021#include "api/sequence_checker.h"
Markus Handell06d034f2020-07-07 09:17:56 +020022#include "rtc_base/synchronization/mutex.h"
Anders Carlsson73119182018-03-15 09:41:03 +010023
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020024@class RTC_OBJC_TYPE(RTCVideoCapturer);
25@protocol RTC_OBJC_TYPE
26(RTCVideoRenderer);
Anders Carlsson73119182018-03-15 09:41:03 +010027
28namespace webrtc_examples {
29
30class ObjCCallClient {
31 public:
32 ObjCCallClient();
33
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020034 void Call(RTC_OBJC_TYPE(RTCVideoCapturer) * capturer,
35 id<RTC_OBJC_TYPE(RTCVideoRenderer)> remote_renderer);
Anders Carlsson73119182018-03-15 09:41:03 +010036 void Hangup();
37
38 private:
39 class PCObserver : public webrtc::PeerConnectionObserver {
40 public:
41 explicit PCObserver(ObjCCallClient* client);
42
Jonas Olssona4d87372019-07-05 19:08:33 +020043 void OnSignalingChange(webrtc::PeerConnectionInterface::SignalingState new_state) override;
44 void OnDataChannel(rtc::scoped_refptr<webrtc::DataChannelInterface> data_channel) override;
Anders Carlsson73119182018-03-15 09:41:03 +010045 void OnRenegotiationNeeded() override;
46 void OnIceConnectionChange(
47 webrtc::PeerConnectionInterface::IceConnectionState new_state) override;
48 void OnIceGatheringChange(
49 webrtc::PeerConnectionInterface::IceGatheringState new_state) override;
Jonas Olssona4d87372019-07-05 19:08:33 +020050 void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override;
Anders Carlsson73119182018-03-15 09:41:03 +010051
52 private:
Markus Handell06d034f2020-07-07 09:17:56 +020053 ObjCCallClient* const client_;
Anders Carlsson73119182018-03-15 09:41:03 +010054 };
55
56 void CreatePeerConnectionFactory() RTC_RUN_ON(thread_checker_);
57 void CreatePeerConnection() RTC_RUN_ON(thread_checker_);
58 void Connect() RTC_RUN_ON(thread_checker_);
59
Artem Titovc8421c42021-02-02 10:57:19 +010060 webrtc::SequenceChecker thread_checker_;
Anders Carlsson73119182018-03-15 09:41:03 +010061
62 bool call_started_ RTC_GUARDED_BY(thread_checker_);
63
64 const std::unique_ptr<PCObserver> pc_observer_;
65
Jonas Olssona4d87372019-07-05 19:08:33 +020066 rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> pcf_ RTC_GUARDED_BY(thread_checker_);
Anders Carlsson73119182018-03-15 09:41:03 +010067 std::unique_ptr<rtc::Thread> network_thread_ RTC_GUARDED_BY(thread_checker_);
68 std::unique_ptr<rtc::Thread> worker_thread_ RTC_GUARDED_BY(thread_checker_);
Jonas Olssona4d87372019-07-05 19:08:33 +020069 std::unique_ptr<rtc::Thread> signaling_thread_ RTC_GUARDED_BY(thread_checker_);
Anders Carlsson73119182018-03-15 09:41:03 +010070
71 std::unique_ptr<rtc::VideoSinkInterface<webrtc::VideoFrame>> remote_sink_
72 RTC_GUARDED_BY(thread_checker_);
73 rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> video_source_
74 RTC_GUARDED_BY(thread_checker_);
75
Markus Handell06d034f2020-07-07 09:17:56 +020076 webrtc::Mutex pc_mutex_;
Jonas Olssona4d87372019-07-05 19:08:33 +020077 rtc::scoped_refptr<webrtc::PeerConnectionInterface> pc_ RTC_GUARDED_BY(pc_mutex_);
Anders Carlsson73119182018-03-15 09:41:03 +010078};
79
80} // namespace webrtc_examples
81
82#endif // EXAMPLES_OBJCNATIVEAPI_OBJCCALLCLIENT_H_