Commit cee4135a by Anand.suthar

Add agora framework & int's integration

parent 5ca567d5
......@@ -58,12 +58,12 @@
moduleName = "Bhagyashree"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/sunarcmac/Documents/Futurecommerce/Fengshui-Seller-iOS/Bhagyashree/Sunarc/Controller/Me/CorporateCultureViewController.swift"
timestampString = "555413985.959007"
timestampString = "556268845.984683"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "22"
endingLineNumber = "22"
offsetFromSymbolStart = "109">
offsetFromSymbolStart = "104">
</Location>
<Location
shouldBeEnabled = "Yes"
......@@ -73,12 +73,12 @@
moduleName = "Bhagyashree"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/sunarcmac/Documents/Futurecommerce/Fengshui-Seller-iOS/Bhagyashree/Sunarc/Controller/Me/CorporateCultureViewController.swift"
timestampString = "555413985.963246"
timestampString = "556268845.988762"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "22"
endingLineNumber = "22"
offsetFromSymbolStart = "112">
offsetFromSymbolStart = "120">
</Location>
<Location
shouldBeEnabled = "Yes"
......@@ -88,12 +88,12 @@
moduleName = "Bhagyashree"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/sunarcmac/Documents/Futurecommerce/Fengshui-Seller-iOS/Bhagyashree/Sunarc/Controller/Me/CorporateCultureViewController.swift"
timestampString = "555413985.967458"
timestampString = "556268845.991715"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "22"
endingLineNumber = "22"
offsetFromSymbolStart = "607">
offsetFromSymbolStart = "424">
</Location>
<Location
shouldBeEnabled = "Yes"
......@@ -103,12 +103,12 @@
moduleName = "Bhagyashree"
usesParentBreakpointCondition = "Yes"
urlString = "file:///Users/sunarcmac/Documents/Futurecommerce/Fengshui-Seller-iOS/Bhagyashree/Sunarc/Controller/Me/CorporateCultureViewController.swift"
timestampString = "555413985.971509"
timestampString = "556268845.995146"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "22"
endingLineNumber = "22"
offsetFromSymbolStart = "470">
offsetFromSymbolStart = "380">
</Location>
</Locations>
</BreakpointContent>
......
......@@ -46,9 +46,9 @@
<key>NSMicrophoneUsageDescription</key>
<string>Fengushi would like to access your microphone to record audio</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Uses Photo</string>
<string>Fengushi would like to access your photos for sharing</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Uses Photo</string>
<string>Fengushi would like to access your photos for sharing</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
......
......@@ -7,16 +7,30 @@
//
import UIKit
import AgoraRtcEngineKit
class VideoCallingViewController: UIViewController {
@IBOutlet var imgMaleFeMale: UIImageView!
@IBOutlet var imgAvtar: UIImageView!
@IBOutlet var lblCustomerName: UILabel!
@IBOutlet weak var localVideo: UIView! // 3.
@IBOutlet weak var remoteVideo: UIView! // 5.
var agoraKit: AgoraRtcEngineKit!
override func viewDidLoad() {
super.viewDidLoad()
initializeAgoraEngine()
setupVideo()
setupLocalVideo()
joinChannel()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.view.sendSubview(toBack: remoteVideo)
}
}
......@@ -29,11 +43,110 @@ extension VideoCallingViewController {
}
@IBAction func switchCamera() {
agoraKit.switchCamera()
}
@IBAction func endCall() {
leaveChannel()
}
}
extension VideoCallingViewController {
func initializeAgoraEngine() {
agoraKit = AgoraRtcEngineKit.sharedEngine(withAppId: kAGORA_APP_ID, delegate: self)
}
func setupVideo() {
agoraKit.enableVideo() // Default mode is disableVideo
agoraKit.setVideoProfile(.landscape360P, swapWidthAndHeight: false) // Default video profile is 360P
}
func setupLocalVideo() {
let videoCanvas = AgoraRtcVideoCanvas()
videoCanvas.uid = 0
videoCanvas.view = localVideo
videoCanvas.renderMode = .fit
agoraKit.setupLocalVideo(videoCanvas)
}
func joinChannel() {
agoraKit.joinChannel(byToken: nil, channelId: "demoChannel1", info:nil, uid:0) {[weak self] (sid, uid, elapsed) -> Void in
// Join channel "demoChannel1"
if let weakSelf = self {
weakSelf.agoraKit.setEnableSpeakerphone(true)
UIApplication.shared.isIdleTimerDisabled = true
}
}
}
func leaveChannel() {
agoraKit.leaveChannel(nil)
remoteVideo.removeFromSuperview()
localVideo.removeFromSuperview()
}
}
extension VideoCallingViewController: AgoraRtcEngineDelegate {
// Tutorial Step 5
func rtcEngine(_ engine: AgoraRtcEngineKit, firstRemoteVideoDecodedOfUid uid:UInt, size:CGSize, elapsed:Int) {
if (remoteVideo.isHidden) {
remoteVideo.isHidden = false
}
let videoCanvas = AgoraRtcVideoCanvas()
videoCanvas.uid = uid
videoCanvas.view = remoteVideo
videoCanvas.renderMode = .fit
agoraKit.setupRemoteVideo(videoCanvas)
}
@IBAction func clock() {
// Tutorial Step 7
internal func rtcEngine(_ engine: AgoraRtcEngineKit, didOfflineOfUid uid:UInt, reason:AgoraUserOfflineReason) {
self.remoteVideo.isHidden = true
}
// Tutorial Step 10
func rtcEngine(_ engine: AgoraRtcEngineKit, didVideoMuted muted:Bool, byUid:UInt) {
// remoteVideo.isHidden = muted
// remoteVideoMutedIndicator.isHidden = !muted
}
}
......@@ -9,3 +9,4 @@
import Foundation
let kAPP_BLUE_COLOR = 0x066ba4 //Orange 0xf7b237
let kAGORA_APP_ID = "cb8a242be9344e3aba76c8de8707c10c"
......@@ -1078,6 +1078,11 @@
<constraint firstItem="81E-Ic-WDa" firstAttribute="leading" secondItem="PTJ-jA-KrH" secondAttribute="trailing" constant="20" id="q6D-Hk-efn"/>
<constraint firstItem="Ttf-fa-5zM" firstAttribute="leading" secondItem="81E-Ic-WDa" secondAttribute="trailing" constant="8" id="xH3-Fa-GI3"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
<real key="value" value="0.10000000000000001"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="viewHeight" destination="bf7-u2-aKM" id="JbW-VA-Svr"/>
</connections>
......@@ -1101,15 +1106,25 @@
</constraints>
<state key="normal" image="close"/>
<connections>
<action selector="clock" destination="U6b-jI-xwG" eventType="touchUpInside" id="jpx-Hp-yRT"/>
<action selector="endCall" destination="U6b-jI-xwG" eventType="touchUpInside" id="I4F-vZ-aev"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RRd-Zr-GXG">
<rect key="frame" x="255" y="111" width="92" height="128"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="128" id="xVS-Rh-mix"/>
<constraint firstAttribute="width" constant="92" id="zz0-Ip-IHh"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="Npn-MY-dwi" firstAttribute="leading" secondItem="Mfw-qU-Qgh" secondAttribute="leading" id="4RZ-Td-KMg"/>
<constraint firstItem="Mfw-qU-Qgh" firstAttribute="trailing" secondItem="k8L-FA-O78" secondAttribute="trailing" constant="102" id="4pS-t0-vnJ"/>
<constraint firstItem="RRd-Zr-GXG" firstAttribute="top" secondItem="k8L-FA-O78" secondAttribute="bottom" constant="27" id="Dd6-hB-cso"/>
<constraint firstItem="k8L-FA-O78" firstAttribute="leading" secondItem="Mfw-qU-Qgh" secondAttribute="leading" id="KNe-Ik-OYR"/>
<constraint firstItem="Mfw-qU-Qgh" firstAttribute="trailing" secondItem="RRd-Zr-GXG" secondAttribute="trailing" constant="28" id="Kgo-iG-wyv"/>
<constraint firstItem="lAl-ii-80X" firstAttribute="top" secondItem="Mfw-qU-Qgh" secondAttribute="top" constant="30" id="NaJ-sV-TTs"/>
<constraint firstItem="Npn-MY-dwi" firstAttribute="trailing" secondItem="Mfw-qU-Qgh" secondAttribute="trailing" id="Pnx-Fh-ZdF"/>
<constraint firstItem="lAl-ii-80X" firstAttribute="leading" secondItem="eci-ho-zOE" secondAttribute="trailing" constant="15" id="VWc-W0-Ubg"/>
......@@ -1126,11 +1141,13 @@
<outlet property="imgAvtar" destination="81E-Ic-WDa" id="0eO-Ww-60Q"/>
<outlet property="imgMaleFeMale" destination="UTP-dm-kjr" id="gmt-FP-zfz"/>
<outlet property="lblCustomerName" destination="Ttf-fa-5zM" id="Cvs-3n-pQs"/>
<outlet property="localVideo" destination="RRd-Zr-GXG" id="O23-iJ-lsC"/>
<outlet property="remoteVideo" destination="Npn-MY-dwi" id="kEI-sP-ZzP"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="nhp-dO-5PY" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="5161" y="116"/>
<point key="canvasLocation" x="5160.8000000000002" y="115.59220389805098"/>
</scene>
<!--Edit Result View Controller-->
<scene sceneID="fGT-Ih-kSu">
......
......@@ -22,5 +22,5 @@ target 'Bhagyashree' do
pod 'Firebase/Storage'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'AgoraRtcEngine_iOS', '2.2.0'
end
PODS:
- AgoraRtcEngine_iOS (2.2.0)
- BufferSlider (0.1.6)
- Crashlytics (3.10.1):
- Fabric (~> 1.7.5)
......@@ -67,6 +68,7 @@ PODS:
- WMPageController (2.3.0)
DEPENDENCIES:
- AgoraRtcEngine_iOS (= 2.2.0)
- BufferSlider (= 0.1.6)
- Crashlytics
- EasyToast (= 2.0)
......@@ -89,6 +91,7 @@ DEPENDENCIES:
SPEC REPOS:
https://github.com/cocoapods/specs.git:
- AgoraRtcEngine_iOS
- BufferSlider
- Crashlytics
- EasyToast
......@@ -117,6 +120,7 @@ SPEC REPOS:
- WMPageController
SPEC CHECKSUMS:
AgoraRtcEngine_iOS: 616331997992150073b68aa5737929fdee1491c8
BufferSlider: f95e72170e9ba51799c62090295ee50e193521ef
Crashlytics: aee1a064cbbf99b32efa3f056a5f458d846bc8ff
EasyToast: 243209f3536e47ae0d9e12fe5330367d6a0d7b82
......@@ -144,6 +148,6 @@ SPEC CHECKSUMS:
TimeAgoInWords: 633dbb30810de855333dedd1d5033d28b1ecfd6f
WMPageController: 9f219bb8912a1a1f51af11fde61e2682a7b7e7f2
PODFILE CHECKSUM: 612cf2d8c67fd5ad7333652e83c98b9778d9881e
PODFILE CHECKSUM: b376ed8a9c64f69a0b9ee9bf8ad4ed33a5b0118d
COCOAPODS: 1.5.3
//
// Agora Engine SDK
//
// Created by Sting Feng in 2017-11.
// Copyright (c) 2017 Agora.io. All rights reserved.
//
#ifndef AGORA_BASE_H
#define AGORA_BASE_H
#include <stddef.h>
#include <stdio.h>
#include <stdarg.h>
#if defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define AGORA_CALL __cdecl
#if defined(AGORARTC_EXPORT)
#define AGORA_API extern "C" __declspec(dllexport)
#else
#define AGORA_API extern "C" __declspec(dllimport)
#endif
#elif defined(__APPLE__)
#define AGORA_API __attribute__((visibility("default"))) extern "C"
#define AGORA_CALL
#elif defined(__ANDROID__) || defined(__linux__)
#define AGORA_API extern "C" __attribute__((visibility("default")))
#define AGORA_CALL
#else
#define AGORA_API extern "C"
#define AGORA_CALL
#endif
namespace agora {
namespace util {
template<class T>
class AutoPtr {
typedef T value_type;
typedef T* pointer_type;
public:
AutoPtr(pointer_type p=0)
:ptr_(p)
{}
~AutoPtr() {
if (ptr_)
ptr_->release();
}
operator bool() const { return ptr_ != (pointer_type)0; }
value_type& operator*() const {
return *get();
}
pointer_type operator->() const {
return get();
}
pointer_type get() const {
return ptr_;
}
pointer_type release() {
pointer_type tmp = ptr_;
ptr_ = 0;
return tmp;
}
void reset(pointer_type ptr = 0) {
if (ptr != ptr_ && ptr_)
ptr_->release();
ptr_ = ptr;
}
template<class C1, class C2>
bool queryInterface(C1* c, C2 iid) {
pointer_type p = NULL;
if (c && !c->queryInterface(iid, (void**)&p))
{
reset(p);
}
return p != NULL;
}
private:
AutoPtr(const AutoPtr&);
AutoPtr& operator=(const AutoPtr&);
private:
pointer_type ptr_;
};
class IString {
public:
virtual bool empty() const = 0;
virtual const char* c_str() = 0;
virtual const char* data() = 0;
virtual size_t length() = 0;
virtual void release() = 0;
};
typedef AutoPtr<IString> AString;
}//namespace util
enum INTERFACE_ID_TYPE
{
AGORA_IID_AUDIO_DEVICE_MANAGER = 1,
AGORA_IID_VIDEO_DEVICE_MANAGER = 2,
AGORA_IID_RTC_ENGINE_PARAMETER = 3,
AGORA_IID_MEDIA_ENGINE = 4,
AGORA_IID_SIGNALING_ENGINE = 8,
};
enum WARN_CODE_TYPE
{
WARN_INVALID_VIEW = 8,
WARN_INIT_VIDEO = 16,
WARN_PENDING = 20,
WARN_NO_AVAILABLE_CHANNEL = 103,
WARN_LOOKUP_CHANNEL_TIMEOUT = 104,
WARN_LOOKUP_CHANNEL_REJECTED = 105,
WARN_OPEN_CHANNEL_TIMEOUT = 106,
WARN_OPEN_CHANNEL_REJECTED = 107,
// sdk: 100~1000
WARN_SWITCH_LIVE_VIDEO_TIMEOUT = 111,
WARN_SET_CLIENT_ROLE_TIMEOUT = 118,
WARN_OPEN_CHANNEL_INVALID_TICKET = 121,
WARN_OPEN_CHANNEL_TRY_NEXT_VOS = 122,
WARN_AUDIO_MIXING_OPEN_ERROR = 701,
WARN_ADM_RUNTIME_PLAYOUT_WARNING = 1014,
WARN_ADM_RUNTIME_RECORDING_WARNING = 1016,
WARN_ADM_RECORD_AUDIO_SILENCE = 1019,
WARN_ADM_PLAYOUT_MALFUNCTION = 1020,
WARN_ADM_RECORD_MALFUNCTION = 1021,
WARN_ADM_IOS_CATEGORY_NOT_PLAYANDRECORD = 1029,
WARN_ADM_IOS_SAMPLERATE_CHANGE = 1030,
WARN_ADM_RECORD_AUDIO_LOWLEVEL = 1031,
WARN_ADM_PLAYOUT_AUDIO_LOWLEVEL = 1032,
WARN_ADM_WINDOWS_NO_DATA_READY_EVENT = 1040,
WARN_APM_HOWLING = 1051,
WARN_ADM_GLITCH_STATE = 1052,
WARN_ADM_IMPROPER_SETTINGS = 1053,
WARN_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
WARN_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
WARN_ADM_WIN_CORE_IMPROPER_CAPTURE_RELEASE = 1324,
};
enum ERROR_CODE_TYPE
{
ERR_OK = 0,
//1~1000
ERR_FAILED = 1,
ERR_INVALID_ARGUMENT = 2,
ERR_NOT_READY = 3,
ERR_NOT_SUPPORTED = 4,
ERR_REFUSED = 5,
ERR_BUFFER_TOO_SMALL = 6,
ERR_NOT_INITIALIZED = 7,
ERR_NO_PERMISSION = 9,
ERR_TIMEDOUT = 10,
ERR_CANCELED = 11,
ERR_TOO_OFTEN = 12,
ERR_BIND_SOCKET = 13,
ERR_NET_DOWN = 14,
ERR_NET_NOBUFS = 15,
ERR_JOIN_CHANNEL_REJECTED = 17,
ERR_LEAVE_CHANNEL_REJECTED = 18,
ERR_ALREADY_IN_USE = 19,
ERR_ABORTED = 20,
ERR_INIT_NET_ENGINE = 21,
ERR_RESOURCE_LIMITED = 22,
ERR_INVALID_APP_ID = 101,
ERR_INVALID_CHANNEL_NAME = 102,
ERR_TOKEN_EXPIRED = 109,
ERR_INVALID_TOKEN = 110,
ERR_CONNECTION_INTERRUPTED = 111, // only used in web sdk
ERR_CONNECTION_LOST = 112, // only used in web sdk
ERR_NOT_IN_CHANNEL = 113,
ERR_SIZE_TOO_LARGE = 114,
ERR_BITRATE_LIMIT = 115,
ERR_TOO_MANY_DATA_STREAMS = 116,
ERR_STREAM_MESSAGE_TIMEOUT = 117,
ERR_SET_CLIENT_ROLE_NOT_AUTHORIZED = 119,
ERR_DECRYPTION_FAILED = 120,
ERR_CLIENT_IS_BANNED_BY_SERVER = 123,
ERR_WATERMARK_PARAM = 124,
ERR_WATERMARK_PATH = 125,
ERR_WATERMARK_PNG = 126,
ERR_WATERMARKR_INFO = 127,
ERR_WATERMARK_ARGB = 128,
ERR_WATERMARK_READ = 129,
ERR_ENCRYPTED_STREAM_NOT_ALLOWED_PUBLISH = 130,
//signaling: 400~600
ERR_LOGOUT_OTHER = 400, //
ERR_LOGOUT_USER = 401, // logout by user
ERR_LOGOUT_NET = 402, // network failure
ERR_LOGOUT_KICKED = 403, // login in other device
ERR_LOGOUT_PACKET = 404, //
ERR_LOGOUT_TOKEN_EXPIRED = 405, // token expired
ERR_LOGOUT_OLDVERSION = 406, //
ERR_LOGOUT_TOKEN_WRONG = 407,
ERR_LOGOUT_ALREADY_LOGOUT = 408,
ERR_LOGIN_OTHER = 420,
ERR_LOGIN_NET = 421,
ERR_LOGIN_FAILED = 422,
ERR_LOGIN_CANCELED = 423,
ERR_LOGIN_TOKEN_EXPIRED = 424,
ERR_LOGIN_OLD_VERSION = 425,
ERR_LOGIN_TOKEN_WRONG = 426,
ERR_LOGIN_TOKEN_KICKED = 427,
ERR_LOGIN_ALREADY_LOGIN = 428,
ERR_JOIN_CHANNEL_OTHER = 440,
ERR_SEND_MESSAGE_OTHER = 440,
ERR_SEND_MESSAGE_TIMEOUT = 441,
ERR_QUERY_USERNUM_OTHER = 450,
ERR_QUERY_USERNUM_TIMEOUT = 451,
ERR_QUERY_USERNUM_BYUSER = 452,
ERR_LEAVE_CHANNEL_OTHER = 460,
ERR_LEAVE_CHANNEL_KICKED = 461,
ERR_LEAVE_CHANNEL_BYUSER = 462,
ERR_LEAVE_CHANNEL_LOGOUT = 463,
ERR_LEAVE_CHANNEL_DISCONNECTED = 464,
ERR_INVITE_OTHER = 470,
ERR_INVITE_REINVITE = 471,
ERR_INVITE_NET = 472,
ERR_INVITE_PEER_OFFLINE = 473,
ERR_INVITE_TIMEOUT = 474,
ERR_INVITE_CANT_RECV = 475,
//1001~2000
ERR_LOAD_MEDIA_ENGINE = 1001,
ERR_START_CALL = 1002,
ERR_START_CAMERA = 1003,
ERR_START_VIDEO_RENDER = 1004,
ERR_ADM_GENERAL_ERROR = 1005,
ERR_ADM_JAVA_RESOURCE = 1006,
ERR_ADM_SAMPLE_RATE = 1007,
ERR_ADM_INIT_PLAYOUT = 1008,
ERR_ADM_START_PLAYOUT = 1009,
ERR_ADM_STOP_PLAYOUT = 1010,
ERR_ADM_INIT_RECORDING = 1011,
ERR_ADM_START_RECORDING = 1012,
ERR_ADM_STOP_RECORDING = 1013,
ERR_ADM_RUNTIME_PLAYOUT_ERROR = 1015,
ERR_ADM_RUNTIME_RECORDING_ERROR = 1017,
ERR_ADM_RECORD_AUDIO_FAILED = 1018,
ERR_ADM_INIT_LOOPBACK = 1022,
ERR_ADM_START_LOOPBACK = 1023,
ERR_ADM_NO_PERMISSION = 1027,
ERR_ADM_RECORD_AUDIO_IS_ACTIVE = 1033,
ERR_ADM_ANDROID_JNI_JAVA_RESOURCE = 1101,
ERR_ADM_ANDROID_JNI_NO_RECORD_FREQUENCY = 1108,
ERR_ADM_ANDROID_JNI_NO_PLAYBACK_FREQUENCY = 1109,
ERR_ADM_ANDROID_JNI_JAVA_START_RECORD = 1111,
ERR_ADM_ANDROID_JNI_JAVA_START_PLAYBACK = 1112,
ERR_ADM_ANDROID_JNI_JAVA_RECORD_ERROR = 1115,
ERR_ADM_ANDROID_OPENSL_CREATE_ENGINE = 1151,
ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_RECORDER = 1153,
ERR_ADM_ANDROID_OPENSL_START_RECORDER_THREAD = 1156,
ERR_ADM_ANDROID_OPENSL_CREATE_AUDIO_PLAYER = 1157,
ERR_ADM_ANDROID_OPENSL_START_PLAYER_THREAD = 1160,
ERR_ADM_IOS_INPUT_NOT_AVAILABLE = 1201,
ERR_ADM_IOS_ACTIVATE_SESSION_FAIL = 1206,
ERR_ADM_IOS_VPIO_INIT_FAIL = 1210,
ERR_ADM_IOS_VPIO_REINIT_FAIL = 1213,
ERR_ADM_IOS_VPIO_RESTART_FAIL = 1214,
ERR_ADM_IOS_SET_RENDER_CALLBACK_FAIL = 1219,
ERR_ADM_IOS_SESSION_SAMPLERATR_ZERO = 1221,
ERR_ADM_WIN_CORE_INIT = 1301,
ERR_ADM_WIN_CORE_INIT_RECORDING = 1303,
ERR_ADM_WIN_CORE_INIT_PLAYOUT = 1306,
ERR_ADM_WIN_CORE_INIT_PLAYOUT_NULL = 1307,
ERR_ADM_WIN_CORE_START_RECORDING = 1309,
ERR_ADM_WIN_CORE_CREATE_REC_THREAD = 1311,
ERR_ADM_WIN_CORE_CAPTURE_NOT_STARTUP = 1314,
ERR_ADM_WIN_CORE_CREATE_RENDER_THREAD = 1319,
ERR_ADM_WIN_CORE_RENDER_NOT_STARTUP = 1320,
ERR_ADM_WIN_CORE_NO_RECORDING_DEVICE = 1322,
ERR_ADM_WIN_CORE_NO_PLAYOUT_DEVICE = 1323,
ERR_ADM_WIN_WAVE_INIT = 1351,
ERR_ADM_WIN_WAVE_INIT_RECORDING = 1353,
ERR_ADM_WIN_WAVE_INIT_MICROPHONE = 1354,
ERR_ADM_WIN_WAVE_INIT_PLAYOUT = 1355,
ERR_ADM_WIN_WAVE_INIT_SPEAKER = 1356,
ERR_ADM_WIN_WAVE_START_RECORDING = 1357,
ERR_ADM_WIN_WAVE_START_PLAYOUT = 1358,
ERR_ADM_NO_RECORDING_DEVICE = 1359,
ERR_ADM_NO_PLAYOUT_DEVICE = 1360,
// VDM error code starts from 1500
ERR_VDM_CAMERA_NOT_AUTHORIZED = 1501,
// VCM error code starts from 1600
ERR_VCM_UNKNOWN_ERROR = 1600,
ERR_VCM_ENCODER_INIT_ERROR = 1601,
ERR_VCM_ENCODER_ENCODE_ERROR = 1602,
ERR_VCM_ENCODER_SET_ERROR = 1603,
};
enum LOG_FILTER_TYPE
{
LOG_FILTER_OFF = 0,
LOG_FILTER_DEBUG = 0x080f,
LOG_FILTER_INFO = 0x000f,
LOG_FILTER_WARN = 0x000e,
LOG_FILTER_ERROR = 0x000c,
LOG_FILTER_CRITICAL = 0x0008,
LOG_FILTER_MASK = 0x80f,
};
} // namespace agora
#endif
//
// AgoraLiveKit.h
// AgoraLiveKit
//
// Created by Junhao Wang
// Copyright (c) 2017 Agora. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AgoraLivePublisher.h"
#import "AgoraLiveSubscriber.h"
#import "AgoraRtcEngineKit.h"
__attribute__((visibility("default"))) @interface AgoraLiveChannelConfig: NSObject
@property (assign, nonatomic) BOOL videoEnabled;
+(AgoraLiveChannelConfig *_Nonnull) defaultConfig;
@end
@class AgoraLiveKit;
@protocol AgoraLiveDelegate <NSObject>
@optional
/**
* The warning occurred in SDK. The APP could igonre the warning, and the SDK could try to resume automically.
*
* @param kit The live kit
* @param warningCode The warning code
*/
- (void)liveKit:(AgoraLiveKit *_Nonnull)kit didOccurWarning:(AgoraWarningCode)warningCode;
/**
* The error occurred in SDK. The SDK couldn't resume to normal state, and the app need to handle it.
*
* @param kit The live kit
* @param errorCode The error code
*/
- (void)liveKit:(AgoraLiveKit *_Nonnull)kit didOccurError:(AgoraErrorCode)errorCode;
/**
* Event of the user joined the channel.
*
* @param kit The live kit
* @param channel The channel name
* @param uid The local user id
* @param elapsed The elapsed time (ms) from session beginning
*/
- (void)liveKit:(AgoraLiveKit *_Nonnull)kit didJoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger) elapsed;
/**
* The statistics of the call when leave channel
*
* @param kit The live kit
*/
- (void)liveKitDidLeaveChannel:(AgoraLiveKit *_Nonnull)kit;
/**
* Event of the user rejoined the channel
*
* @param kit The live kit
* @param channel The channel name
* @param uid The user id
* @param elapsed The elapsed time (ms) from session beginning
*/
- (void)liveKit:(AgoraLiveKit *_Nonnull)kit didRejoinChannel:(NSString *_Nonnull)channel withUid:(NSUInteger)uid elapsed:(NSInteger) elapsed;
/**
* when token is enabled, and specified token is invalid or expired, this function will be called.
* APP should generate a new token and call renewToken() to refresh the key.
* NOTE: to be compatible with previous version, ERR_TOKEN_EXPIRED and ERR_INVALID_TOKEN are also reported via onError() callback.
* You should move renew of token logic into this callback.
* @param kit The live kit
*/
- (void)liveKitRequestToken:(AgoraLiveKit *_Nonnull)kit;
// statistics
/**
* Statistics of rtc live kit status. Updated every two seconds.
*
* @param kit The live kit
* @param stats The statistics of rtc status, including duration, sent bytes and received bytes
*/
- (void)liveKit:(AgoraLiveKit *_Nonnull)kit reportLiveStats:(AgoraChannelStats *_Nonnull)stats;
// network
/**
* Event of disconnected with server. This event is reported at the moment SDK loses connection with server.
* In the mean time SDK automatically tries to reconnect with the server until APP calls leaveChannel.
*
* @param kit The live kit
*/
- (void)liveKitConnectionDidInterrupted:(AgoraLiveKit *_Nonnull)kit;
/**
* Event of loss connection with server. This event is reported after the connection is interrupted and exceed the retry period (10 seconds by default).
* In the mean time SDK automatically tries to reconnect with the server until APP calls leaveChannel.
*
* @param kit The live kit
*/
- (void)liveKitConnectionDidLost:(AgoraLiveKit *_Nonnull)kit;
/**
* The network quality of local user.
*
* @param kit The live kit
* @param uid The id of user
* @param txQuality The sending network quality
* @param rxQuality The receiving network quality
*/
- (void)liveKit:(AgoraLiveKit *_Nonnull)kit networkQuality:(NSUInteger)uid txQuality:(AgoraNetworkQuality)txQuality rxQuality:(AgoraNetworkQuality)rxQuality;
@end
__attribute__((visibility("default"))) @interface AgoraLiveKit : NSObject
@property (weak, nonatomic) _Nullable id<AgoraLiveDelegate> delegate;
/**
* Get the version of Agora SDK.
*
* @return string, sdk version
*/
+ (NSString *_Nonnull)getSdkVersion;
/**
* Get the native handler of sdk Engine
*/
- (AgoraRtcEngineKit *_Nonnull)getRtcEngineKit;
/**
* Initializes the AgoraLiveKit object.
*
* @param appId The appId is issued to the application developers by Agora.
*
* @return an object of AgoraLiveKit class
*/
+ (instancetype _Nonnull)sharedLiveKitWithAppId:(NSString *_Nonnull)appId;
+ (void)destroy;
/** BEGIN OF COMMON METHODS */
/**
* Create an open UDP socket to the AgoraLiveKit cloud service to join a channel.
Users in the same channel can talk to each other with same vendor key.
Users using different vendor keys cannot call each other.
The method is asynchronous.
*
* @param channelId Joining in the same channel indicates those clients have entered in one room.
* @param token token generated by APP using sign certificate.
* @param channelConfig configration of channel
* @param uid Optional, this argument is the unique ID for each member in one channel.
If set to 0, the SDK automatically allocates an ID, and the id could be gotten in didJoinChannel delegate.
*
* @return 0 when executed successfully, and return negative value when failed.
*/
- (int)joinChannelByToken:(NSString *_Nullable)token
channelId:(NSString *_Nonnull)channelId
config:(AgoraLiveChannelConfig *_Nonnull)channelConfig
uid:(NSUInteger)uid;
/**
* lets the user leave a channel, i.e., hanging up or exiting a call.
After joining a channel, the user must call the leaveChannel method to end the call before joining another one.
It is synchronous, i.e., it only returns until the call ends and all resources are released.
*
* @return 0 if executed successfully, or return negative value if failed.
*/
- (int)leaveChannel;
/**
* Renew token, refresh the new key into agora engine. APP should call this API when SDK reports error ERR_TOKEN_EXPIRED.
*
* @param token new token
*
* @return 0 when executed successfully. return negative value if failed.
*/
- (int)renewToken:(NSString*_Nonnull)token;
/**
* start local video preview, while not sending data to server
*
* @return 0 when this method is called successfully, or negative value when this method failed.
*/
- (int)startPreview:(VIEW_CLASS *_Nonnull)view
renderMode:(AgoraVideoRenderMode)mode;
/**
* stop local video preview
*
* @return 0 when this method is called successfully, or negative value when this method failed.
*/
- (int)stopPreview;
@end
//
// AgoraLivePublisher.h
// AgoraLiveKit
//
// Created by Sting Feng on 2015-8-11.
// Copyright (c) 2015 Agora. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AgoraObjects.h"
@class AgoraLiveKit;
@class AgoraLivePublisher;
@protocol AgoraLivePublisherDelegate <NSObject>
@optional
-(void)publisher:(AgoraLivePublisher *_Nonnull)publisher streamPublishedWithUrl:(NSString *_Nonnull)url error:(AgoraErrorCode)error;
-(void)publisher:(AgoraLivePublisher *_Nonnull)publisher streamUnpublishedWithUrl:(NSString *_Nonnull)url;
-(void)publisherTranscodingUpdated: (AgoraLivePublisher *_Nonnull)publisher;
-(void)publisher:(AgoraLivePublisher *_Nonnull)publisher streamInjectedStatusOfUrl:(NSString *_Nonnull)url uid:(NSUInteger)uid status:(AgoraInjectStreamStatus)status;
@end
__attribute__((visibility("default"))) @interface AgoraLivePublisher: NSObject
-(void)setDelegate:(_Nullable id<AgoraLivePublisherDelegate>)delegate;
-(instancetype _Nonnull)initWithLiveKit:(AgoraLiveKit *_Nonnull)kit;
- (void)setVideoResolution:(CGSize)resolution andFrameRate:(NSInteger)frameRate bitrate:(NSInteger)bitrate;
-(void)setLiveTranscoding:(AgoraLiveTranscoding *_Nullable)transcoding;
-(int)addVideoWatermark:(AgoraImage * _Nonnull)watermark NS_SWIFT_NAME(addVideoWatermark(_:));
-(void)clearVideoWatermarks;
-(void)setMediaType:(AgoraMediaType)mediaType;
-(void)addStreamUrl:(NSString *_Nullable)url transcodingEnabled:(BOOL)transcodingEnabled;
-(void)removeStreamUrl:(NSString *_Nullable)url;
-(void)publish;
-(void)unpublish;
-(void)switchCamera;
- (void)addInjectStreamUrl:(NSString *_Nonnull)url config:(AgoraLiveInjectStreamConfig * _Nonnull)config;
- (void)removeInjectStreamUrl:(NSString *_Nonnull)url;
@end
//
// AgoraLiveSubscriber.h
// AgoraLiveKit
//
// Created by Sting Feng on 2015-8-11.
// Copyright (c) 2015 Agora. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AgoraObjects.h"
@class AgoraLiveKit;
@class AgoraLiveSubscriber;
@protocol AgoraLiveSubscriberDelegate <NSObject>
@optional
// subscriber 相关
- (void)subscriber: (AgoraLiveSubscriber *_Nonnull)subscriber publishedByHostUid:(NSUInteger)uid streamType:(AgoraMediaType) type;
- (void)subscriber: (AgoraLiveSubscriber *_Nonnull)subscriber streamTypeChangedTo:(AgoraMediaType) type byHostUid:(NSUInteger)uid;
// unmute, offline
- (void)subscriber: (AgoraLiveSubscriber *_Nonnull)subscriber unpublishedByHostUid:(NSUInteger)uid;
// video
/**
* Event of the first frame of remote user is rendering on the screen.
*
* @param subscriber The live subscriber
* @param uid The remote user id
* @param size The size of video stream
* @param elapsed The elapsed time(ms) from the beginning of the session.
*/
- (void)subscriber:(AgoraLiveSubscriber *_Nonnull)subscriber firstRemoteVideoDecodedOfHostUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed;
/**
* Event of video size changed for local or remote user
*
* @param subscriber The live subscriber
* @param uid The user id
* @param size The new size of video
* @param rotation The new rotate of video
*/
- (void)subscriber:(AgoraLiveSubscriber *_Nonnull)subscriber videoSizeChangedOfHostUid:(NSUInteger)uid size:(CGSize)size rotation:(NSInteger)rotation;
@end
__attribute__((visibility("default"))) @interface AgoraLiveSubscriber: NSObject // AgoraLiveSubscriber
-(instancetype _Nonnull)initWithLiveKit:(AgoraLiveKit * _Nonnull)kit;
-(void)setDelegate:(_Nullable id<AgoraLiveSubscriberDelegate>)delegate;
- (void)subscribeToHostUid:(NSUInteger)uid
mediaType:(AgoraMediaType)mediaType
view:(VIEW_CLASS *_Nullable)view
renderMode:(AgoraVideoRenderMode)mode
videoType:(AgoraVideoStreamType)videoType;
-(void)unsubscribeToHostUid:(NSUInteger)uid;
@end
//
// AgoraMediaIO.h
// AgoraRtcEngineKit
//
// Created by Yuhua Gong
// Copyright (c) 2017 Agora. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
#import "AgoraEnumerates.h"
#import "AgoraObjects.h"
typedef NS_ENUM(NSUInteger, AgoraVideoPixelFormat) {
AgoraVideoPixelFormatI420 = 1,
AgoraVideoPixelFormatBGRA = 2,
AgoraVideoPixelFormatNV12 = 8,
};
typedef NS_ENUM(NSInteger, AgoraVideoRotation) {
AgoraVideoRotationNone = 0,
AgoraVideoRotation90 = 1,
AgoraVideoRotation180 = 2,
AgoraVideoRotation270 = 3,
};
typedef NS_ENUM(NSInteger, AgoraVideoBufferType) {
AgoraVideoBufferTypePixelBuffer = 1,
AgoraVideoBufferTypeRawData = 2,
};
// Video Source consumer Delegate
@protocol AgoraVideoFrameConsumer <NSObject>
- (void)consumePixelBuffer:(CVPixelBufferRef _Nonnull)pixelBuffer
withTimestamp:(CMTime)timestamp
rotation:(AgoraVideoRotation)rotation;
- (void)consumeRawData:(void * _Nonnull)rawData
withTimestamp:(CMTime)timestamp
format:(AgoraVideoPixelFormat)format
size:(CGSize)size
rotation:(AgoraVideoRotation)rotation;
@end
// Video Source Protocol
@protocol AgoraVideoSourceProtocol <NSObject>
@required
@property (strong) id<AgoraVideoFrameConsumer> _Nullable consumer;
- (BOOL)shouldInitialize;
- (void)shouldStart;
- (void)shouldStop;
- (void)shouldDispose;
- (AgoraVideoBufferType)bufferType;
@end
// Video Render Protocol
@protocol AgoraVideoSinkProtocol <NSObject>
@required
- (BOOL)shouldInitialize;
- (void)shouldStart;
- (void)shouldStop;
- (void)shouldDispose;
- (AgoraVideoBufferType)bufferType;
- (AgoraVideoPixelFormat)pixelFormat;
@optional
- (void)renderPixelBuffer:(CVPixelBufferRef _Nonnull)pixelBuffer
rotation:(AgoraVideoRotation)rotation;
- (void)renderRawData:(void * _Nonnull)rawData
size:(CGSize)size
rotation:(AgoraVideoRotation)rotation;
@end
#pragma mark - Agora default media io
typedef NS_ENUM(NSInteger, AgoraRtcDefaultCameraPosition) {
AgoraRtcDefaultCameraPositionFront = 0,
AgoraRtcDefaultCameraPositionBack = 1
};
__attribute__((visibility("default"))) @interface AgoraRtcDefaultCamera: NSObject<AgoraVideoSourceProtocol>
#if TARGET_OS_IPHONE
@property (nonatomic, assign) AgoraRtcDefaultCameraPosition position;
- (instancetype _Nonnull)initWithPosition:(AgoraRtcDefaultCameraPosition)position;
#endif
@end
#if (!(TARGET_OS_IPHONE) && (TARGET_OS_MAC))
__attribute__((visibility("default"))) @interface AgoraRtcScreenCapture: NSObject<AgoraVideoSourceProtocol>
@property (nonatomic, readonly) NSUInteger windowId;
+ (instancetype _Nonnull)fullScreenCaptureWithFrequency:(NSInteger)captureFrequency
bitRate:(NSInteger)bitRate;
+ (instancetype _Nonnull)windowCaptureWithId:(CGWindowID)windowId
captureFrequency:(NSInteger)captureFrequency
bitRate:(NSInteger)bitRate
rect:(CGRect)rect;
@end
#endif
__attribute__((visibility("default"))) @interface AgoraRtcDefaultRenderer: NSObject<AgoraVideoSinkProtocol>
@property (nonatomic, strong, readonly) VIEW_CLASS * _Nonnull view;
@property (nonatomic, assign) AgoraVideoRenderMode mode;
- (instancetype _Nonnull)initWithView:(VIEW_CLASS * _Nonnull)view
renderMode:(AgoraVideoRenderMode)mode;
@end
#ifndef AGORA_MEDIA_ENGINE_H
#define AGORA_MEDIA_ENGINE_H
#if defined _WIN32 || defined __CYGWIN__
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
#include <stdint.h>
#endif
namespace agora
{
namespace media
{
enum MEDIA_SOURCE_TYPE {
AUDIO_PLAYOUT_SOURCE = 0,
AUDIO_RECORDING_SOURCE = 1,
};
class IAudioFrameObserver
{
public:
enum AUDIO_FRAME_TYPE {
FRAME_TYPE_PCM16 = 0, //PCM 16bit little endian
};
struct AudioFrame {
AUDIO_FRAME_TYPE type;
int samples; //number of samples in this frame
int bytesPerSample; //number of bytes per sample: 2 for PCM16
int channels; //number of channels (data are interleaved if stereo)
int samplesPerSec; //sampling rate
void* buffer; //data buffer
int64_t renderTimeMs;
};
public:
virtual bool onRecordAudioFrame(AudioFrame& audioFrame) = 0;
virtual bool onPlaybackAudioFrame(AudioFrame& audioFrame) = 0;
virtual bool onMixedAudioFrame(AudioFrame& audioFrame) = 0;
virtual bool onPlaybackAudioFrameBeforeMixing(unsigned int uid, AudioFrame& audioFrame) = 0;
};
class IVideoFrameObserver
{
public:
enum VIDEO_FRAME_TYPE {
FRAME_TYPE_YUV420 = 0, //YUV 420 format
};
struct VideoFrame {
VIDEO_FRAME_TYPE type;
int width; //width of video frame
int height; //height of video frame
int yStride; //stride of Y data buffer
int uStride; //stride of U data buffer
int vStride; //stride of V data buffer
void* yBuffer; //Y data buffer
void* uBuffer; //U data buffer
void* vBuffer; //V data buffer
int rotation; // rotation of this frame (0, 90, 180, 270)
int64_t renderTimeMs;
};
public:
virtual bool onCaptureVideoFrame(VideoFrame& videoFrame) = 0;
virtual bool onRenderVideoFrame(unsigned int uid, VideoFrame& videoFrame) = 0;
};
class IVideoFrame
{
public:
enum PLANE_TYPE {
Y_PLANE = 0,
U_PLANE = 1,
V_PLANE = 2,
NUM_OF_PLANES = 3
};
enum VIDEO_TYPE {
VIDEO_TYPE_UNKNOWN = 0,
VIDEO_TYPE_I420 = 1,
VIDEO_TYPE_IYUV = 2,
VIDEO_TYPE_RGB24 = 3,
VIDEO_TYPE_ABGR = 4,
VIDEO_TYPE_ARGB = 5,
VIDEO_TYPE_ARGB4444 = 6,
VIDEO_TYPE_RGB565 = 7,
VIDEO_TYPE_ARGB1555 = 8,
VIDEO_TYPE_YUY2 = 9,
VIDEO_TYPE_YV12 = 10,
VIDEO_TYPE_UYVY = 11,
VIDEO_TYPE_MJPG = 12,
VIDEO_TYPE_NV21 = 13,
VIDEO_TYPE_NV12 = 14,
VIDEO_TYPE_BGRA = 15,
VIDEO_TYPE_RGBA = 16,
};
virtual void release() = 0;
virtual const unsigned char* buffer(PLANE_TYPE type) const = 0;
// Copy frame: If required size is bigger than allocated one, new buffers of
// adequate size will be allocated.
// Return value: 0 on success ,-1 on error.
virtual int copyFrame(IVideoFrame** dest_frame) const = 0;
// Convert frame
// Input:
// - src_frame : Reference to a source frame.
// - dst_video_type : Type of output video.
// - dst_sample_size : Required only for the parsing of MJPG.
// - dst_frame : Pointer to a destination frame.
// Return value: 0 if OK, < 0 otherwise.
// It is assumed that source and destination have equal height.
virtual int convertFrame(VIDEO_TYPE dst_video_type, int dst_sample_size, unsigned char* dst_frame) const = 0;
// Get allocated size per plane.
virtual int allocated_size(PLANE_TYPE type) const = 0;
// Get allocated stride per plane.
virtual int stride(PLANE_TYPE type) const = 0;
// Get frame width.
virtual int width() const = 0;
// Get frame height.
virtual int height() const = 0;
// Get frame timestamp (90kHz).
virtual unsigned int timestamp() const = 0;
// Get render time in milliseconds.
virtual int64_t render_time_ms() const = 0;
// Return true if underlying plane buffers are of zero size, false if not.
virtual bool IsZeroSize() const = 0;
};
class IExternalVideoRenderCallback
{
public:
virtual void onViewSizeChanged(int width, int height) = 0;
virtual void onViewDestroyed() = 0;
};
struct ExternalVideoRenerContext
{
IExternalVideoRenderCallback* renderCallback;
void* view;
int renderMode;
int zOrder;
float left;
float top;
float right;
float bottom;
};
class IExternalVideoRender
{
public:
virtual void release() = 0;
virtual int initialize() = 0;
virtual int deliverFrame(const IVideoFrame& videoFrame, int rotation, bool mirrored) = 0;
};
class IExternalVideoRenderFactory
{
public:
virtual IExternalVideoRender* createRenderInstance(const ExternalVideoRenerContext& context) = 0;
};
class IMediaEngine
{
public:
virtual void release() = 0;
virtual int registerAudioFrameObserver(IAudioFrameObserver* observer) = 0;
virtual int registerVideoFrameObserver(IVideoFrameObserver* observer) = 0;
virtual int registerVideoRenderFactory(IExternalVideoRenderFactory* factory) = 0;
virtual int pushAudioFrame(MEDIA_SOURCE_TYPE type, IAudioFrameObserver::AudioFrame *frame, bool wrap = false){ return -1; }
};
} //media
} //agora
#endif //AGORA_MEDIA_ENGINE_H
//
// Agora SDK
//
// Created by Sting Feng in 2017-11.
// Copyright (c) 2017 Agora.io. All rights reserved.
//
#ifndef AGORA_SERVICE_H
#define AGORA_SERVICE_H
#include "AgoraBase.h"
namespace agora {
namespace rtc {
class IRtcEngine;
}
namespace signaling {
class ISignalingEngine;
}
namespace base {
struct AgoraServiceContext
{
};
class IAgoraService
{
public:
virtual void release() = 0;
/**
* initialize the engine
* @param [in] context
* the RTC engine context
* @return return 0 if success or an error code
*/
virtual int initialize(const AgoraServiceContext& context) = 0;
/**
* get the version information of the SDK
* @param [in, out] build
* the build number
* @return return the version number string in char format
*/
virtual const char* getVersion(int* build) = 0;
virtual rtc::IRtcEngine* createRtcEngine() = 0;
virtual signaling::ISignalingEngine* createSignalingEngine() = 0;
};
} //namespace base
} // namespace agora
/**
* to get the version number of the SDK
* @param [in, out] build
* the build number of Agora SDK
* @return returns the string of the version of the SDK
*/
AGORA_API const char* AGORA_CALL getAgoraSdkVersion(int* build);
/**
* create the RTC engine object and return the pointer
* @param [in] err
* the error code
* @return returns the description of the error code
*/
AGORA_API const char* AGORA_CALL getAgoraSdkErrorDescription(int err);
/**
* create the Agora Service object and return the pointer
* @return returns pointer of the Agora Service object
*/
AGORA_API agora::base::IAgoraService* AGORA_CALL createAgoraService();
AGORA_API int AGORA_CALL setAgoraSdkExternalSymbolLoader(void* (*func)(const char* symname));
#endif
framework module AgoraRtcEngineKit {
umbrella header "AgoraRtcEngineKit.h"
export *
module * { export * }
}
PODS:
- AgoraRtcEngine_iOS (2.2.0)
- BufferSlider (0.1.6)
- Crashlytics (3.10.1):
- Fabric (~> 1.7.5)
......@@ -67,6 +68,7 @@ PODS:
- WMPageController (2.3.0)
DEPENDENCIES:
- AgoraRtcEngine_iOS (= 2.2.0)
- BufferSlider (= 0.1.6)
- Crashlytics
- EasyToast (= 2.0)
......@@ -89,6 +91,7 @@ DEPENDENCIES:
SPEC REPOS:
https://github.com/cocoapods/specs.git:
- AgoraRtcEngine_iOS
- BufferSlider
- Crashlytics
- EasyToast
......@@ -117,6 +120,7 @@ SPEC REPOS:
- WMPageController
SPEC CHECKSUMS:
AgoraRtcEngine_iOS: 616331997992150073b68aa5737929fdee1491c8
BufferSlider: f95e72170e9ba51799c62090295ee50e193521ef
Crashlytics: aee1a064cbbf99b32efa3f056a5f458d846bc8ff
EasyToast: 243209f3536e47ae0d9e12fe5330367d6a0d7b82
......@@ -144,6 +148,6 @@ SPEC CHECKSUMS:
TimeAgoInWords: 633dbb30810de855333dedd1d5033d28b1ecfd6f
WMPageController: 9f219bb8912a1a1f51af11fde61e2682a7b7e7f2
PODFILE CHECKSUM: 612cf2d8c67fd5ad7333652e83c98b9778d9881e
PODFILE CHECKSUM: b376ed8a9c64f69a0b9ee9bf8ad4ed33a5b0118d
COCOAPODS: 1.5.3
This source diff could not be displayed because it is too large. You can view the blob instead.
# Acknowledgements
This application makes use of the following third party libraries:
## AgoraRtcEngine_iOS
Copyright 2018 agora.io. All rights reserved.
## BufferSlider
Copyright (c) 2016 raxcat <raxcat@gmail.com>
......
......@@ -14,6 +14,17 @@
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2018 agora.io. All rights reserved.
</string>
<key>License</key>
<string>Copyright</string>
<key>Title</key>
<string>AgoraRtcEngine_iOS</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2016 raxcat &lt;raxcat@gmail.com&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy
......
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BufferSlider" "${PODS_CONFIGURATION_BUILD_DIR}/EasyToast" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseStorage" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImageSlideshow" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Pastel" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/TimeAgoInWords" "${PODS_CONFIGURATION_BUILD_DIR}/WMPageController" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BufferSlider" "${PODS_CONFIGURATION_BUILD_DIR}/EasyToast" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseStorage" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImageSlideshow" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Pastel" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/TimeAgoInWords" "${PODS_CONFIGURATION_BUILD_DIR}/WMPageController" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/AgoraRtcEngine_iOS" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BufferSlider/BufferSlider.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/EasyToast/EasyToast.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseStorage/FirebaseStorage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ImageSlideshow/ImageSlideshow.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Pastel/Pastel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TimeAgoInWords/TimeAgoInWords.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WMPageController/WMPageController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase"
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"sqlite3" -l"z" -framework "BufferSlider" -framework "CFNetwork" -framework "Crashlytics" -framework "EasyToast" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "FirebaseStorage" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "IQKeyboardManagerSwift" -framework "ImageSlideshow" -framework "Kingfisher" -framework "MJRefresh" -framework "MobileCoreServices" -framework "Pastel" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "StoreKit" -framework "SwiftDate" -framework "SystemConfiguration" -framework "TimeAgoInWords" -framework "UIKit" -framework "WMPageController" -framework "leveldb" -framework "nanopb"
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"resolv" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AgoraRtcEngineKit" -framework "AudioToolbox" -framework "BufferSlider" -framework "CFNetwork" -framework "CoreMedia" -framework "CoreTelephony" -framework "Crashlytics" -framework "EasyToast" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "FirebaseStorage" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "IQKeyboardManagerSwift" -framework "ImageSlideshow" -framework "Kingfisher" -framework "MJRefresh" -framework "MobileCoreServices" -framework "Pastel" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "StoreKit" -framework "SwiftDate" -framework "SystemConfiguration" -framework "TimeAgoInWords" -framework "UIKit" -framework "VideoToolbox" -framework "WMPageController" -framework "leveldb" -framework "nanopb"
OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
......
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BufferSlider" "${PODS_CONFIGURATION_BUILD_DIR}/EasyToast" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseStorage" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImageSlideshow" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Pastel" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/TimeAgoInWords" "${PODS_CONFIGURATION_BUILD_DIR}/WMPageController" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BufferSlider" "${PODS_CONFIGURATION_BUILD_DIR}/EasyToast" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseStorage" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/ImageSlideshow" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Pastel" "${PODS_CONFIGURATION_BUILD_DIR}/Realm" "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/TimeAgoInWords" "${PODS_CONFIGURATION_BUILD_DIR}/WMPageController" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/AgoraRtcEngine_iOS" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BufferSlider/BufferSlider.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/EasyToast/EasyToast.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseDatabase/FirebaseDatabase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseStorage/FirebaseStorage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ImageSlideshow/ImageSlideshow.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Pastel/Pastel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Realm/Realm.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RealmSwift/RealmSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TimeAgoInWords/TimeAgoInWords.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WMPageController/WMPageController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Firebase"
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"sqlite3" -l"z" -framework "BufferSlider" -framework "CFNetwork" -framework "Crashlytics" -framework "EasyToast" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "FirebaseStorage" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "IQKeyboardManagerSwift" -framework "ImageSlideshow" -framework "Kingfisher" -framework "MJRefresh" -framework "MobileCoreServices" -framework "Pastel" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "StoreKit" -framework "SwiftDate" -framework "SystemConfiguration" -framework "TimeAgoInWords" -framework "UIKit" -framework "WMPageController" -framework "leveldb" -framework "nanopb"
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"icucore" -l"resolv" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AgoraRtcEngineKit" -framework "AudioToolbox" -framework "BufferSlider" -framework "CFNetwork" -framework "CoreMedia" -framework "CoreTelephony" -framework "Crashlytics" -framework "EasyToast" -framework "Fabric" -framework "FirebaseAnalytics" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseDatabase" -framework "FirebaseInstanceID" -framework "FirebaseNanoPB" -framework "FirebaseStorage" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleToolboxForMac" -framework "IQKeyboardManagerSwift" -framework "ImageSlideshow" -framework "Kingfisher" -framework "MJRefresh" -framework "MobileCoreServices" -framework "Pastel" -framework "Realm" -framework "RealmSwift" -framework "SVProgressHUD" -framework "Security" -framework "StoreKit" -framework "SwiftDate" -framework "SystemConfiguration" -framework "TimeAgoInWords" -framework "UIKit" -framework "VideoToolbox" -framework "WMPageController" -framework "leveldb" -framework "nanopb"
OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment