diff --git a/android/build.gradle b/android/build.gradle index fe74de2c..eaba25bc 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -45,7 +45,7 @@ repositories { } dependencies { - implementation ('org.jitsi.react:jitsi-meet-sdk:+') { + implementation ('org.jitsi.react:jitsi-meet-sdk:1.16+') { transitive = true } } diff --git a/ios/Headers/RTCAudioSession.h b/ios/Headers/RTCAudioSession.h new file mode 100644 index 00000000..354634ec --- /dev/null +++ b/ios/Headers/RTCAudioSession.h @@ -0,0 +1,248 @@ +/* + * Copyright 2016 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. + */ + +#import +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +extern NSString * const kRTCAudioSessionErrorDomain; +/** Method that requires lock was called without lock. */ +extern NSInteger const kRTCAudioSessionErrorLockRequired; +/** Unknown configuration error occurred. */ +extern NSInteger const kRTCAudioSessionErrorConfiguration; + +@class RTCAudioSession; +@class RTCAudioSessionConfiguration; + +// Surfaces AVAudioSession events. WebRTC will listen directly for notifications +// from AVAudioSession and handle them before calling these delegate methods, +// at which point applications can perform additional processing if required. +RTC_EXPORT +@protocol RTCAudioSessionDelegate + +@optional +/** Called on a system notification thread when AVAudioSession starts an + * interruption event. + */ +- (void)audioSessionDidBeginInterruption:(RTCAudioSession *)session; + +/** Called on a system notification thread when AVAudioSession ends an + * interruption event. + */ +- (void)audioSessionDidEndInterruption:(RTCAudioSession *)session + shouldResumeSession:(BOOL)shouldResumeSession; + +/** Called on a system notification thread when AVAudioSession changes the + * route. + */ +- (void)audioSessionDidChangeRoute:(RTCAudioSession *)session + reason:(AVAudioSessionRouteChangeReason)reason + previousRoute:(AVAudioSessionRouteDescription *)previousRoute; + +/** Called on a system notification thread when AVAudioSession media server + * terminates. + */ +- (void)audioSessionMediaServerTerminated:(RTCAudioSession *)session; + +/** Called on a system notification thread when AVAudioSession media server + * restarts. + */ +- (void)audioSessionMediaServerReset:(RTCAudioSession *)session; + +// TODO(tkchin): Maybe handle SilenceSecondaryAudioHintNotification. + +- (void)audioSession:(RTCAudioSession *)session + didChangeCanPlayOrRecord:(BOOL)canPlayOrRecord; + +/** Called on a WebRTC thread when the audio device is notified to begin + * playback or recording. + */ +- (void)audioSessionDidStartPlayOrRecord:(RTCAudioSession *)session; + +/** Called on a WebRTC thread when the audio device is notified to stop + * playback or recording. + */ +- (void)audioSessionDidStopPlayOrRecord:(RTCAudioSession *)session; + +/** Called when the AVAudioSession output volume value changes. */ +- (void)audioSession:(RTCAudioSession *)audioSession + didChangeOutputVolume:(float)outputVolume; + +/** Called when the audio device detects a playout glitch. The argument is the + * number of glitches detected so far in the current audio playout session. + */ +- (void)audioSession:(RTCAudioSession *)audioSession + didDetectPlayoutGlitch:(int64_t)totalNumberOfGlitches; + +@end + +/** This is a protocol used to inform RTCAudioSession when the audio session + * activation state has changed outside of RTCAudioSession. The current known use + * case of this is when CallKit activates the audio session for the application + */ +RTC_EXPORT +@protocol RTCAudioSessionActivationDelegate + +/** Called when the audio session is activated outside of the app by iOS. */ +- (void)audioSessionDidActivate:(AVAudioSession *)session; + +/** Called when the audio session is deactivated outside of the app by iOS. */ +- (void)audioSessionDidDeactivate:(AVAudioSession *)session; + +@end + +/** Proxy class for AVAudioSession that adds a locking mechanism similar to + * AVCaptureDevice. This is used to that interleaving configurations between + * WebRTC and the application layer are avoided. + * + * RTCAudioSession also coordinates activation so that the audio session is + * activated only once. See |setActive:error:|. + */ +RTC_EXPORT +@interface RTCAudioSession : NSObject + +/** Convenience property to access the AVAudioSession singleton. Callers should + * not call setters on AVAudioSession directly, but other method invocations + * are fine. + */ +@property(nonatomic, readonly) AVAudioSession *session; + +/** Our best guess at whether the session is active based on results of calls to + * AVAudioSession. + */ +@property(nonatomic, readonly) BOOL isActive; +/** Whether RTCAudioSession is currently locked for configuration. */ +@property(nonatomic, readonly) BOOL isLocked; + +/** If YES, WebRTC will not initialize the audio unit automatically when an + * audio track is ready for playout or recording. Instead, applications should + * call setIsAudioEnabled. If NO, WebRTC will initialize the audio unit + * as soon as an audio track is ready for playout or recording. + */ +@property(nonatomic, assign) BOOL useManualAudio; + +/** This property is only effective if useManualAudio is YES. + * Represents permission for WebRTC to initialize the VoIP audio unit. + * When set to NO, if the VoIP audio unit used by WebRTC is active, it will be + * stopped and uninitialized. This will stop incoming and outgoing audio. + * When set to YES, WebRTC will initialize and start the audio unit when it is + * needed (e.g. due to establishing an audio connection). + * This property was introduced to work around an issue where if an AVPlayer is + * playing audio while the VoIP audio unit is initialized, its audio would be + * either cut off completely or played at a reduced volume. By preventing + * the audio unit from being initialized until after the audio has completed, + * we are able to prevent the abrupt cutoff. + */ +@property(nonatomic, assign) BOOL isAudioEnabled; + +// Proxy properties. +@property(readonly) NSString *category; +@property(readonly) AVAudioSessionCategoryOptions categoryOptions; +@property(readonly) NSString *mode; +@property(readonly) BOOL secondaryAudioShouldBeSilencedHint; +@property(readonly) AVAudioSessionRouteDescription *currentRoute; +@property(readonly) NSInteger maximumInputNumberOfChannels; +@property(readonly) NSInteger maximumOutputNumberOfChannels; +@property(readonly) float inputGain; +@property(readonly) BOOL inputGainSettable; +@property(readonly) BOOL inputAvailable; +@property(readonly, nullable) + NSArray * inputDataSources; +@property(readonly, nullable) + AVAudioSessionDataSourceDescription *inputDataSource; +@property(readonly, nullable) + NSArray * outputDataSources; +@property(readonly, nullable) + AVAudioSessionDataSourceDescription *outputDataSource; +@property(readonly) double sampleRate; +@property(readonly) double preferredSampleRate; +@property(readonly) NSInteger inputNumberOfChannels; +@property(readonly) NSInteger outputNumberOfChannels; +@property(readonly) float outputVolume; +@property(readonly) NSTimeInterval inputLatency; +@property(readonly) NSTimeInterval outputLatency; +@property(readonly) NSTimeInterval IOBufferDuration; +@property(readonly) NSTimeInterval preferredIOBufferDuration; + +/** Default constructor. */ ++ (instancetype)sharedInstance; +- (instancetype)init NS_UNAVAILABLE; + +/** Adds a delegate, which is held weakly. */ +- (void)addDelegate:(id)delegate; +/** Removes an added delegate. */ +- (void)removeDelegate:(id)delegate; + +/** Request exclusive access to the audio session for configuration. This call + * will block if the lock is held by another object. + */ +- (void)lockForConfiguration; +/** Relinquishes exclusive access to the audio session. */ +- (void)unlockForConfiguration; + +/** If |active|, activates the audio session if it isn't already active. + * Successful calls must be balanced with a setActive:NO when activation is no + * longer required. If not |active|, deactivates the audio session if one is + * active and this is the last balanced call. When deactivating, the + * AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation option is passed to + * AVAudioSession. + */ +- (BOOL)setActive:(BOOL)active + error:(NSError **)outError; + +// The following methods are proxies for the associated methods on +// AVAudioSession. |lockForConfiguration| must be called before using them +// otherwise they will fail with kRTCAudioSessionErrorLockRequired. + +- (BOOL)setCategory:(NSString *)category + withOptions:(AVAudioSessionCategoryOptions)options + error:(NSError **)outError; +- (BOOL)setMode:(NSString *)mode error:(NSError **)outError; +- (BOOL)setInputGain:(float)gain error:(NSError **)outError; +- (BOOL)setPreferredSampleRate:(double)sampleRate error:(NSError **)outError; +- (BOOL)setPreferredIOBufferDuration:(NSTimeInterval)duration + error:(NSError **)outError; +- (BOOL)setPreferredInputNumberOfChannels:(NSInteger)count + error:(NSError **)outError; +- (BOOL)setPreferredOutputNumberOfChannels:(NSInteger)count + error:(NSError **)outError; +- (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride + error:(NSError **)outError; +- (BOOL)setPreferredInput:(AVAudioSessionPortDescription *)inPort + error:(NSError **)outError; +- (BOOL)setInputDataSource:(AVAudioSessionDataSourceDescription *)dataSource + error:(NSError **)outError; +- (BOOL)setOutputDataSource:(AVAudioSessionDataSourceDescription *)dataSource + error:(NSError **)outError; +@end + +@interface RTCAudioSession (Configuration) + +/** Applies the configuration to the current session. Attempts to set all + * properties even if previous ones fail. Only the last error will be + * returned. + * |lockForConfiguration| must be called first. + */ +- (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration + error:(NSError **)outError; + +/** Convenience method that calls both setConfiguration and setActive. + * |lockForConfiguration| must be called first. + */ +- (BOOL)setConfiguration:(RTCAudioSessionConfiguration *)configuration + active:(BOOL)active + error:(NSError **)outError; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCAudioSessionConfiguration.h b/ios/Headers/RTCAudioSessionConfiguration.h new file mode 100644 index 00000000..6a02751d --- /dev/null +++ b/ios/Headers/RTCAudioSessionConfiguration.h @@ -0,0 +1,48 @@ +/* + * Copyright 2016 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. + */ + +#import +#import + +#import "WebRTC/RTCMacros.h" + +NS_ASSUME_NONNULL_BEGIN + +extern const int kRTCAudioSessionPreferredNumberOfChannels; +extern const double kRTCAudioSessionHighPerformanceSampleRate; +extern const double kRTCAudioSessionLowComplexitySampleRate; +extern const double kRTCAudioSessionHighPerformanceIOBufferDuration; +extern const double kRTCAudioSessionLowComplexityIOBufferDuration; + +// Struct to hold configuration values. +RTC_EXPORT +@interface RTCAudioSessionConfiguration : NSObject + +@property(nonatomic, strong) NSString *category; +@property(nonatomic, assign) AVAudioSessionCategoryOptions categoryOptions; +@property(nonatomic, strong) NSString *mode; +@property(nonatomic, assign) double sampleRate; +@property(nonatomic, assign) NSTimeInterval ioBufferDuration; +@property(nonatomic, assign) NSInteger inputNumberOfChannels; +@property(nonatomic, assign) NSInteger outputNumberOfChannels; + +/** Initializes configuration to defaults. */ +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +/** Returns the current configuration of the audio session. */ ++ (instancetype)currentConfiguration; +/** Returns the configuration that WebRTC needs. */ ++ (instancetype)webRTCConfiguration; +/** Provide a way to override the default configuration. */ ++ (void)setWebRTCConfiguration:(RTCAudioSessionConfiguration *)configuration; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCAudioSource.h b/ios/Headers/RTCAudioSource.h new file mode 100644 index 00000000..3db31573 --- /dev/null +++ b/ios/Headers/RTCAudioSource.h @@ -0,0 +1,32 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCAudioSource : RTCMediaSource + +- (instancetype)init NS_UNAVAILABLE; + +// Sets the volume for the RTCMediaSource. |volume| is a gain value in the range +// [0, 10]. +// Temporary fix to be able to modify volume of remote audio tracks. +// TODO(kthelgason): Property stays here temporarily until a proper volume-api +// is available on the surface exposed by webrtc. +@property(nonatomic, assign) double volume; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCAudioTrack.h b/ios/Headers/RTCAudioTrack.h new file mode 100644 index 00000000..b83eede5 --- /dev/null +++ b/ios/Headers/RTCAudioTrack.h @@ -0,0 +1,28 @@ +/* + * Copyright 2015 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. + */ + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@class RTCAudioSource; + +RTC_EXPORT +@interface RTCAudioTrack : RTCMediaStreamTrack + +- (instancetype)init NS_UNAVAILABLE; + +/** The audio source for this audio track. */ +@property(nonatomic, readonly) RTCAudioSource *source; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCCallbackLogger.h b/ios/Headers/RTCCallbackLogger.h new file mode 100644 index 00000000..cdfe17f6 --- /dev/null +++ b/ios/Headers/RTCCallbackLogger.h @@ -0,0 +1,35 @@ +/* + * Copyright 2018 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. + */ + +#import + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +// This class intercepts WebRTC logs and forwards them to a registered block. +// This class is not threadsafe. +RTC_EXPORT +@interface RTCCallbackLogger : NSObject + +// The severity level to capture. The default is kRTCLoggingSeverityInfo. +@property(nonatomic, assign) RTCLoggingSeverity severity; + +// The callback will be called on the same thread that does the logging, so +// if the logging callback can be slow it may be a good idea to implement +// dispatching to some other queue. +- (void)start:(nullable void (^)(NSString*))callback; + +- (void)stop; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCCameraPreviewView.h b/ios/Headers/RTCCameraPreviewView.h new file mode 100644 index 00000000..d62bb01e --- /dev/null +++ b/ios/Headers/RTCCameraPreviewView.h @@ -0,0 +1,30 @@ +/* + * Copyright 2015 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. + */ + +#import +#import + +#import + +@class AVCaptureSession; + +/** RTCCameraPreviewView is a view that renders local video from an + * AVCaptureSession. + */ +RTC_EXPORT +@interface RTCCameraPreviewView : UIView + +/** The capture session being rendered in the view. Capture session + * is assigned to AVCaptureVideoPreviewLayer async in the same + * queue that the AVCaptureSession is started/stopped. + */ +@property(nonatomic, strong) AVCaptureSession *captureSession; + +@end diff --git a/ios/Headers/RTCCameraVideoCapturer.h b/ios/Headers/RTCCameraVideoCapturer.h new file mode 100644 index 00000000..5c7406fc --- /dev/null +++ b/ios/Headers/RTCCameraVideoCapturer.h @@ -0,0 +1,55 @@ +/* + * Copyright 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. + */ + +#import +#import + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +// Camera capture that implements RTCVideoCapturer. Delivers frames to a RTCVideoCapturerDelegate +// (usually RTCVideoSource). +@interface RTCCameraVideoCapturer : RTCVideoCapturer + +// Capture session that is used for capturing. Valid from initialization to dealloc. +@property(readonly, nonatomic) AVCaptureSession *captureSession; + +// Returns list of available capture devices that support video capture. ++ (NSArray *)captureDevices; +// Returns list of formats that are supported by this class for this device. ++ (NSArray *)supportedFormatsForDevice:(AVCaptureDevice *)device; + +// Returns the most efficient supported output pixel format for this capturer. +- (FourCharCode)preferredOutputPixelFormat; + +// Starts the capture session asynchronously and notifies callback on completion. +// The device will capture video in the format given in the `format` parameter. If the pixel format +// in `format` is supported by the WebRTC pipeline, the same pixel format will be used for the +// output. Otherwise, the format returned by `preferredOutputPixelFormat` will be used. +- (void)startCaptureWithDevice:(AVCaptureDevice *)device + format:(AVCaptureDeviceFormat *)format + fps:(NSInteger)fps + completionHandler:(nullable void (^)(NSError *))completionHandler; +// Stops the capture session asynchronously and notifies callback on completion. +- (void)stopCaptureWithCompletionHandler:(nullable void (^)(void))completionHandler; + +// Starts the capture session asynchronously. +- (void)startCaptureWithDevice:(AVCaptureDevice *)device + format:(AVCaptureDeviceFormat *)format + fps:(NSInteger)fps; +// Stops the capture session asynchronously. +- (void)stopCapture; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCConfiguration.h b/ios/Headers/RTCConfiguration.h new file mode 100644 index 00000000..97cc5a49 --- /dev/null +++ b/ios/Headers/RTCConfiguration.h @@ -0,0 +1,173 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +@class RTCIceServer; +@class RTCIntervalRange; + +/** + * Represents the ice transport policy. This exposes the same states in C++, + * which include one more state than what exists in the W3C spec. + */ +typedef NS_ENUM(NSInteger, RTCIceTransportPolicy) { + RTCIceTransportPolicyNone, + RTCIceTransportPolicyRelay, + RTCIceTransportPolicyNoHost, + RTCIceTransportPolicyAll +}; + +/** Represents the bundle policy. */ +typedef NS_ENUM(NSInteger, RTCBundlePolicy) { + RTCBundlePolicyBalanced, + RTCBundlePolicyMaxCompat, + RTCBundlePolicyMaxBundle +}; + +/** Represents the rtcp mux policy. */ +typedef NS_ENUM(NSInteger, RTCRtcpMuxPolicy) { + RTCRtcpMuxPolicyNegotiate, + RTCRtcpMuxPolicyRequire +}; + +/** Represents the tcp candidate policy. */ +typedef NS_ENUM(NSInteger, RTCTcpCandidatePolicy) { + RTCTcpCandidatePolicyEnabled, + RTCTcpCandidatePolicyDisabled +}; + +/** Represents the candidate network policy. */ +typedef NS_ENUM(NSInteger, RTCCandidateNetworkPolicy) { + RTCCandidateNetworkPolicyAll, + RTCCandidateNetworkPolicyLowCost +}; + +/** Represents the continual gathering policy. */ +typedef NS_ENUM(NSInteger, RTCContinualGatheringPolicy) { + RTCContinualGatheringPolicyGatherOnce, + RTCContinualGatheringPolicyGatherContinually +}; + +/** Represents the encryption key type. */ +typedef NS_ENUM(NSInteger, RTCEncryptionKeyType) { + RTCEncryptionKeyTypeRSA, + RTCEncryptionKeyTypeECDSA, +}; + +/** Represents the chosen SDP semantics for the RTCPeerConnection. */ +typedef NS_ENUM(NSInteger, RTCSdpSemantics) { + RTCSdpSemanticsDefault, + RTCSdpSemanticsPlanB, + RTCSdpSemanticsUnifiedPlan, +}; + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCConfiguration : NSObject + +/** An array of Ice Servers available to be used by ICE. */ +@property(nonatomic, copy) NSArray *iceServers; + +/** Which candidates the ICE agent is allowed to use. The W3C calls it + * |iceTransportPolicy|, while in C++ it is called |type|. */ +@property(nonatomic, assign) RTCIceTransportPolicy iceTransportPolicy; + +/** The media-bundling policy to use when gathering ICE candidates. */ +@property(nonatomic, assign) RTCBundlePolicy bundlePolicy; + +/** The rtcp-mux policy to use when gathering ICE candidates. */ +@property(nonatomic, assign) RTCRtcpMuxPolicy rtcpMuxPolicy; +@property(nonatomic, assign) RTCTcpCandidatePolicy tcpCandidatePolicy; +@property(nonatomic, assign) RTCCandidateNetworkPolicy candidateNetworkPolicy; +@property(nonatomic, assign) + RTCContinualGatheringPolicy continualGatheringPolicy; + +/** By default, the PeerConnection will use a limited number of IPv6 network + * interfaces, in order to avoid too many ICE candidate pairs being created + * and delaying ICE completion. + * + * Can be set to INT_MAX to effectively disable the limit. + */ +@property(nonatomic, assign) int maxIPv6Networks; + +/** Exclude link-local network interfaces + * from considertaion for gathering ICE candidates. + * Defaults to NO. + */ +@property(nonatomic, assign) BOOL disableLinkLocalNetworks; + +@property(nonatomic, assign) int audioJitterBufferMaxPackets; +@property(nonatomic, assign) BOOL audioJitterBufferFastAccelerate; +@property(nonatomic, assign) int iceConnectionReceivingTimeout; +@property(nonatomic, assign) int iceBackupCandidatePairPingInterval; + +/** Key type used to generate SSL identity. Default is ECDSA. */ +@property(nonatomic, assign) RTCEncryptionKeyType keyType; + +/** ICE candidate pool size as defined in JSEP. Default is 0. */ +@property(nonatomic, assign) int iceCandidatePoolSize; + +/** Prune turn ports on the same network to the same turn server. + * Default is NO. + */ +@property(nonatomic, assign) BOOL shouldPruneTurnPorts; + +/** If set to YES, this means the ICE transport should presume TURN-to-TURN + * candidate pairs will succeed, even before a binding response is received. + */ +@property(nonatomic, assign) BOOL shouldPresumeWritableWhenFullyRelayed; + +/** If set to non-nil, controls the minimal interval between consecutive ICE + * check packets. + */ +@property(nonatomic, copy, nullable) NSNumber *iceCheckMinInterval; + +/** ICE Periodic Regathering + * If set, WebRTC will periodically create and propose candidates without + * starting a new ICE generation. The regathering happens continuously with + * interval specified in milliseconds by the uniform distribution [a, b]. + */ +@property(nonatomic, strong, nullable) RTCIntervalRange *iceRegatherIntervalRange; + +/** Configure the SDP semantics used by this PeerConnection. Note that the + * WebRTC 1.0 specification requires UnifiedPlan semantics. The + * RTCRtpTransceiver API is only available with UnifiedPlan semantics. + * + * PlanB will cause RTCPeerConnection to create offers and answers with at + * most one audio and one video m= section with multiple RTCRtpSenders and + * RTCRtpReceivers specified as multiple a=ssrc lines within the section. This + * will also cause RTCPeerConnection to ignore all but the first m= section of + * the same media type. + * + * UnifiedPlan will cause RTCPeerConnection to create offers and answers with + * multiple m= sections where each m= section maps to one RTCRtpSender and one + * RTCRtpReceiver (an RTCRtpTransceiver), either both audio or both video. This + * will also cause RTCPeerConnection to ignore all but the first a=ssrc lines + * that form a Plan B stream. + * + * For users who only send at most one audio and one video track, this + * choice does not matter and should be left as Default. + * + * For users who wish to send multiple audio/video streams and need to stay + * interoperable with legacy WebRTC implementations, specify PlanB. + * + * For users who wish to send multiple audio/video streams and/or wish to + * use the new RTCRtpTransceiver API, specify UnifiedPlan. + */ +@property(nonatomic, assign) RTCSdpSemantics sdpSemantics; + +- (instancetype)init; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCDataChannel.h b/ios/Headers/RTCDataChannel.h new file mode 100644 index 00000000..893bd0a3 --- /dev/null +++ b/ios/Headers/RTCDataChannel.h @@ -0,0 +1,134 @@ +/* + * Copyright 2015 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. + */ + +#import +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCDataBuffer : NSObject + +/** NSData representation of the underlying buffer. */ +@property(nonatomic, readonly) NSData *data; + +/** Indicates whether |data| contains UTF-8 or binary data. */ +@property(nonatomic, readonly) BOOL isBinary; + +- (instancetype)init NS_UNAVAILABLE; + +/** + * Initialize an RTCDataBuffer from NSData. |isBinary| indicates whether |data| + * contains UTF-8 or binary data. + */ +- (instancetype)initWithData:(NSData *)data isBinary:(BOOL)isBinary; + +@end + + +@class RTCDataChannel; +RTC_EXPORT +@protocol RTCDataChannelDelegate + +/** The data channel state changed. */ +- (void)dataChannelDidChangeState:(RTCDataChannel *)dataChannel; + +/** The data channel successfully received a data buffer. */ +- (void)dataChannel:(RTCDataChannel *)dataChannel + didReceiveMessageWithBuffer:(RTCDataBuffer *)buffer; + +@optional +/** The data channel's |bufferedAmount| changed. */ +- (void)dataChannel:(RTCDataChannel *)dataChannel + didChangeBufferedAmount:(uint64_t)amount; + +@end + + +/** Represents the state of the data channel. */ +typedef NS_ENUM(NSInteger, RTCDataChannelState) { + RTCDataChannelStateConnecting, + RTCDataChannelStateOpen, + RTCDataChannelStateClosing, + RTCDataChannelStateClosed, +}; + +RTC_EXPORT +@interface RTCDataChannel : NSObject + +/** + * A label that can be used to distinguish this data channel from other data + * channel objects. + */ +@property(nonatomic, readonly) NSString *label; + +/** Whether the data channel can send messages in unreliable mode. */ +@property(nonatomic, readonly) BOOL isReliable DEPRECATED_ATTRIBUTE; + +/** Returns whether this data channel is ordered or not. */ +@property(nonatomic, readonly) BOOL isOrdered; + +/** Deprecated. Use maxPacketLifeTime. */ +@property(nonatomic, readonly) NSUInteger maxRetransmitTime + DEPRECATED_ATTRIBUTE; + +/** + * The length of the time window (in milliseconds) during which transmissions + * and retransmissions may occur in unreliable mode. + */ +@property(nonatomic, readonly) uint16_t maxPacketLifeTime; + +/** + * The maximum number of retransmissions that are attempted in unreliable mode. + */ +@property(nonatomic, readonly) uint16_t maxRetransmits; + +/** + * The name of the sub-protocol used with this data channel, if any. Otherwise + * this returns an empty string. + */ +@property(nonatomic, readonly) NSString *protocol; + +/** + * Returns whether this data channel was negotiated by the application or not. + */ +@property(nonatomic, readonly) BOOL isNegotiated; + +/** Deprecated. Use channelId. */ +@property(nonatomic, readonly) NSInteger streamId DEPRECATED_ATTRIBUTE; + +/** The identifier for this data channel. */ +@property(nonatomic, readonly) int channelId; + +/** The state of the data channel. */ +@property(nonatomic, readonly) RTCDataChannelState readyState; + +/** + * The number of bytes of application data that have been queued using + * |sendData:| but that have not yet been transmitted to the network. + */ +@property(nonatomic, readonly) uint64_t bufferedAmount; + +/** The delegate for this data channel. */ +@property(nonatomic, weak) id delegate; + +- (instancetype)init NS_UNAVAILABLE; + +/** Closes the data channel. */ +- (void)close; + +/** Attempt to send |data| on this data channel's underlying data transport. */ +- (BOOL)sendData:(RTCDataBuffer *)data; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCDataChannelConfiguration.h b/ios/Headers/RTCDataChannelConfiguration.h new file mode 100644 index 00000000..65f59318 --- /dev/null +++ b/ios/Headers/RTCDataChannelConfiguration.h @@ -0,0 +1,52 @@ +/* + * Copyright 2015 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. + */ + +#import +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCDataChannelConfiguration : NSObject + +/** Set to YES if ordered delivery is required. */ +@property(nonatomic, assign) BOOL isOrdered; + +/** Deprecated. Use maxPacketLifeTime. */ +@property(nonatomic, assign) NSInteger maxRetransmitTimeMs DEPRECATED_ATTRIBUTE; + +/** + * Max period in milliseconds in which retransmissions will be sent. After this + * time, no more retransmissions will be sent. -1 if unset. + */ +@property(nonatomic, assign) int maxPacketLifeTime; + +/** The max number of retransmissions. -1 if unset. */ +@property(nonatomic, assign) int maxRetransmits; + +/** Set to YES if the channel has been externally negotiated and we do not send + * an in-band signalling in the form of an "open" message. + */ +@property(nonatomic, assign) BOOL isNegotiated; + +/** Deprecated. Use channelId. */ +@property(nonatomic, assign) int streamId DEPRECATED_ATTRIBUTE; + +/** The id of the data channel. */ +@property(nonatomic, assign) int channelId; + +/** Set by the application and opaque to the WebRTC implementation. */ +@property(nonatomic) NSString *protocol; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCDispatcher.h b/ios/Headers/RTCDispatcher.h new file mode 100644 index 00000000..3dddead6 --- /dev/null +++ b/ios/Headers/RTCDispatcher.h @@ -0,0 +1,45 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +typedef NS_ENUM(NSInteger, RTCDispatcherQueueType) { + // Main dispatcher queue. + RTCDispatcherTypeMain, + // Used for starting/stopping AVCaptureSession, and assigning + // capture session to AVCaptureVideoPreviewLayer. + RTCDispatcherTypeCaptureSession, + // Used for operations on AVAudioSession. + RTCDispatcherTypeAudioSession, +}; + +/** Dispatcher that asynchronously dispatches blocks to a specific + * shared dispatch queue. + */ +RTC_EXPORT +@interface RTCDispatcher : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** Dispatch the block asynchronously on the queue for dispatchType. + * @param dispatchType The queue type to dispatch on. + * @param block The block to dispatch asynchronously. + */ ++ (void)dispatchAsyncOnType:(RTCDispatcherQueueType)dispatchType + block:(dispatch_block_t)block; + +/** Returns YES if run on queue for the dispatchType otherwise NO. + * Useful for asserting that a method is run on a correct queue. + */ ++ (BOOL)isOnQueueForType:(RTCDispatcherQueueType)dispatchType; + +@end diff --git a/ios/Headers/RTCDtmfSender.h b/ios/Headers/RTCDtmfSender.h new file mode 100644 index 00000000..c69af026 --- /dev/null +++ b/ios/Headers/RTCDtmfSender.h @@ -0,0 +1,70 @@ +/* + * Copyright 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@protocol RTCDtmfSender + +/** + * Returns true if this RTCDtmfSender is capable of sending DTMF. Otherwise + * returns false. To be able to send DTMF, the associated RTCRtpSender must be + * able to send packets, and a "telephone-event" codec must be negotiated. + */ +@property(nonatomic, readonly) BOOL canInsertDtmf; + +/** + * Queues a task that sends the DTMF tones. The tones parameter is treated + * as a series of characters. The characters 0 through 9, A through D, #, and * + * generate the associated DTMF tones. The characters a to d are equivalent + * to A to D. The character ',' indicates a delay of 2 seconds before + * processing the next character in the tones parameter. + * + * Unrecognized characters are ignored. + * + * @param duration The parameter indicates the duration to use for each + * character passed in the tones parameter. The duration cannot be more + * than 6000 or less than 70 ms. + * + * @param interToneGap The parameter indicates the gap between tones. + * This parameter must be at least 50 ms but should be as short as + * possible. + * + * If InsertDtmf is called on the same object while an existing task for this + * object to generate DTMF is still running, the previous task is canceled. + * Returns true on success and false on failure. + */ +- (BOOL)insertDtmf:(nonnull NSString *)tones + duration:(NSTimeInterval)duration + interToneGap:(NSTimeInterval)interToneGap; + +/** The tones remaining to be played out */ +- (nonnull NSString *)remainingTones; + +/** + * The current tone duration value. This value will be the value last set via the + * insertDtmf method, or the default value of 100 ms if insertDtmf was never called. + */ +- (NSTimeInterval)duration; + +/** + * The current value of the between-tone gap. This value will be the value last set + * via the insertDtmf() method, or the default value of 50 ms if insertDtmf() was never + * called. + */ +- (NSTimeInterval)interToneGap; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCEAGLVideoView.h b/ios/Headers/RTCEAGLVideoView.h new file mode 100644 index 00000000..60c624e0 --- /dev/null +++ b/ios/Headers/RTCEAGLVideoView.h @@ -0,0 +1,45 @@ +/* + * Copyright 2015 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. + */ + +#import +#import + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@class RTCEAGLVideoView; +RTC_EXPORT +@protocol RTCEAGLVideoViewDelegate + +- (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size; + +@end + +/** + * RTCEAGLVideoView is an RTCVideoRenderer which renders video frames in its + * bounds using OpenGLES 2.0 or OpenGLES 3.0. + */ +RTC_EXPORT +@interface RTCEAGLVideoView : UIView + +@property(nonatomic, weak) id delegate; + +- (instancetype)initWithFrame:(CGRect)frame + shader:(id)shader NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithCoder:(NSCoder *)aDecoder + shader:(id)shader NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCFieldTrials.h b/ios/Headers/RTCFieldTrials.h new file mode 100644 index 00000000..e4b464d6 --- /dev/null +++ b/ios/Headers/RTCFieldTrials.h @@ -0,0 +1,44 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import + +/** The only valid value for the following if set is kRTCFieldTrialEnabledValue. */ +RTC_EXTERN NSString * const kRTCFieldTrialAudioSendSideBweKey; +RTC_EXTERN NSString * const kRTCFieldTrialAudioSendSideBweForVideoKey; +RTC_EXTERN NSString * const kRTCFieldTrialSendSideBweWithOverheadKey; +RTC_EXTERN NSString * const kRTCFieldTrialFlexFec03AdvertisedKey; +RTC_EXTERN NSString * const kRTCFieldTrialFlexFec03Key; +RTC_EXTERN NSString * const kRTCFieldTrialImprovedBitrateEstimateKey; +RTC_EXTERN NSString * const kRTCFieldTrialH264HighProfileKey; +RTC_EXTERN NSString * const kRTCFieldTrialMinimizeResamplingOnMobileKey; + +/** The valid value for field trials above. */ +RTC_EXTERN NSString * const kRTCFieldTrialEnabledValue; + +/** Use a string returned by RTCFieldTrialMedianSlopeFilterValue as the value. */ +RTC_EXTERN NSString * const kRTCFieldTrialMedianSlopeFilterKey; +RTC_EXTERN NSString *RTCFieldTrialMedianSlopeFilterValue( + size_t windowSize, double thresholdGain); + +/** Use a string returned by RTCFieldTrialTrendlineFilterValue as the value. */ +RTC_EXTERN NSString * const kRTCFieldTrialTrendlineFilterKey; +/** Returns a valid value for kRTCFieldTrialTrendlineFilterKey. */ +RTC_EXTERN NSString *RTCFieldTrialTrendlineFilterValue( + size_t windowSize, double smoothingCoeff, double thresholdGain); + +/** Initialize field trials using a dictionary mapping field trial keys to their values. See above + * for valid keys and values. + * Must be called before any other call into WebRTC. See: + * webrtc/system_wrappers/include/field_trial_default.h + */ +RTC_EXTERN void RTCInitFieldTrialDictionary(NSDictionary *fieldTrials); diff --git a/ios/Headers/RTCFileLogger.h b/ios/Headers/RTCFileLogger.h new file mode 100644 index 00000000..1e8a591b --- /dev/null +++ b/ios/Headers/RTCFileLogger.h @@ -0,0 +1,77 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +typedef NS_ENUM(NSUInteger, RTCFileLoggerSeverity) { + RTCFileLoggerSeverityVerbose, + RTCFileLoggerSeverityInfo, + RTCFileLoggerSeverityWarning, + RTCFileLoggerSeverityError +}; + +typedef NS_ENUM(NSUInteger, RTCFileLoggerRotationType) { + RTCFileLoggerTypeCall, + RTCFileLoggerTypeApp, +}; + +NS_ASSUME_NONNULL_BEGIN + +// This class intercepts WebRTC logs and saves them to a file. The file size +// will not exceed the given maximum bytesize. When the maximum bytesize is +// reached, logs are rotated according to the rotationType specified. +// For kRTCFileLoggerTypeCall, logs from the beginning and the end +// are preserved while the middle section is overwritten instead. +// For kRTCFileLoggerTypeApp, the oldest log is overwritten. +// This class is not threadsafe. +RTC_EXPORT +@interface RTCFileLogger : NSObject + +// The severity level to capture. The default is kRTCFileLoggerSeverityInfo. +@property(nonatomic, assign) RTCFileLoggerSeverity severity; + +// The rotation type for this file logger. The default is +// kRTCFileLoggerTypeCall. +@property(nonatomic, readonly) RTCFileLoggerRotationType rotationType; + +// Disables buffering disk writes. Should be set before |start|. Buffering +// is enabled by default for performance. +@property(nonatomic, assign) BOOL shouldDisableBuffering; + +// Default constructor provides default settings for dir path, file size and +// rotation type. +- (instancetype)init; + +// Create file logger with default rotation type. +- (instancetype)initWithDirPath:(NSString *)dirPath + maxFileSize:(NSUInteger)maxFileSize; + +- (instancetype)initWithDirPath:(NSString *)dirPath + maxFileSize:(NSUInteger)maxFileSize + rotationType:(RTCFileLoggerRotationType)rotationType + NS_DESIGNATED_INITIALIZER; + +// Starts writing WebRTC logs to disk if not already started. Overwrites any +// existing file(s). +- (void)start; + +// Stops writing WebRTC logs to disk. This method is also called on dealloc. +- (void)stop; + +// Returns the current contents of the logs, or nil if start has been called +// without a stop. +- (nullable NSData *)logData; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/ios/Headers/RTCFileVideoCapturer.h b/ios/Headers/RTCFileVideoCapturer.h new file mode 100644 index 00000000..7b898e49 --- /dev/null +++ b/ios/Headers/RTCFileVideoCapturer.h @@ -0,0 +1,50 @@ +/* + * Copyright 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. + */ + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Error passing block. + */ +typedef void (^RTCFileVideoCapturerErrorBlock)(NSError *error); + +/** + * Captures buffers from bundled video file. + * + * See @c RTCVideoCapturer for more info on capturers. + */ +RTC_EXPORT + +NS_CLASS_AVAILABLE_IOS(10) +@interface RTCFileVideoCapturer : RTCVideoCapturer + +/** + * Starts asynchronous capture of frames from video file. + * + * Capturing is not started if error occurs. Underlying error will be + * relayed in the errorBlock if one is provided. + * Successfully captured video frames will be passed to the delegate. + * + * @param nameOfFile The name of the bundled video file to be read. + * @errorBlock block to be executed upon error. + */ +- (void)startCapturingFromFileNamed:(NSString *)nameOfFile + onError:(__nullable RTCFileVideoCapturerErrorBlock)errorBlock; + +/** + * Immediately stops capture. + */ +- (void)stopCapture; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCIceCandidate.h b/ios/Headers/RTCIceCandidate.h new file mode 100644 index 00000000..3b7f3e26 --- /dev/null +++ b/ios/Headers/RTCIceCandidate.h @@ -0,0 +1,50 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCIceCandidate : NSObject + +/** + * If present, the identifier of the "media stream identification" for the media + * component this candidate is associated with. + */ +@property(nonatomic, readonly, nullable) NSString *sdpMid; + +/** + * The index (starting at zero) of the media description this candidate is + * associated with in the SDP. + */ +@property(nonatomic, readonly) int sdpMLineIndex; + +/** The SDP string for this candidate. */ +@property(nonatomic, readonly) NSString *sdp; + +/** The URL of the ICE server which this candidate is gathered from. */ +@property(nonatomic, readonly, nullable) NSString *serverUrl; + +- (instancetype)init NS_UNAVAILABLE; + +/** + * Initialize an RTCIceCandidate from SDP. + */ +- (instancetype)initWithSdp:(NSString *)sdp + sdpMLineIndex:(int)sdpMLineIndex + sdpMid:(nullable NSString *)sdpMid + NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCIceServer.h b/ios/Headers/RTCIceServer.h new file mode 100644 index 00000000..727da8ac --- /dev/null +++ b/ios/Headers/RTCIceServer.h @@ -0,0 +1,114 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +typedef NS_ENUM(NSUInteger, RTCTlsCertPolicy) { + RTCTlsCertPolicySecure, + RTCTlsCertPolicyInsecureNoCheck +}; + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCIceServer : NSObject + +/** URI(s) for this server represented as NSStrings. */ +@property(nonatomic, readonly) NSArray *urlStrings; + +/** Username to use if this RTCIceServer object is a TURN server. */ +@property(nonatomic, readonly, nullable) NSString *username; + +/** Credential to use if this RTCIceServer object is a TURN server. */ +@property(nonatomic, readonly, nullable) NSString *credential; + +/** + * TLS certificate policy to use if this RTCIceServer object is a TURN server. + */ +@property(nonatomic, readonly) RTCTlsCertPolicy tlsCertPolicy; + +/** + If the URIs in |urls| only contain IP addresses, this field can be used + to indicate the hostname, which may be necessary for TLS (using the SNI + extension). If |urls| itself contains the hostname, this isn't necessary. + */ +@property(nonatomic, readonly, nullable) NSString *hostname; + +/** List of protocols to be used in the TLS ALPN extension. */ +@property(nonatomic, readonly) NSArray *tlsAlpnProtocols; + +/** + List elliptic curves to be used in the TLS elliptic curves extension. + Only curve names supported by OpenSSL should be used (eg. "P-256","X25519"). + */ +@property(nonatomic, readonly) NSArray *tlsEllipticCurves; + +- (nonnull instancetype)init NS_UNAVAILABLE; + +/** Convenience initializer for a server with no authentication (e.g. STUN). */ +- (instancetype)initWithURLStrings:(NSArray *)urlStrings; + +/** + * Initialize an RTCIceServer with its associated URLs, optional username, + * optional credential, and credentialType. + */ +- (instancetype)initWithURLStrings:(NSArray *)urlStrings + username:(nullable NSString *)username + credential:(nullable NSString *)credential; + +/** + * Initialize an RTCIceServer with its associated URLs, optional username, + * optional credential, and TLS cert policy. + */ +- (instancetype)initWithURLStrings:(NSArray *)urlStrings + username:(nullable NSString *)username + credential:(nullable NSString *)credential + tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy; + +/** + * Initialize an RTCIceServer with its associated URLs, optional username, + * optional credential, TLS cert policy and hostname. + */ +- (instancetype)initWithURLStrings:(NSArray *)urlStrings + username:(nullable NSString *)username + credential:(nullable NSString *)credential + tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy + hostname:(nullable NSString *)hostname; + +/** + * Initialize an RTCIceServer with its associated URLs, optional username, + * optional credential, TLS cert policy, hostname and ALPN protocols. + */ +- (instancetype)initWithURLStrings:(NSArray *)urlStrings + username:(nullable NSString *)username + credential:(nullable NSString *)credential + tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy + hostname:(nullable NSString *)hostname + tlsAlpnProtocols:(NSArray *)tlsAlpnProtocols; + +/** + * Initialize an RTCIceServer with its associated URLs, optional username, + * optional credential, TLS cert policy, hostname, ALPN protocols and + * elliptic curves. + */ +- (instancetype)initWithURLStrings:(NSArray *)urlStrings + username:(nullable NSString *)username + credential:(nullable NSString *)credential + tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy + hostname:(nullable NSString *)hostname + tlsAlpnProtocols:(nullable NSArray *)tlsAlpnProtocols + tlsEllipticCurves:(nullable NSArray *)tlsEllipticCurves + NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCIntervalRange.h b/ios/Headers/RTCIntervalRange.h new file mode 100644 index 00000000..9384b153 --- /dev/null +++ b/ios/Headers/RTCIntervalRange.h @@ -0,0 +1,28 @@ +/* + * Copyright 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. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface RTCIntervalRange : NSObject + +@property(nonatomic, readonly) NSInteger min; +@property(nonatomic, readonly) NSInteger max; + +- (instancetype)init; +- (instancetype)initWithMin:(NSInteger)min + max:(NSInteger)max + NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/ios/Headers/RTCLegacyStatsReport.h b/ios/Headers/RTCLegacyStatsReport.h new file mode 100644 index 00000000..14d996c1 --- /dev/null +++ b/ios/Headers/RTCLegacyStatsReport.h @@ -0,0 +1,37 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** This does not currently conform to the spec. */ +RTC_EXPORT +@interface RTCLegacyStatsReport : NSObject + +/** Time since 1970-01-01T00:00:00Z in milliseconds. */ +@property(nonatomic, readonly) CFTimeInterval timestamp; + +/** The type of stats held by this object. */ +@property(nonatomic, readonly) NSString *type; + +/** The identifier for this object. */ +@property(nonatomic, readonly) NSString *reportId; + +/** A dictionary holding the actual stats. */ +@property(nonatomic, readonly) NSDictionary *values; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCLogging.h b/ios/Headers/RTCLogging.h new file mode 100644 index 00000000..a65dcad8 --- /dev/null +++ b/ios/Headers/RTCLogging.h @@ -0,0 +1,69 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +// Subset of rtc::LoggingSeverity. +typedef NS_ENUM(NSInteger, RTCLoggingSeverity) { + RTCLoggingSeverityVerbose, + RTCLoggingSeverityInfo, + RTCLoggingSeverityWarning, + RTCLoggingSeverityError, +}; + +// Wrapper for C++ RTC_LOG(sev) macros. +// Logs the log string to the webrtc logstream for the given severity. +RTC_EXTERN void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string); + +// Wrapper for rtc::LogMessage::LogToDebug. +// Sets the minimum severity to be logged to console. +RTC_EXTERN void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity); + +// Returns the filename with the path prefix removed. +RTC_EXTERN NSString* RTCFileName(const char* filePath); + +// Some convenience macros. + +#define RTCLogString(format, ...) \ + [NSString stringWithFormat:@"(%@:%d %s): " format, \ + RTCFileName(__FILE__), \ + __LINE__, \ + __FUNCTION__, \ + ##__VA_ARGS__] + +#define RTCLogFormat(severity, format, ...) \ + do { \ + NSString* log_string = RTCLogString(format, ##__VA_ARGS__); \ + RTCLogEx(severity, log_string); \ + } while (false) + +#define RTCLogVerbose(format, ...) \ + RTCLogFormat(RTCLoggingSeverityVerbose, format, ##__VA_ARGS__) \ + +#define RTCLogInfo(format, ...) \ + RTCLogFormat(RTCLoggingSeverityInfo, format, ##__VA_ARGS__) \ + +#define RTCLogWarning(format, ...) \ + RTCLogFormat(RTCLoggingSeverityWarning, format, ##__VA_ARGS__) \ + +#define RTCLogError(format, ...) \ + RTCLogFormat(RTCLoggingSeverityError, format, ##__VA_ARGS__) \ + +#if !defined(NDEBUG) +#define RTCLogDebug(format, ...) RTCLogInfo(format, ##__VA_ARGS__) +#else +#define RTCLogDebug(format, ...) \ + do { \ + } while (false) +#endif + +#define RTCLog(format, ...) RTCLogInfo(format, ##__VA_ARGS__) diff --git a/ios/Headers/RTCMacros.h b/ios/Headers/RTCMacros.h new file mode 100644 index 00000000..08cb9382 --- /dev/null +++ b/ios/Headers/RTCMacros.h @@ -0,0 +1,28 @@ +/* + * Copyright 2016 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 SDK_OBJC_FRAMEWORK_HEADERS_WEBRTC_RTCMACROS_H_ +#define SDK_OBJC_FRAMEWORK_HEADERS_WEBRTC_RTCMACROS_H_ + +#define RTC_EXPORT __attribute__((visibility("default"))) + +#if defined(__cplusplus) +#define RTC_EXTERN extern "C" RTC_EXPORT +#else +#define RTC_EXTERN extern RTC_EXPORT +#endif + +#ifdef __OBJC__ +#define RTC_FWD_DECL_OBJC_CLASS(classname) @class classname +#else +#define RTC_FWD_DECL_OBJC_CLASS(classname) typedef struct objc_object classname +#endif + +#endif // SDK_OBJC_FRAMEWORK_HEADERS_WEBRTC_RTCMACROS_H_ diff --git a/ios/Headers/RTCMediaConstraints.h b/ios/Headers/RTCMediaConstraints.h new file mode 100644 index 00000000..f93e5b5a --- /dev/null +++ b/ios/Headers/RTCMediaConstraints.h @@ -0,0 +1,55 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Constraint keys for media sources. */ +RTC_EXTERN NSString * const kRTCMediaConstraintsMinAspectRatio; +RTC_EXTERN NSString * const kRTCMediaConstraintsMaxAspectRatio; +RTC_EXTERN NSString * const kRTCMediaConstraintsMaxWidth; +RTC_EXTERN NSString * const kRTCMediaConstraintsMinWidth; +RTC_EXTERN NSString * const kRTCMediaConstraintsMaxHeight; +RTC_EXTERN NSString * const kRTCMediaConstraintsMinHeight; +RTC_EXTERN NSString * const kRTCMediaConstraintsMaxFrameRate; +RTC_EXTERN NSString * const kRTCMediaConstraintsMinFrameRate; +/** The value for this key should be a base64 encoded string containing + * the data from the serialized configuration proto. + */ +RTC_EXTERN NSString * const kRTCMediaConstraintsAudioNetworkAdaptorConfig; + +/** Constraint keys for generating offers and answers. */ +RTC_EXTERN NSString * const kRTCMediaConstraintsIceRestart; +RTC_EXTERN NSString * const kRTCMediaConstraintsOfferToReceiveAudio; +RTC_EXTERN NSString * const kRTCMediaConstraintsOfferToReceiveVideo; +RTC_EXTERN NSString * const kRTCMediaConstraintsVoiceActivityDetection; + +/** Constraint values for Boolean parameters. */ +RTC_EXTERN NSString * const kRTCMediaConstraintsValueTrue; +RTC_EXTERN NSString * const kRTCMediaConstraintsValueFalse; + +RTC_EXPORT +@interface RTCMediaConstraints : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** Initialize with mandatory and/or optional constraints. */ +- (instancetype)initWithMandatoryConstraints: + (nullable NSDictionary *)mandatory + optionalConstraints: + (nullable NSDictionary *)optional + NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCMediaSource.h b/ios/Headers/RTCMediaSource.h new file mode 100644 index 00000000..6cfcb7d2 --- /dev/null +++ b/ios/Headers/RTCMediaSource.h @@ -0,0 +1,34 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import + +typedef NS_ENUM(NSInteger, RTCSourceState) { + RTCSourceStateInitializing, + RTCSourceStateLive, + RTCSourceStateEnded, + RTCSourceStateMuted, +}; + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCMediaSource : NSObject + +/** The current state of the RTCMediaSource. */ +@property(nonatomic, readonly) RTCSourceState state; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCMediaStream.h b/ios/Headers/RTCMediaStream.h new file mode 100644 index 00000000..b97960d4 --- /dev/null +++ b/ios/Headers/RTCMediaStream.h @@ -0,0 +1,49 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class RTCAudioTrack; +@class RTCPeerConnectionFactory; +@class RTCVideoTrack; + +RTC_EXPORT +@interface RTCMediaStream : NSObject + +/** The audio tracks in this stream. */ +@property(nonatomic, strong, readonly) NSArray *audioTracks; + +/** The video tracks in this stream. */ +@property(nonatomic, strong, readonly) NSArray *videoTracks; + +/** An identifier for this media stream. */ +@property(nonatomic, readonly) NSString *streamId; + +- (instancetype)init NS_UNAVAILABLE; + +/** Adds the given audio track to this media stream. */ +- (void)addAudioTrack:(RTCAudioTrack *)audioTrack; + +/** Adds the given video track to this media stream. */ +- (void)addVideoTrack:(RTCVideoTrack *)videoTrack; + +/** Removes the given audio track to this media stream. */ +- (void)removeAudioTrack:(RTCAudioTrack *)audioTrack; + +/** Removes the given video track to this media stream. */ +- (void)removeVideoTrack:(RTCVideoTrack *)videoTrack; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCMediaStreamTrack.h b/ios/Headers/RTCMediaStreamTrack.h new file mode 100644 index 00000000..c42f0cfb --- /dev/null +++ b/ios/Headers/RTCMediaStreamTrack.h @@ -0,0 +1,50 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +/** + * Represents the state of the track. This exposes the same states in C++. + */ +typedef NS_ENUM(NSInteger, RTCMediaStreamTrackState) { + RTCMediaStreamTrackStateLive, + RTCMediaStreamTrackStateEnded +}; + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXTERN NSString * const kRTCMediaStreamTrackKindAudio; +RTC_EXTERN NSString * const kRTCMediaStreamTrackKindVideo; + +RTC_EXPORT +@interface RTCMediaStreamTrack : NSObject + +/** + * The kind of track. For example, "audio" if this track represents an audio + * track and "video" if this track represents a video track. + */ +@property(nonatomic, readonly) NSString *kind; + +/** An identifier string. */ +@property(nonatomic, readonly) NSString *trackId; + +/** The enabled state of the track. */ +@property(nonatomic, assign) BOOL isEnabled; + +/** The state of the track. */ +@property(nonatomic, readonly) RTCMediaStreamTrackState readyState; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCMetrics.h b/ios/Headers/RTCMetrics.h new file mode 100644 index 00000000..d22287e5 --- /dev/null +++ b/ios/Headers/RTCMetrics.h @@ -0,0 +1,24 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import +#import + +/** + * Enables gathering of metrics (which can be fetched with + * RTCGetAndResetMetrics). Must be called before any other call into WebRTC. + */ +RTC_EXTERN void RTCEnableMetrics(void); + +/** Gets and clears native histograms. */ +RTC_EXTERN NSArray *RTCGetAndResetMetrics(void); + diff --git a/ios/Headers/RTCMetricsSampleInfo.h b/ios/Headers/RTCMetricsSampleInfo.h new file mode 100644 index 00000000..f01bea9b --- /dev/null +++ b/ios/Headers/RTCMetricsSampleInfo.h @@ -0,0 +1,48 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCMetricsSampleInfo : NSObject + +/** + * Example of RTCMetricsSampleInfo: + * name: "WebRTC.Video.InputFramesPerSecond" + * min: 1 + * max: 100 + * bucketCount: 50 + * samples: [29]:2 [30]:1 + */ + +/** The name of the histogram. */ +@property(nonatomic, readonly) NSString *name; + +/** The minimum bucket value. */ +@property(nonatomic, readonly) int min; + +/** The maximum bucket value. */ +@property(nonatomic, readonly) int max; + +/** The number of buckets. */ +@property(nonatomic, readonly) int bucketCount; + +/** A dictionary holding the samples . */ +@property(nonatomic, readonly) NSDictionary *samples; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCPeerConnection.h b/ios/Headers/RTCPeerConnection.h new file mode 100644 index 00000000..d9ddffbe --- /dev/null +++ b/ios/Headers/RTCPeerConnection.h @@ -0,0 +1,323 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +@class RTCConfiguration; +@class RTCDataChannel; +@class RTCDataChannelConfiguration; +@class RTCIceCandidate; +@class RTCMediaConstraints; +@class RTCMediaStream; +@class RTCMediaStreamTrack; +@class RTCPeerConnectionFactory; +@class RTCRtpReceiver; +@class RTCRtpSender; +@class RTCRtpTransceiver; +@class RTCRtpTransceiverInit; +@class RTCSessionDescription; +@class RTCLegacyStatsReport; + +typedef NS_ENUM(NSInteger, RTCRtpMediaType); + +NS_ASSUME_NONNULL_BEGIN + +extern NSString * const kRTCPeerConnectionErrorDomain; +extern int const kRTCSessionDescriptionErrorCode; + +/** Represents the signaling state of the peer connection. */ +typedef NS_ENUM(NSInteger, RTCSignalingState) { + RTCSignalingStateStable, + RTCSignalingStateHaveLocalOffer, + RTCSignalingStateHaveLocalPrAnswer, + RTCSignalingStateHaveRemoteOffer, + RTCSignalingStateHaveRemotePrAnswer, + // Not an actual state, represents the total number of states. + RTCSignalingStateClosed, +}; + +/** Represents the ice connection state of the peer connection. */ +typedef NS_ENUM(NSInteger, RTCIceConnectionState) { + RTCIceConnectionStateNew, + RTCIceConnectionStateChecking, + RTCIceConnectionStateConnected, + RTCIceConnectionStateCompleted, + RTCIceConnectionStateFailed, + RTCIceConnectionStateDisconnected, + RTCIceConnectionStateClosed, + RTCIceConnectionStateCount, +}; + +/** Represents the ice gathering state of the peer connection. */ +typedef NS_ENUM(NSInteger, RTCIceGatheringState) { + RTCIceGatheringStateNew, + RTCIceGatheringStateGathering, + RTCIceGatheringStateComplete, +}; + +/** Represents the stats output level. */ +typedef NS_ENUM(NSInteger, RTCStatsOutputLevel) { + RTCStatsOutputLevelStandard, + RTCStatsOutputLevelDebug, +}; + +@class RTCPeerConnection; + +RTC_EXPORT +@protocol RTCPeerConnectionDelegate + +/** Called when the SignalingState changed. */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didChangeSignalingState:(RTCSignalingState)stateChanged; + +/** Called when media is received on a new stream from remote peer. */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didAddStream:(RTCMediaStream *)stream; + +/** Called when a remote peer closes a stream. + * This is not called when RTCSdpSemanticsUnifiedPlan is specified. + */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didRemoveStream:(RTCMediaStream *)stream; + +/** Called when negotiation is needed, for example ICE has restarted. */ +- (void)peerConnectionShouldNegotiate:(RTCPeerConnection *)peerConnection; + +/** Called any time the IceConnectionState changes. */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didChangeIceConnectionState:(RTCIceConnectionState)newState; + +/** Called any time the IceGatheringState changes. */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didChangeIceGatheringState:(RTCIceGatheringState)newState; + +/** New ice candidate has been found. */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didGenerateIceCandidate:(RTCIceCandidate *)candidate; + +/** Called when a group of local Ice candidates have been removed. */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didRemoveIceCandidates:(NSArray *)candidates; + +/** New data channel has been opened. */ +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didOpenDataChannel:(RTCDataChannel *)dataChannel; + +/** Called when signaling indicates a transceiver will be receiving media from + * the remote endpoint. + * This is only called with RTCSdpSemanticsUnifiedPlan specified. + */ +@optional +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didStartReceivingOnTransceiver:(RTCRtpTransceiver *)transceiver; + +/** Called when a receiver and its track are created. */ +@optional +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didAddReceiver:(RTCRtpReceiver *)rtpReceiver + streams:(NSArray *)mediaStreams; + +@end + +RTC_EXPORT +@interface RTCPeerConnection : NSObject + +/** The object that will be notifed about events such as state changes and + * streams being added or removed. + */ +@property(nonatomic, weak, nullable) id delegate; +/** This property is not available with RTCSdpSemanticsUnifiedPlan. Please use + * |senders| instead. + */ +@property(nonatomic, readonly) NSArray *localStreams; +@property(nonatomic, readonly, nullable) + RTCSessionDescription *localDescription; +@property(nonatomic, readonly, nullable) + RTCSessionDescription *remoteDescription; +@property(nonatomic, readonly) RTCSignalingState signalingState; +@property(nonatomic, readonly) RTCIceConnectionState iceConnectionState; +@property(nonatomic, readonly) RTCIceGatheringState iceGatheringState; +@property(nonatomic, readonly, copy) RTCConfiguration *configuration; + +/** Gets all RTCRtpSenders associated with this peer connection. + * Note: reading this property returns different instances of RTCRtpSender. + * Use isEqual: instead of == to compare RTCRtpSender instances. + */ +@property(nonatomic, readonly) NSArray *senders; + +/** Gets all RTCRtpReceivers associated with this peer connection. + * Note: reading this property returns different instances of RTCRtpReceiver. + * Use isEqual: instead of == to compare RTCRtpReceiver instances. + */ +@property(nonatomic, readonly) NSArray *receivers; + +/** Gets all RTCRtpTransceivers associated with this peer connection. + * Note: reading this property returns different instances of + * RTCRtpTransceiver. Use isEqual: instead of == to compare RTCRtpTransceiver + * instances. + * This is only available with RTCSdpSemanticsUnifiedPlan specified. + */ +@property(nonatomic, readonly) NSArray *transceivers; + +- (instancetype)init NS_UNAVAILABLE; + +/** Sets the PeerConnection's global configuration to |configuration|. + * Any changes to STUN/TURN servers or ICE candidate policy will affect the + * next gathering phase, and cause the next call to createOffer to generate + * new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies + * cannot be changed with this method. + */ +- (BOOL)setConfiguration:(RTCConfiguration *)configuration; + +/** Terminate all media and close the transport. */ +- (void)close; + +/** Provide a remote candidate to the ICE Agent. */ +- (void)addIceCandidate:(RTCIceCandidate *)candidate; + +/** Remove a group of remote candidates from the ICE Agent. */ +- (void)removeIceCandidates:(NSArray *)candidates; + +/** Add a new media stream to be sent on this peer connection. + * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use + * addTrack instead. + */ +- (void)addStream:(RTCMediaStream *)stream; + +/** Remove the given media stream from this peer connection. + * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use + * removeTrack instead. + */ +- (void)removeStream:(RTCMediaStream *)stream; + +/** Add a new media stream track to be sent on this peer connection, and return + * the newly created RTCRtpSender. The RTCRtpSender will be associated with + * the streams specified in the |streamIds| list. + * + * Errors: If an error occurs, returns nil. An error can occur if: + * - A sender already exists for the track. + * - The peer connection is closed. + */ +- (RTCRtpSender *)addTrack:(RTCMediaStreamTrack *)track streamIds:(NSArray *)streamIds; + +/** With PlanB semantics, removes an RTCRtpSender from this peer connection. + * + * With UnifiedPlan semantics, sets sender's track to null and removes the + * send component from the associated RTCRtpTransceiver's direction. + * + * Returns YES on success. + */ +- (BOOL)removeTrack:(RTCRtpSender *)sender; + +/** addTransceiver creates a new RTCRtpTransceiver and adds it to the set of + * transceivers. Adding a transceiver will cause future calls to CreateOffer + * to add a media description for the corresponding transceiver. + * + * The initial value of |mid| in the returned transceiver is nil. Setting a + * new session description may change it to a non-nil value. + * + * https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver + * + * Optionally, an RtpTransceiverInit structure can be specified to configure + * the transceiver from construction. If not specified, the transceiver will + * default to having a direction of kSendRecv and not be part of any streams. + * + * These methods are only available when Unified Plan is enabled (see + * RTCConfiguration). + */ + +/** Adds a transceiver with a sender set to transmit the given track. The kind + * of the transceiver (and sender/receiver) will be derived from the kind of + * the track. + */ +- (RTCRtpTransceiver *)addTransceiverWithTrack:(RTCMediaStreamTrack *)track; +- (RTCRtpTransceiver *)addTransceiverWithTrack:(RTCMediaStreamTrack *)track + init:(RTCRtpTransceiverInit *)init; + +/** Adds a transceiver with the given kind. Can either be RTCRtpMediaTypeAudio + * or RTCRtpMediaTypeVideo. + */ +- (RTCRtpTransceiver *)addTransceiverOfType:(RTCRtpMediaType)mediaType; +- (RTCRtpTransceiver *)addTransceiverOfType:(RTCRtpMediaType)mediaType + init:(RTCRtpTransceiverInit *)init; + +/** Generate an SDP offer. */ +- (void)offerForConstraints:(RTCMediaConstraints *)constraints + completionHandler:(nullable void (^) + (RTCSessionDescription * _Nullable sdp, + NSError * _Nullable error))completionHandler; + +/** Generate an SDP answer. */ +- (void)answerForConstraints:(RTCMediaConstraints *)constraints + completionHandler:(nullable void (^) + (RTCSessionDescription * _Nullable sdp, + NSError * _Nullable error))completionHandler; + +/** Apply the supplied RTCSessionDescription as the local description. */ +- (void)setLocalDescription:(RTCSessionDescription *)sdp + completionHandler: + (nullable void (^)(NSError * _Nullable error))completionHandler; + +/** Apply the supplied RTCSessionDescription as the remote description. */ +- (void)setRemoteDescription:(RTCSessionDescription *)sdp + completionHandler: + (nullable void (^)(NSError * _Nullable error))completionHandler; + +/** Limits the bandwidth allocated for all RTP streams sent by this + * PeerConnection. Nil parameters will be unchanged. Setting + * |currentBitrateBps| will force the available bitrate estimate to the given + * value. Returns YES if the parameters were successfully updated. + */ +- (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps + currentBitrateBps:(nullable NSNumber *)currentBitrateBps + maxBitrateBps:(nullable NSNumber *)maxBitrateBps; + +/** Start or stop recording an Rtc EventLog. */ +- (BOOL)startRtcEventLogWithFilePath:(NSString *)filePath + maxSizeInBytes:(int64_t)maxSizeInBytes; +- (void)stopRtcEventLog; + +@end + +@interface RTCPeerConnection (Media) + +/** Create an RTCRtpSender with the specified kind and media stream ID. + * See RTCMediaStreamTrack.h for available kinds. + * This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use + * addTransceiver instead. + */ +- (RTCRtpSender *)senderWithKind:(NSString *)kind streamId:(NSString *)streamId; + +@end + +@interface RTCPeerConnection (DataChannel) + +/** Create a new data channel with the given label and configuration. */ +- (nullable RTCDataChannel *)dataChannelForLabel:(NSString *)label + configuration:(RTCDataChannelConfiguration *)configuration; + +@end + +@interface RTCPeerConnection (Stats) + +/** Gather stats for the given RTCMediaStreamTrack. If |mediaStreamTrack| is nil + * statistics are gathered for all tracks. + */ +- (void)statsForTrack: + (nullable RTCMediaStreamTrack *)mediaStreamTrack + statsOutputLevel:(RTCStatsOutputLevel)statsOutputLevel + completionHandler: + (nullable void (^)(NSArray *stats))completionHandler; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCPeerConnectionFactory.h b/ios/Headers/RTCPeerConnectionFactory.h new file mode 100644 index 00000000..d00f6f2a --- /dev/null +++ b/ios/Headers/RTCPeerConnectionFactory.h @@ -0,0 +1,86 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class RTCAudioSource; +@class RTCAudioTrack; +@class RTCConfiguration; +@class RTCMediaConstraints; +@class RTCMediaStream; +@class RTCPeerConnection; +@class RTCVideoSource; +@class RTCVideoTrack; +@class RTCPeerConnectionFactoryOptions; +@protocol RTCPeerConnectionDelegate; +@protocol RTCVideoDecoderFactory; +@protocol RTCVideoEncoderFactory; + +RTC_EXPORT +@interface RTCPeerConnectionFactory : NSObject + +/* Initialize object with default H264 video encoder/decoder factories */ +- (instancetype)init; + +/* Initialize object with injectable video encoder/decoder factories */ +- (instancetype)initWithEncoderFactory:(nullable id)encoderFactory + decoderFactory:(nullable id)decoderFactory; + +/** Initialize an RTCAudioSource with constraints. */ +- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints; + +/** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio source with no + * constraints. + */ +- (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId; + +/** Initialize an RTCAudioTrack with a source and an id. */ +- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source + trackId:(NSString *)trackId; + +/** Initialize a generic RTCVideoSource. The RTCVideoSource should be passed to a RTCVideoCapturer + * implementation, e.g. RTCCameraVideoCapturer, in order to produce frames. + */ +- (RTCVideoSource *)videoSource; + +/** Initialize an RTCVideoTrack with a source and an id. */ +- (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source + trackId:(NSString *)trackId; + +/** Initialize an RTCMediaStream with an id. */ +- (RTCMediaStream *)mediaStreamWithStreamId:(NSString *)streamId; + +/** Initialize an RTCPeerConnection with a configuration, constraints, and + * delegate. + */ +- (RTCPeerConnection *)peerConnectionWithConfiguration: + (RTCConfiguration *)configuration + constraints: + (RTCMediaConstraints *)constraints + delegate: + (nullable id)delegate; + +/** Set the options to be used for subsequently created RTCPeerConnections */ +- (void)setOptions:(nonnull RTCPeerConnectionFactoryOptions *)options; + +/** Start an AecDump recording. This API call will likely change in the future. */ +- (BOOL)startAecDumpWithFilePath:(NSString *)filePath + maxSizeInBytes:(int64_t)maxSizeInBytes; + +/* Stop an active AecDump recording */ +- (void)stopAecDump; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCPeerConnectionFactoryOptions.h b/ios/Headers/RTCPeerConnectionFactoryOptions.h new file mode 100644 index 00000000..33faa1e6 --- /dev/null +++ b/ios/Headers/RTCPeerConnectionFactoryOptions.h @@ -0,0 +1,40 @@ +/* + * Copyright 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCPeerConnectionFactoryOptions : NSObject + +@property(nonatomic, assign) BOOL disableEncryption; + +@property(nonatomic, assign) BOOL disableNetworkMonitor; + +@property(nonatomic, assign) BOOL ignoreLoopbackNetworkAdapter; + +@property(nonatomic, assign) BOOL ignoreVPNNetworkAdapter; + +@property(nonatomic, assign) BOOL ignoreCellularNetworkAdapter; + +@property(nonatomic, assign) BOOL ignoreWiFiNetworkAdapter; + +@property(nonatomic, assign) BOOL ignoreEthernetNetworkAdapter; + +@property(nonatomic, assign) BOOL enableAes128Sha1_32CryptoCipher; + +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCRtpCodecParameters.h b/ios/Headers/RTCRtpCodecParameters.h new file mode 100644 index 00000000..c7ca2f59 --- /dev/null +++ b/ios/Headers/RTCRtpCodecParameters.h @@ -0,0 +1,70 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXTERN const NSString * const kRTCRtxCodecName; +RTC_EXTERN const NSString * const kRTCRedCodecName; +RTC_EXTERN const NSString * const kRTCUlpfecCodecName; +RTC_EXTERN const NSString * const kRTCFlexfecCodecName; +RTC_EXTERN const NSString * const kRTCOpusCodecName; +RTC_EXTERN const NSString * const kRTCIsacCodecName; +RTC_EXTERN const NSString * const kRTCL16CodecName; +RTC_EXTERN const NSString * const kRTCG722CodecName; +RTC_EXTERN const NSString * const kRTCIlbcCodecName; +RTC_EXTERN const NSString * const kRTCPcmuCodecName; +RTC_EXTERN const NSString * const kRTCPcmaCodecName; +RTC_EXTERN const NSString * const kRTCDtmfCodecName; +RTC_EXTERN const NSString * const kRTCComfortNoiseCodecName; +RTC_EXTERN const NSString * const kRTCVp8CodecName; +RTC_EXTERN const NSString * const kRTCVp9CodecName; +RTC_EXTERN const NSString * const kRTCH264CodecName; + +/** Defined in http://w3c.github.io/webrtc-pc/#idl-def-RTCRtpCodecParameters */ +RTC_EXPORT +@interface RTCRtpCodecParameters : NSObject + +/** The RTP payload type. */ +@property(nonatomic, assign) int payloadType; + +/** + * The codec MIME subtype. Valid types are listed in: + * http://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml#rtp-parameters-2 + * + * Several supported types are represented by the constants above. + */ +@property(nonatomic, readonly, nonnull) NSString *name; + +/** + * The media type of this codec. Equivalent to MIME top-level type. + * + * Valid values are kRTCMediaStreamTrackKindAudio and + * kRTCMediaStreamTrackKindVideo. + */ +@property(nonatomic, readonly, nonnull) NSString *kind; + +/** The codec clock rate expressed in Hertz. */ +@property(nonatomic, readonly, nullable) NSNumber *clockRate; + +/** + * The number of channels (mono=1, stereo=2). + * Set to null for video codecs. + **/ +@property(nonatomic, readonly, nullable) NSNumber *numChannels; + +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCRtpEncodingParameters.h b/ios/Headers/RTCRtpEncodingParameters.h new file mode 100644 index 00000000..a956f0d4 --- /dev/null +++ b/ios/Headers/RTCRtpEncodingParameters.h @@ -0,0 +1,35 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCRtpEncodingParameters : NSObject + +/** Controls whether the encoding is currently transmitted. */ +@property(nonatomic, assign) BOOL isActive; + +/** The maximum bitrate to use for the encoding, or nil if there is no + * limit. + */ +@property(nonatomic, copy, nullable) NSNumber *maxBitrateBps; + +/** The SSRC being used by this encoding. */ +@property(nonatomic, readonly, nullable) NSNumber *ssrc; + +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCRtpParameters.h b/ios/Headers/RTCRtpParameters.h new file mode 100644 index 00000000..bdebf848 --- /dev/null +++ b/ios/Headers/RTCRtpParameters.h @@ -0,0 +1,32 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCRtpParameters : NSObject + +/** The currently active encodings in the order of preference. */ +@property(nonatomic, copy) NSArray *encodings; + +/** The negotiated set of send codecs in order of preference. */ +@property(nonatomic, copy) NSArray *codecs; + +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCRtpReceiver.h b/ios/Headers/RTCRtpReceiver.h new file mode 100644 index 00000000..6156db9f --- /dev/null +++ b/ios/Headers/RTCRtpReceiver.h @@ -0,0 +1,82 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Represents the media type of the RtpReceiver. */ +typedef NS_ENUM(NSInteger, RTCRtpMediaType) { + RTCRtpMediaTypeAudio, + RTCRtpMediaTypeVideo, + RTCRtpMediaTypeData, +}; + +@class RTCRtpReceiver; + +RTC_EXPORT +@protocol RTCRtpReceiverDelegate + +/** Called when the first RTP packet is received. + * + * Note: Currently if there are multiple RtpReceivers of the same media type, + * they will all call OnFirstPacketReceived at once. + * + * For example, if we create three audio receivers, A/B/C, they will listen to + * the same signal from the underneath network layer. Whenever the first audio packet + * is received, the underneath signal will be fired. All the receivers A/B/C will be + * notified and the callback of the receiver's delegate will be called. + * + * The process is the same for video receivers. + */ +- (void)rtpReceiver:(RTCRtpReceiver *)rtpReceiver + didReceiveFirstPacketForMediaType:(RTCRtpMediaType)mediaType; + +@end + +RTC_EXPORT +@protocol RTCRtpReceiver + +/** A unique identifier for this receiver. */ +@property(nonatomic, readonly) NSString *receiverId; + +/** The currently active RTCRtpParameters, as defined in + * https://www.w3.org/TR/webrtc/#idl-def-RTCRtpParameters. + * + * The WebRTC specification only defines RTCRtpParameters in terms of senders, + * but this API also applies them to receivers, similar to ORTC: + * http://ortc.org/wp-content/uploads/2016/03/ortc.html#rtcrtpparameters*. + */ +@property(nonatomic, readonly) RTCRtpParameters *parameters; + +/** The RTCMediaStreamTrack associated with the receiver. + * Note: reading this property returns a new instance of + * RTCMediaStreamTrack. Use isEqual: instead of == to compare + * RTCMediaStreamTrack instances. + */ +@property(nonatomic, readonly, nullable) RTCMediaStreamTrack *track; + +/** The delegate for this RtpReceiver. */ +@property(nonatomic, weak) id delegate; + +@end + +RTC_EXPORT +@interface RTCRtpReceiver : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCRtpSender.h b/ios/Headers/RTCRtpSender.h new file mode 100644 index 00000000..f6e91250 --- /dev/null +++ b/ios/Headers/RTCRtpSender.h @@ -0,0 +1,50 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@protocol RTCRtpSender + +/** A unique identifier for this sender. */ +@property(nonatomic, readonly) NSString *senderId; + +/** The currently active RTCRtpParameters, as defined in + * https://www.w3.org/TR/webrtc/#idl-def-RTCRtpParameters. + */ +@property(nonatomic, copy) RTCRtpParameters *parameters; + +/** The RTCMediaStreamTrack associated with the sender. + * Note: reading this property returns a new instance of + * RTCMediaStreamTrack. Use isEqual: instead of == to compare + * RTCMediaStreamTrack instances. + */ +@property(nonatomic, copy, nullable) RTCMediaStreamTrack *track; + +/** The RTCDtmfSender accociated with the RTP sender. */ +@property(nonatomic, readonly, nullable) id dtmfSender; + +@end + +RTC_EXPORT +@interface RTCRtpSender : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCRtpTransceiver.h b/ios/Headers/RTCRtpTransceiver.h new file mode 100644 index 00000000..db0fd1c6 --- /dev/null +++ b/ios/Headers/RTCRtpTransceiver.h @@ -0,0 +1,128 @@ +/* + * Copyright 2018 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. + */ + +#import + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiverdirection */ +typedef NS_ENUM(NSInteger, RTCRtpTransceiverDirection) { + RTCRtpTransceiverDirectionSendRecv, + RTCRtpTransceiverDirectionSendOnly, + RTCRtpTransceiverDirectionRecvOnly, + RTCRtpTransceiverDirectionInactive, +}; + +/** Structure for initializing an RTCRtpTransceiver in a call to + * RTCPeerConnection.addTransceiver. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiverinit + */ +@interface RTCRtpTransceiverInit : NSObject + +/** Direction of the RTCRtpTransceiver. See RTCRtpTransceiver.direction. */ +@property(nonatomic) RTCRtpTransceiverDirection direction; + +/** The added RTCRtpTransceiver will be added to these streams. */ +@property(nonatomic) NSArray *streamIds; + +/** TODO(bugs.webrtc.org/7600): Not implemented. */ +@property(nonatomic) NSArray *sendEncodings; + +@end + +@class RTCRtpTransceiver; + +/** The RTCRtpTransceiver maps to the RTCRtpTransceiver defined by the WebRTC + * specification. A transceiver represents a combination of an RTCRtpSender + * and an RTCRtpReceiver that share a common mid. As defined in JSEP, an + * RTCRtpTransceiver is said to be associated with a media description if its + * mid property is non-nil; otherwise, it is said to be disassociated. + * JSEP: https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24 + * + * Note that RTCRtpTransceivers are only supported when using + * RTCPeerConnection with Unified Plan SDP. + * + * WebRTC specification for RTCRtpTransceiver, the JavaScript analog: + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver + */ +RTC_EXPORT +@protocol RTCRtpTransceiver + +/** Media type of the transceiver. The sender and receiver will also have this + * type. + */ +@property(nonatomic, readonly) RTCRtpMediaType mediaType; + +/** The mid attribute is the mid negotiated and present in the local and + * remote descriptions. Before negotiation is complete, the mid value may be + * nil. After rollbacks, the value may change from a non-nil value to nil. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-mid + */ +@property(nonatomic, readonly) NSString *mid; + +/** The sender attribute exposes the RTCRtpSender corresponding to the RTP + * media that may be sent with the transceiver's mid. The sender is always + * present, regardless of the direction of media. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-sender + */ +@property(nonatomic, readonly) RTCRtpSender *sender; + +/** The receiver attribute exposes the RTCRtpReceiver corresponding to the RTP + * media that may be received with the transceiver's mid. The receiver is + * always present, regardless of the direction of media. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-receiver + */ +@property(nonatomic, readonly) RTCRtpReceiver *receiver; + +/** The isStopped attribute indicates that the sender of this transceiver will + * no longer send, and that the receiver will no longer receive. It is true if + * either stop has been called or if setting the local or remote description + * has caused the RTCRtpTransceiver to be stopped. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-stopped + */ +@property(nonatomic, readonly) BOOL isStopped; + +/** The direction attribute indicates the preferred direction of this + * transceiver, which will be used in calls to createOffer and createAnswer. + * An update of directionality does not take effect immediately. Instead, + * future calls to createOffer and createAnswer mark the corresponding media + * descriptions as sendrecv, sendonly, recvonly, or inactive. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-direction + */ +@property(nonatomic) RTCRtpTransceiverDirection direction; + +/** The currentDirection attribute indicates the current direction negotiated + * for this transceiver. If this transceiver has never been represented in an + * offer/answer exchange, or if the transceiver is stopped, the value is not + * present and this method returns NO. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-currentdirection + */ +- (BOOL)currentDirection:(RTCRtpTransceiverDirection *)currentDirectionOut; + +/** The stop method irreversibly stops the RTCRtpTransceiver. The sender of + * this transceiver will no longer send, the receiver will no longer receive. + * https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-stop + */ +- (void)stop; + +@end + +RTC_EXPORT +@interface RTCRtpTransceiver : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCSSLAdapter.h b/ios/Headers/RTCSSLAdapter.h new file mode 100644 index 00000000..a0da827c --- /dev/null +++ b/ios/Headers/RTCSSLAdapter.h @@ -0,0 +1,20 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import + +/** + * Initialize and clean up the SSL library. Failure is fatal. These call the + * corresponding functions in webrtc/rtc_base/ssladapter.h. + */ +RTC_EXTERN BOOL RTCInitializeSSL(void); +RTC_EXTERN BOOL RTCCleanupSSL(void); diff --git a/ios/Headers/RTCSessionDescription.h b/ios/Headers/RTCSessionDescription.h new file mode 100644 index 00000000..41439804 --- /dev/null +++ b/ios/Headers/RTCSessionDescription.h @@ -0,0 +1,48 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +/** + * Represents the session description type. This exposes the same types that are + * in C++, which doesn't include the rollback type that is in the W3C spec. + */ +typedef NS_ENUM(NSInteger, RTCSdpType) { + RTCSdpTypeOffer, + RTCSdpTypePrAnswer, + RTCSdpTypeAnswer, +}; + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCSessionDescription : NSObject + +/** The type of session description. */ +@property(nonatomic, readonly) RTCSdpType type; + +/** The SDP string representation of this session description. */ +@property(nonatomic, readonly) NSString *sdp; + +- (instancetype)init NS_UNAVAILABLE; + +/** Initialize a session description with a type and SDP string. */ +- (instancetype)initWithType:(RTCSdpType)type sdp:(NSString *)sdp + NS_DESIGNATED_INITIALIZER; + ++ (NSString *)stringForType:(RTCSdpType)type; + ++ (RTCSdpType)typeForString:(NSString *)string; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCTracing.h b/ios/Headers/RTCTracing.h new file mode 100644 index 00000000..5e7e48f2 --- /dev/null +++ b/ios/Headers/RTCTracing.h @@ -0,0 +1,21 @@ +/* + * Copyright 2016 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. + */ + +#import + +#import + +RTC_EXTERN void RTCSetupInternalTracer(void); +/** Starts capture to specified file. Must be a valid writable path. + * Returns YES if capture starts. + */ +RTC_EXTERN BOOL RTCStartInternalCapture(NSString *filePath); +RTC_EXTERN void RTCStopInternalCapture(void); +RTC_EXTERN void RTCShutdownInternalTracer(void); diff --git a/ios/Headers/RTCVideoCapturer.h b/ios/Headers/RTCVideoCapturer.h new file mode 100644 index 00000000..f0a2eaa1 --- /dev/null +++ b/ios/Headers/RTCVideoCapturer.h @@ -0,0 +1,31 @@ +/* + * Copyright 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. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class RTCVideoCapturer; + +RTC_EXPORT +@protocol RTCVideoCapturerDelegate +- (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame; +@end + +RTC_EXPORT +@interface RTCVideoCapturer : NSObject + +@property(nonatomic, weak) id delegate; + +- (instancetype)initWithDelegate:(id)delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoCodec.h b/ios/Headers/RTCVideoCodec.h new file mode 100644 index 00000000..e9dd234c --- /dev/null +++ b/ios/Headers/RTCVideoCodec.h @@ -0,0 +1,185 @@ +/* + * Copyright 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. + */ + +#import + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT extern NSString *const kRTCVideoCodecVp8Name; +RTC_EXPORT extern NSString *const kRTCVideoCodecVp9Name; +RTC_EXPORT extern NSString *const kRTCVideoCodecH264Name; +RTC_EXPORT extern NSString *const kRTCLevel31ConstrainedHigh; +RTC_EXPORT extern NSString *const kRTCLevel31ConstrainedBaseline; + +/** Represents an encoded frame's type. */ +typedef NS_ENUM(NSUInteger, RTCFrameType) { + RTCFrameTypeEmptyFrame = 0, + RTCFrameTypeAudioFrameSpeech = 1, + RTCFrameTypeAudioFrameCN = 2, + RTCFrameTypeVideoFrameKey = 3, + RTCFrameTypeVideoFrameDelta = 4, +}; + +typedef NS_ENUM(NSUInteger, RTCVideoContentType) { + RTCVideoContentTypeUnspecified, + RTCVideoContentTypeScreenshare, +}; + +/** Represents an encoded frame. Corresponds to webrtc::EncodedImage. */ +RTC_EXPORT +@interface RTCEncodedImage : NSObject + +@property(nonatomic, strong) NSData *buffer; +@property(nonatomic, assign) int32_t encodedWidth; +@property(nonatomic, assign) int32_t encodedHeight; +@property(nonatomic, assign) uint32_t timeStamp; +@property(nonatomic, assign) int64_t captureTimeMs; +@property(nonatomic, assign) int64_t ntpTimeMs; +@property(nonatomic, assign) uint8_t flags; +@property(nonatomic, assign) int64_t encodeStartMs; +@property(nonatomic, assign) int64_t encodeFinishMs; +@property(nonatomic, assign) RTCFrameType frameType; +@property(nonatomic, assign) RTCVideoRotation rotation; +@property(nonatomic, assign) BOOL completeFrame; +@property(nonatomic, strong) NSNumber *qp; +@property(nonatomic, assign) RTCVideoContentType contentType; + +@end + +/** Information for header. Corresponds to webrtc::RTPFragmentationHeader. */ +RTC_EXPORT +@interface RTCRtpFragmentationHeader : NSObject + +@property(nonatomic, strong) NSArray *fragmentationOffset; +@property(nonatomic, strong) NSArray *fragmentationLength; +@property(nonatomic, strong) NSArray *fragmentationTimeDiff; +@property(nonatomic, strong) NSArray *fragmentationPlType; + +@end + +/** Implement this protocol to pass codec specific info from the encoder. + * Corresponds to webrtc::CodecSpecificInfo. + */ +RTC_EXPORT +@protocol RTCCodecSpecificInfo + +@end + +/** Callback block for encoder. */ +typedef BOOL (^RTCVideoEncoderCallback)(RTCEncodedImage *frame, + id info, + RTCRtpFragmentationHeader *header); + +/** Callback block for decoder. */ +typedef void (^RTCVideoDecoderCallback)(RTCVideoFrame *frame); + +typedef NS_ENUM(NSUInteger, RTCVideoCodecMode) { + RTCVideoCodecModeRealtimeVideo, + RTCVideoCodecModeScreensharing, +}; + +/** Holds information to identify a codec. Corresponds to cricket::VideoCodec. */ +RTC_EXPORT +@interface RTCVideoCodecInfo : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +- (instancetype)initWithName:(NSString *)name; + +- (instancetype)initWithName:(NSString *)name + parameters:(nullable NSDictionary *)parameters + NS_DESIGNATED_INITIALIZER; + +- (BOOL)isEqualToCodecInfo:(RTCVideoCodecInfo *)info; + +@property(nonatomic, readonly) NSString *name; +@property(nonatomic, readonly) NSDictionary *parameters; + +@end + +/** Settings for encoder. Corresponds to webrtc::VideoCodec. */ +RTC_EXPORT +@interface RTCVideoEncoderSettings : NSObject + +@property(nonatomic, strong) NSString *name; + +@property(nonatomic, assign) unsigned short width; +@property(nonatomic, assign) unsigned short height; + +@property(nonatomic, assign) unsigned int startBitrate; // kilobits/sec. +@property(nonatomic, assign) unsigned int maxBitrate; +@property(nonatomic, assign) unsigned int minBitrate; +@property(nonatomic, assign) unsigned int targetBitrate; + +@property(nonatomic, assign) uint32_t maxFramerate; + +@property(nonatomic, assign) unsigned int qpMax; +@property(nonatomic, assign) RTCVideoCodecMode mode; + +@end + +/** QP thresholds for encoder. Corresponds to webrtc::VideoEncoder::QpThresholds. */ +RTC_EXPORT +@interface RTCVideoEncoderQpThresholds : NSObject + +- (instancetype)initWithThresholdsLow:(NSInteger)low high:(NSInteger)high; + +@property(nonatomic, readonly) NSInteger low; +@property(nonatomic, readonly) NSInteger high; + +@end + +/** Protocol for encoder implementations. */ +RTC_EXPORT +@protocol RTCVideoEncoder + +- (void)setCallback:(RTCVideoEncoderCallback)callback; +- (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings + numberOfCores:(int)numberOfCores; +- (NSInteger)releaseEncoder; +- (NSInteger)encode:(RTCVideoFrame *)frame + codecSpecificInfo:(nullable id)info + frameTypes:(NSArray *)frameTypes; +- (int)setBitrate:(uint32_t)bitrateKbit framerate:(uint32_t)framerate; +- (NSString *)implementationName; + +/** Returns QP scaling settings for encoder. The quality scaler adjusts the resolution in order to + * keep the QP from the encoded images within the given range. Returning nil from this function + * disables quality scaling. */ +- (RTCVideoEncoderQpThresholds *)scalingSettings; + +@end + +/** Protocol for decoder implementations. */ +RTC_EXPORT +@protocol RTCVideoDecoder + +- (void)setCallback:(RTCVideoDecoderCallback)callback; +- (NSInteger)startDecodeWithSettings:(RTCVideoEncoderSettings *)settings + numberOfCores:(int)numberOfCores + DEPRECATED_MSG_ATTRIBUTE("use startDecodeWithNumberOfCores: instead"); +- (NSInteger)releaseDecoder; +- (NSInteger)decode:(RTCEncodedImage *)encodedImage + missingFrames:(BOOL)missingFrames + fragmentationHeader:(RTCRtpFragmentationHeader *)fragmentationHeader + codecSpecificInfo:(nullable id)info + renderTimeMs:(int64_t)renderTimeMs; +- (NSString *)implementationName; + +// TODO(andersc): Make non-optional when `startDecodeWithSettings:numberOfCores:` is removed. +@optional +- (NSInteger)startDecodeWithNumberOfCores:(int)numberOfCores; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoCodecFactory.h b/ios/Headers/RTCVideoCodecFactory.h new file mode 100644 index 00000000..0ef2c8a6 --- /dev/null +++ b/ios/Headers/RTCVideoCodecFactory.h @@ -0,0 +1,54 @@ +/* + * Copyright 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. + */ + +#import + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** RTCVideoEncoderFactory is an Objective-C version of webrtc::VideoEncoderFactory. */ +RTC_EXPORT +@protocol RTCVideoEncoderFactory + +- (nullable id)createEncoder:(RTCVideoCodecInfo *)info; +- (NSArray *)supportedCodecs; // TODO(andersc): "supportedFormats" instead? + +@end + +/** RTCVideoDecoderFactory is an Objective-C version of webrtc::VideoDecoderFactory. */ +RTC_EXPORT +@protocol RTCVideoDecoderFactory + +- (nullable id)createDecoder:(RTCVideoCodecInfo *)info; +- (NSArray *)supportedCodecs; // TODO(andersc): "supportedFormats" instead? + +@end + +#pragma mark - Default factories + +/** These codec factories include support for all codecs bundled with WebRTC. If using custom + * codecs, create custom implementations of RTCVideoEncoderFactory and RTCVideoDecoderFactory. + */ +RTC_EXPORT +@interface RTCDefaultVideoEncoderFactory : NSObject + +@property(nonatomic, retain) RTCVideoCodecInfo *preferredCodec; + ++ (NSArray *)supportedCodecs; + +@end + +RTC_EXPORT +@interface RTCDefaultVideoDecoderFactory : NSObject +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoCodecH264.h b/ios/Headers/RTCVideoCodecH264.h new file mode 100644 index 00000000..1c307ebe --- /dev/null +++ b/ios/Headers/RTCVideoCodecH264.h @@ -0,0 +1,50 @@ +/* + * Copyright 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. + */ + +#import + +#import +#import + +/** Class for H264 specific config. */ +typedef NS_ENUM(NSUInteger, RTCH264PacketizationMode) { + RTCH264PacketizationModeNonInterleaved = 0, // Mode 1 - STAP-A, FU-A is allowed + RTCH264PacketizationModeSingleNalUnit // Mode 0 - only single NALU allowed +}; + +RTC_EXPORT +@interface RTCCodecSpecificInfoH264 : NSObject + +@property(nonatomic, assign) RTCH264PacketizationMode packetizationMode; + +@end + +/** Encoder. */ +RTC_EXPORT +@interface RTCVideoEncoderH264 : NSObject + +- (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo; + +@end + +/** Decoder. */ +RTC_EXPORT +@interface RTCVideoDecoderH264 : NSObject +@end + +/** Encoder factory. */ +RTC_EXPORT +@interface RTCVideoEncoderFactoryH264 : NSObject +@end + +/** Decoder factory. */ +RTC_EXPORT +@interface RTCVideoDecoderFactoryH264 : NSObject +@end diff --git a/ios/Headers/RTCVideoDecoderVP8.h b/ios/Headers/RTCVideoDecoderVP8.h new file mode 100644 index 00000000..962b6312 --- /dev/null +++ b/ios/Headers/RTCVideoDecoderVP8.h @@ -0,0 +1,25 @@ +/* + * Copyright 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. + */ + +#import + +#import +#import + +RTC_EXPORT +@interface RTCVideoDecoderVP8 : NSObject + +/* This returns a VP8 decoder that can be returned from a RTCVideoDecoderFactory injected into + * RTCPeerConnectionFactory. Even though it implements the RTCVideoDecoder protocol, it can not be + * used independently from the RTCPeerConnectionFactory. + */ ++ (id)vp8Decoder; + +@end diff --git a/ios/Headers/RTCVideoDecoderVP9.h b/ios/Headers/RTCVideoDecoderVP9.h new file mode 100644 index 00000000..faf66ef0 --- /dev/null +++ b/ios/Headers/RTCVideoDecoderVP9.h @@ -0,0 +1,25 @@ +/* + * Copyright 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. + */ + +#import + +#import +#import + +RTC_EXPORT +@interface RTCVideoDecoderVP9 : NSObject + +/* This returns a VP9 decoder that can be returned from a RTCVideoDecoderFactory injected into + * RTCPeerConnectionFactory. Even though it implements the RTCVideoDecoder protocol, it can not be + * used independently from the RTCPeerConnectionFactory. + */ ++ (id)vp9Decoder; + +@end diff --git a/ios/Headers/RTCVideoEncoderVP8.h b/ios/Headers/RTCVideoEncoderVP8.h new file mode 100644 index 00000000..e63b24dd --- /dev/null +++ b/ios/Headers/RTCVideoEncoderVP8.h @@ -0,0 +1,25 @@ +/* + * Copyright 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. + */ + +#import + +#import +#import + +RTC_EXPORT +@interface RTCVideoEncoderVP8 : NSObject + +/* This returns a VP8 encoder that can be returned from a RTCVideoEncoderFactory injected into + * RTCPeerConnectionFactory. Even though it implements the RTCVideoEncoder protocol, it can not be + * used independently from the RTCPeerConnectionFactory. + */ ++ (id)vp8Encoder; + +@end diff --git a/ios/Headers/RTCVideoEncoderVP9.h b/ios/Headers/RTCVideoEncoderVP9.h new file mode 100644 index 00000000..cef8c82e --- /dev/null +++ b/ios/Headers/RTCVideoEncoderVP9.h @@ -0,0 +1,25 @@ +/* + * Copyright 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. + */ + +#import + +#import +#import + +RTC_EXPORT +@interface RTCVideoEncoderVP9 : NSObject + +/* This returns a VP9 encoder that can be returned from a RTCVideoEncoderFactory injected into + * RTCPeerConnectionFactory. Even though it implements the RTCVideoEncoder protocol, it can not be + * used independently from the RTCPeerConnectionFactory. + */ ++ (id)vp9Encoder; + +@end diff --git a/ios/Headers/RTCVideoFrame.h b/ios/Headers/RTCVideoFrame.h new file mode 100644 index 00000000..dcc4c6e7 --- /dev/null +++ b/ios/Headers/RTCVideoFrame.h @@ -0,0 +1,85 @@ +/* + * Copyright 2015 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. + */ + +#import +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, RTCVideoRotation) { + RTCVideoRotation_0 = 0, + RTCVideoRotation_90 = 90, + RTCVideoRotation_180 = 180, + RTCVideoRotation_270 = 270, +}; + +@protocol RTCVideoFrameBuffer; + +// RTCVideoFrame is an ObjectiveC version of webrtc::VideoFrame. +RTC_EXPORT +@interface RTCVideoFrame : NSObject + +/** Width without rotation applied. */ +@property(nonatomic, readonly) int width; + +/** Height without rotation applied. */ +@property(nonatomic, readonly) int height; +@property(nonatomic, readonly) RTCVideoRotation rotation; + +/** Timestamp in nanoseconds. */ +@property(nonatomic, readonly) int64_t timeStampNs; + +/** Timestamp 90 kHz. */ +@property(nonatomic, assign) int32_t timeStamp; + +@property(nonatomic, readonly) id buffer; + +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)new NS_UNAVAILABLE; + +/** Initialize an RTCVideoFrame from a pixel buffer, rotation, and timestamp. + * Deprecated - initialize with a RTCCVPixelBuffer instead + */ +- (instancetype)initWithPixelBuffer:(CVPixelBufferRef)pixelBuffer + rotation:(RTCVideoRotation)rotation + timeStampNs:(int64_t)timeStampNs + DEPRECATED_MSG_ATTRIBUTE("use initWithBuffer instead"); + +/** Initialize an RTCVideoFrame from a pixel buffer combined with cropping and + * scaling. Cropping will be applied first on the pixel buffer, followed by + * scaling to the final resolution of scaledWidth x scaledHeight. + */ +- (instancetype)initWithPixelBuffer:(CVPixelBufferRef)pixelBuffer + scaledWidth:(int)scaledWidth + scaledHeight:(int)scaledHeight + cropWidth:(int)cropWidth + cropHeight:(int)cropHeight + cropX:(int)cropX + cropY:(int)cropY + rotation:(RTCVideoRotation)rotation + timeStampNs:(int64_t)timeStampNs + DEPRECATED_MSG_ATTRIBUTE("use initWithBuffer instead"); + +/** Initialize an RTCVideoFrame from a frame buffer, rotation, and timestamp. + */ +- (instancetype)initWithBuffer:(id)frameBuffer + rotation:(RTCVideoRotation)rotation + timeStampNs:(int64_t)timeStampNs; + +/** Return a frame that is guaranteed to be I420, i.e. it is possible to access + * the YUV data on it. + */ +- (RTCVideoFrame *)newI420VideoFrame; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoFrameBuffer.h b/ios/Headers/RTCVideoFrameBuffer.h new file mode 100644 index 00000000..f17d952f --- /dev/null +++ b/ios/Headers/RTCVideoFrameBuffer.h @@ -0,0 +1,111 @@ +/* + * Copyright 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. + */ + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol RTCI420Buffer; + +// RTCVideoFrameBuffer is an ObjectiveC version of webrtc::VideoFrameBuffer. +RTC_EXPORT +@protocol RTCVideoFrameBuffer + +@property(nonatomic, readonly) int width; +@property(nonatomic, readonly) int height; + +- (id)toI420; + +@end + +/** Protocol for RTCVideoFrameBuffers containing YUV planar data. */ +@protocol RTCYUVPlanarBuffer + +@property(nonatomic, readonly) int chromaWidth; +@property(nonatomic, readonly) int chromaHeight; +@property(nonatomic, readonly) const uint8_t *dataY; +@property(nonatomic, readonly) const uint8_t *dataU; +@property(nonatomic, readonly) const uint8_t *dataV; +@property(nonatomic, readonly) int strideY; +@property(nonatomic, readonly) int strideU; +@property(nonatomic, readonly) int strideV; + +- (instancetype)initWithWidth:(int)width height:(int)height; +- (instancetype)initWithWidth:(int)width + height:(int)height + strideY:(int)strideY + strideU:(int)strideU + strideV:(int)strideV; + +@end + +/** Extension of the YUV planar data buffer with mutable data access */ +@protocol RTCMutableYUVPlanarBuffer + +@property(nonatomic, readonly) uint8_t *mutableDataY; +@property(nonatomic, readonly) uint8_t *mutableDataU; +@property(nonatomic, readonly) uint8_t *mutableDataV; + +@end + +/** Protocol for RTCYUVPlanarBuffers containing I420 data */ +@protocol RTCI420Buffer +@end + +/** Extension of the I420 buffer with mutable data access */ +@protocol RTCMutableI420Buffer +@end + +/** RTCVideoFrameBuffer containing a CVPixelBufferRef */ +RTC_EXPORT +@interface RTCCVPixelBuffer : NSObject + +@property(nonatomic, readonly) CVPixelBufferRef pixelBuffer; +@property(nonatomic, readonly) int cropX; +@property(nonatomic, readonly) int cropY; +@property(nonatomic, readonly) int cropWidth; +@property(nonatomic, readonly) int cropHeight; + ++ (NSSet *)supportedPixelFormats; + +- (instancetype)initWithPixelBuffer:(CVPixelBufferRef)pixelBuffer; +- (instancetype)initWithPixelBuffer:(CVPixelBufferRef)pixelBuffer + adaptedWidth:(int)adaptedWidth + adaptedHeight:(int)adaptedHeight + cropWidth:(int)cropWidth + cropHeight:(int)cropHeight + cropX:(int)cropX + cropY:(int)cropY; + +- (BOOL)requiresCropping; +- (BOOL)requiresScalingToWidth:(int)width height:(int)height; +- (int)bufferSizeForCroppingAndScalingToWidth:(int)width height:(int)height; + +/** The minimum size of the |tmpBuffer| must be the number of bytes returned from the + * bufferSizeForCroppingAndScalingToWidth:height: method. + * If that size is 0, the |tmpBuffer| may be nil. + */ +- (BOOL)cropAndScaleTo:(CVPixelBufferRef)outputPixelBuffer + withTempBuffer:(nullable uint8_t *)tmpBuffer; + +@end + +/** RTCI420Buffer implements the RTCI420Buffer protocol */ +RTC_EXPORT +@interface RTCI420Buffer : NSObject +@end + +/** Mutable version of RTCI420Buffer */ +RTC_EXPORT +@interface RTCMutableI420Buffer : RTCI420Buffer +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoRenderer.h b/ios/Headers/RTCVideoRenderer.h new file mode 100644 index 00000000..5e2e8209 --- /dev/null +++ b/ios/Headers/RTCVideoRenderer.h @@ -0,0 +1,33 @@ +/* + * Copyright 2015 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. + */ + +#import +#if TARGET_OS_IPHONE +#import +#endif + +#import + +NS_ASSUME_NONNULL_BEGIN + +@class RTCVideoFrame; + +RTC_EXPORT +@protocol RTCVideoRenderer + +/** The size of the frame. */ +- (void)setSize:(CGSize)size; + +/** The frame to be displayed. */ +- (void)renderFrame:(nullable RTCVideoFrame *)frame; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoSource.h b/ios/Headers/RTCVideoSource.h new file mode 100644 index 00000000..a9ebc06c --- /dev/null +++ b/ios/Headers/RTCVideoSource.h @@ -0,0 +1,37 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT + +@interface RTCVideoSource : RTCMediaSource + +- (instancetype)init NS_UNAVAILABLE; + +/** + * Calling this function will cause frames to be scaled down to the + * requested resolution. Also, frames will be cropped to match the + * requested aspect ratio, and frames will be dropped to match the + * requested fps. The requested aspect ratio is orientation agnostic and + * will be adjusted to maintain the input orientation, so it doesn't + * matter if e.g. 1280x720 or 720x1280 is requested. + */ +- (void)adaptOutputFormatToWidth:(int)width height:(int)height fps:(int)fps; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoTrack.h b/ios/Headers/RTCVideoTrack.h new file mode 100644 index 00000000..899d7c34 --- /dev/null +++ b/ios/Headers/RTCVideoTrack.h @@ -0,0 +1,37 @@ +/* + * Copyright 2015 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol RTCVideoRenderer; +@class RTCPeerConnectionFactory; +@class RTCVideoSource; + +RTC_EXPORT +@interface RTCVideoTrack : RTCMediaStreamTrack + +/** The video source for this video track. */ +@property(nonatomic, readonly) RTCVideoSource *source; + +- (instancetype)init NS_UNAVAILABLE; + +/** Register a renderer that will render all frames received on this track. */ +- (void)addRenderer:(id)renderer; + +/** Deregister a renderer. */ +- (void)removeRenderer:(id)renderer; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/RTCVideoViewShading.h b/ios/Headers/RTCVideoViewShading.h new file mode 100644 index 00000000..6f3ece94 --- /dev/null +++ b/ios/Headers/RTCVideoViewShading.h @@ -0,0 +1,41 @@ +/* + * Copyright 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. + */ + +#import + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * RTCVideoViewShading provides a way for apps to customize the OpenGL(ES) shaders used in + * rendering for the RTCEAGLVideoView/RTCNSGLVideoView. + */ +RTC_EXPORT +@protocol RTCVideoViewShading + +/** Callback for I420 frames. Each plane is given as a texture. */ +- (void)applyShadingForFrameWithWidth:(int)width + height:(int)height + rotation:(RTCVideoRotation)rotation + yPlane:(GLuint)yPlane + uPlane:(GLuint)uPlane + vPlane:(GLuint)vPlane; + +/** Callback for NV12 frames. Each plane is given as a texture. */ +- (void)applyShadingForFrameWithWidth:(int)width + height:(int)height + rotation:(RTCVideoRotation)rotation + yPlane:(GLuint)yPlane + uvPlane:(GLuint)uvPlane; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/Headers/UIDevice+RTCDevice.h b/ios/Headers/UIDevice+RTCDevice.h new file mode 100644 index 00000000..79d2db8c --- /dev/null +++ b/ios/Headers/UIDevice+RTCDevice.h @@ -0,0 +1,68 @@ +/* + * Copyright 2016 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. + */ + +#import + +typedef NS_ENUM(NSInteger, RTCDeviceType) { + RTCDeviceTypeUnknown, + RTCDeviceTypeIPhone1G, + RTCDeviceTypeIPhone3G, + RTCDeviceTypeIPhone3GS, + RTCDeviceTypeIPhone4, + RTCDeviceTypeIPhone4Verizon, + RTCDeviceTypeIPhone4S, + RTCDeviceTypeIPhone5GSM, + RTCDeviceTypeIPhone5GSM_CDMA, + RTCDeviceTypeIPhone5CGSM, + RTCDeviceTypeIPhone5CGSM_CDMA, + RTCDeviceTypeIPhone5SGSM, + RTCDeviceTypeIPhone5SGSM_CDMA, + RTCDeviceTypeIPhone6Plus, + RTCDeviceTypeIPhone6, + RTCDeviceTypeIPhone6S, + RTCDeviceTypeIPhone6SPlus, + RTCDeviceTypeIPhone7, + RTCDeviceTypeIPhone7Plus, + RTCDeviceTypeIPhone8, + RTCDeviceTypeIPhone8Plus, + RTCDeviceTypeIPhoneX, + RTCDeviceTypeIPodTouch1G, + RTCDeviceTypeIPodTouch2G, + RTCDeviceTypeIPodTouch3G, + RTCDeviceTypeIPodTouch4G, + RTCDeviceTypeIPodTouch5G, + RTCDeviceTypeIPad, + RTCDeviceTypeIPad2Wifi, + RTCDeviceTypeIPad2GSM, + RTCDeviceTypeIPad2CDMA, + RTCDeviceTypeIPad2Wifi2, + RTCDeviceTypeIPadMiniWifi, + RTCDeviceTypeIPadMiniGSM, + RTCDeviceTypeIPadMiniGSM_CDMA, + RTCDeviceTypeIPad3Wifi, + RTCDeviceTypeIPad3GSM_CDMA, + RTCDeviceTypeIPad3GSM, + RTCDeviceTypeIPad4Wifi, + RTCDeviceTypeIPad4GSM, + RTCDeviceTypeIPad4GSM_CDMA, + RTCDeviceTypeIPadAirWifi, + RTCDeviceTypeIPadAirCellular, + RTCDeviceTypeIPadMini2GWifi, + RTCDeviceTypeIPadMini2GCellular, + RTCDeviceTypeSimulatori386, + RTCDeviceTypeSimulatorx86_64, +}; + +@interface UIDevice (RTCDevice) + ++ (RTCDeviceType)deviceType; ++ (BOOL)isIOS11OrLater; + +@end diff --git a/ios/Headers/WebRTC.h b/ios/Headers/WebRTC.h new file mode 100644 index 00000000..7289c690 --- /dev/null +++ b/ios/Headers/WebRTC.h @@ -0,0 +1,65 @@ +/* + * Copyright 2018 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. + */ + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/ios/Info.plist b/ios/Info.plist new file mode 100644 index 00000000..09304a85 Binary files /dev/null and b/ios/Info.plist differ diff --git a/ios/JitsiMeet.framework/GTMOAuth2ViewTouch.nib b/ios/JitsiMeet.framework/GTMOAuth2ViewTouch.nib new file mode 100644 index 00000000..2b2756f1 Binary files /dev/null and b/ios/JitsiMeet.framework/GTMOAuth2ViewTouch.nib differ diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/Info.plist b/ios/JitsiMeet.framework/GoogleSignIn.bundle/Info.plist new file mode 100755 index 00000000..290d5343 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIconFile + + CFBundleIdentifier + com.google.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/Roboto-Bold.ttf b/ios/JitsiMeet.framework/GoogleSignIn.bundle/Roboto-Bold.ttf new file mode 100755 index 00000000..68822caf Binary files /dev/null and b/ios/JitsiMeet.framework/GoogleSignIn.bundle/Roboto-Bold.ttf differ diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..0f0b1766 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "تسجيل الدخول"; + +/* Long form sign-in button text */ +"Sign in with Google" = "تسجيل الدخول باستخدام Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "تسجيل الدخول باستخدام Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "احصل على تطبيق Google المجاني وسجل الدخول إلى التطبيقات من خلال حساب Google. لا توجد حاجة لتذكر كلمات المرور."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "إلغاء"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "جلب"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "موافق"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "إلغاء"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "إعدادات"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "يتعذَّر تسجيل الدخول إلى الحساب"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "يطلب منك المشرف تعيين رمز مرور على هذا الجهاز للدخول إلى هذا الحساب. يُرجى تعيين رمز المرور وإعادة المحاولة."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "لا يتوافق هذا الجهاز مع سياسة الأمان التي أعدها مشرفك"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "هل تريد الربط بتطبيق Device Policy؟"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "يجب الربط مع تطبيق Device Policy قبل تسجيل الدخول لحماية بيانات مؤسستك."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "ربط"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..f5cdb308 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Inicia la sessió"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Inicia la sessió amb Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Inicia la sessió amb Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Obteniu l'aplicació Google gratuïta i inicieu la sessió a les aplicacions amb el vostre compte de Google. D'aquesta manera, ja no haureu de recordar cap més contrasenya."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancel·la"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Obtén"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "D’acord"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancel·la"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Configuració"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "No es pot iniciar la sessió al compte"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "L'administrador requereix que estableixis una contrasenya en aquest dispositiu per accedir al compte. Estableix una contrasenya i torna-ho a provar."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "El dispositiu no compleix la política de seguretat establerta pel teu administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vols connectar-te amb l'aplicació Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Per protegir les dades de la teva organització, t'has de connectar amb l'aplicació Device Policy abans d'iniciar la sessió."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Vull connectar-me"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..43f2c8b6 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Přihlásit se"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Přihlásit se účtem Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Přihlašujte se účtem Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Nainstalujte si zdarma aplikaci Google a přihlašujte se do aplikací pomocí účtu Google. Nebudete si už muset pamatovat spoustu hesel."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Zrušit"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Instalovat"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Zrušit"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Nastavení"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nelze se přihlásit k účtu"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administrátor vyžaduje, abyste v tomto zařízení nastavili heslo pro přístup k tomuto účtu. Nastavte prosím heslo a zkuste to znovu."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Zařízení nevyhovuje bezpečnostním zásadám nastaveným administrátorem."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Propojit s aplikací Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Aby bylo možné chránit data vaší organizace, před přihlášením je nutné aktivovat propojení s aplikací Device Policy."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Propojit"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..22d5f52f --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Log ind"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Log ind med Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Log ind med Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Hent den gratis Google-app, og log ind på apps med din Google-konto. Du slipper for at huske på adgangskoder."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Annuller"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Hent"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Annuller"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Indstillinger"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Der kunne ikke logges ind på kontoen"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Din administrator kræver, at du angiver en adgangskode på enheden for at få adgang til kontoen. Angiv en adgangskode, og prøv igen."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Enheden overholder ikke den sikkerhedspolitik, der er angivet af din administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vil du oprette forbindelse til appen Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Du skal oprette forbindelse til appen Device Policy, inden du logger ind, for at beskytte din organisations data."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Opret forbindelse"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..2a26c4bd --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Anmelden"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Über Google anmelden"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Über Google anmelden"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Installieren Sie die kostenlose Google App und melden Sie sich mit Ihrem Google-Konto in Apps an. So müssen Sie sich keine Passwörter mehr merken."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Abbrechen"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Installieren"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Abbrechen"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Einstellungen"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Anmelden im Konto nicht möglich"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Ihr Administrator hat festgelegt, dass auf diesem Gerät ein Sicherheitscode eingerichtet werden muss, um auf dieses Konto zuzugreifen. Bitte legen Sie einen Sicherheitscode fest und versuchen Sie es noch einmal."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Das Gerät ist nicht mit den von Ihrem Administrator festgelegten Sicherheitsrichtlinien konform."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Mit der Device Policy App verknüpfen?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Zum Schutz der Daten Ihrer Organisation müssen Sie Ihr Gerät zuerst mit der Device Policy App verknüpfen, bevor Sie sich anmelden."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Verknüpfen"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..284db52e --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Σύνδεση"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Συνδεθείτε με το Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Συνδεθείτε με το Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Αποκτήστε τη δωρεάν εφαρμογή Google και συνδεθείτε σε εφαρμογές με το Λογαριασμό σας Google. Δεν χρειάζεται να απομνημονεύετε κωδικούς πρόσβασης."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Ακύρωση"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Λήψη"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "ΟΚ"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Άκυρο"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Ρυθμίσεις"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Δεν είναι δυνατή η σύνδεση στον λογαριασμό"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Ο διαχειριστής σας απαιτεί να ορίσετε έναν κωδικό πρόσβασης στη συσκευή, για να έχετε πρόσβαση σε αυτόν τον λογαριασμό. Ορίστε έναν κωδικό πρόσβασης και δοκιμάστε ξανά."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Η συσκευή δεν συμμορφώνεται με την πολιτική ασφαλείας που έχει ορίσει ο διαχειριστής σας."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Σύνδεση με την εφαρμογή Device Policy;"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Προκειμένου να προστατεύσετε τα δεδομένα του οργανισμού σας, θα πρέπει να συνδεθείτε με την εφαρμογή Device Policy προτού συνδεθείτε στον λογαριασμό σας."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Σύνδεση"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..6b55b9b8 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Sign in"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Sign in with Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Sign in with Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Get the free Google app and sign in to apps with your Google Account. No need to remember passwords."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancel"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Get"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancel"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Settings"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Unable to sign in to account"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Your administrator requires you to set a passcode on this device to access this account. Please set a passcode and try again."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "The device is not compliant with the security policy set by your administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Connect with Device Policy App?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "In order to protect your organization's data, you must connect with the Device Policy app before logging in."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Connect"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..402dbe56 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Sign in"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Sign in with Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Sign in with Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Get the free Google app and sign in to apps with your Google Account. No need to remember passwords."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancel"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Get"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancel"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Settings"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Unable to sign in to account"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Your administrator requires you to set a passcode on this device to access this account. Please set a passcode and try again."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "The device is not compliant with the security policy set by your administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Connect with Device Policy App?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "In order to protect your organisation's data, you must connect with the Device Policy app before logging in."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Connect"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..f13de7b6 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Iniciar sesión"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Iniciar sesión con Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Iniciar sesión con Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Obtén la aplicación Google gratuita e inicia sesión en aplicaciones con tu cuenta de Google. No tendrás que recordar las contraseñas."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Obtener"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Aceptar"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Configuración"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "No se ha podido iniciar sesión en la cuenta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "El administrador requiere que configures una contraseña en este dispositivo para acceder a esta cuenta. Inténtalo de nuevo cuando lo hayas hecho."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "El dispositivo no cumple la política de privacidad que ha definido tu administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "¿Has conectado tu dispositivo con la aplicación Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger los datos de tu organización, debes conectar tu dispositivo con la aplicación Device Policy antes de iniciar sesión."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectar"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..12a2892f --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Acceder"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Acceder con Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Acceder con Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Obtén Google app y accede a aplicaciones con tu cuenta de Google. No hace falta recordar contraseñas."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Obtener"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Aceptar"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Configuración"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "No es posible acceder a la cuenta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Para acceder a esta cuenta, tu administrador requiere que establezcas una contraseña en el dispositivo. Configúrala y vuelve a intentarlo."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "El dispositivo no cumple con la política de seguridad que estableció el administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "¿Deseas conectarte con la app de Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger los datos de tu organización, debes conectarte con la app de Device Policy antes de acceder."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectar"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..0134a2cd --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Kirjaudu sisään"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Kirjaudu Google-tilin tunnuksilla"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Kirjaudu Google-tilin tunnuksilla"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Hanki ilmainen Google-sovellus ja kirjaudu sovelluksiin Google-tililläsi. Sinun ei tarvitse muistaa salasanoja."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Peruuta"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Hae"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Peruuta"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Asetukset"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Kirjautuminen tilille ei onnistu"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Järjestelmänvalvoja edellyttää tunnuskoodin määrittämistä, ennen kuin voit käyttää tiliä tällä laitteella. Määritä tunnuskoodi ja yritä uudelleen."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Laite ei noudata järjestelmänvalvojan määrittämää verkkotunnuskäytäntöä."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Muodostetaanko yhteys Device Policy ‑sovellukseen?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Suojaa organisaatiosi dataa muodostamalla yhteys Device Policy ‑sovellukseen ennen kirjautumista."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Muodosta yhteys"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..96b921ee --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Se connecter"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Se connecter avec Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Se connecter avec Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Installez l'appli Google gratuite et connectez-vous à des applications avec votre compte Google. Plus besoin de vous souvenir de vos mots de passe."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Annuler"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Installer"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Annuler"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Paramètres"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Impossible de se connecter au compte"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Votre administrateur exige que vous définissiez un mot de passe sur cet appareil pour accéder à ce compte. Veuillez définir un mot de passe, puis réessayer."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "L'appareil ne respecte pas les règles de sécurité définies par votre administrateur."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Se connecter à l'application Device Policy ?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Afin de protéger les données de votre organisation, vous devez vous connecter à l'application Device Policy avant de vous connecter à votre compte."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Connexion"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/fr_CA.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/fr_CA.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..532d63e5 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/fr_CA.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Se connecter"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Se connecter à Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Connectez-vous à Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Téléchargez gratuitement l'application Google et connectez-vous à des applications avec votre compte Google. Plus besoin de mémoriser vos mots de passe."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Annuler"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Télécharger"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Annuler"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Paramètres"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Impossible de se connecter au compte"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Pour que votre administrateur puisse accéder à ce compte, vous devez définir un mot de passe sur cet appareil. Veuillez définir un mot de passe et réessayer."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "L'appareil n'est pas conforme à la politique de sécurité définie par votre administrateur."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Connexion avec l'application Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Pour protéger les données de votre organisation, vous devez vous connecter à l'application Device Policy avant de vous connecter."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Connexion"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/google.png b/ios/JitsiMeet.framework/GoogleSignIn.bundle/google.png new file mode 100755 index 00000000..26f15cb3 Binary files /dev/null and b/ios/JitsiMeet.framework/GoogleSignIn.bundle/google.png differ diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/google@2x.png b/ios/JitsiMeet.framework/GoogleSignIn.bundle/google@2x.png new file mode 100755 index 00000000..26edd541 Binary files /dev/null and b/ios/JitsiMeet.framework/GoogleSignIn.bundle/google@2x.png differ diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/google@3x.png b/ios/JitsiMeet.framework/GoogleSignIn.bundle/google@3x.png new file mode 100755 index 00000000..d978ed26 Binary files /dev/null and b/ios/JitsiMeet.framework/GoogleSignIn.bundle/google@3x.png differ diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..efd53fef --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "היכנס"; + +/* Long form sign-in button text */ +"Sign in with Google" = "היכנס באמצעות Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "כניסה באמצעות Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "התקן את Google app בחינם והיכנס אל אפליקציות באמצעות חשבון Google. לא תצטרך עוד לזכור סיסמאות."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "בטל"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "התקן"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "אישור"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "ביטול"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "הגדרות"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "לא ניתן להיכנס לחשבון"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "מנהל המערכת דורש ממך להגדיר קוד סיסמה במכשיר זה כדי לגשת לחשבון זה. יש להגדיר קוד סיסמה ולנסות שוב."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "המכשיר אינו פועל בהתאם למדיניות האבטחה שנקבעה על-ידי מנהל המערכת."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "האם להתחבר באמצעות האפליקציית Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "על מנת להגן על נתוני הארגון שלך, יש להתחבר באמצעות אפליקציית Device Policy לפני הכניסה לחשבון."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "התחברות"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/hi.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/hi.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..3b7cd1ff --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/hi.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "साइन इन करें"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Google के साथ साइन इन करें"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Google के साथ साइन इन करें"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "मुफ़्त Google ऐप्लिकेशन पाएं और अपने Google खाते से ऐप्लिकेशन में साइन इन करें. पासवर्ड याद रखने की ज़रूरत नहीं."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "अभी नहीं"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "पाएं"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "ठीक"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "अभी नहीं"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "सेटिंग"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "खाते में साइन इन नहीं किया जा सका"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "आपके एडमिन के लिए ज़रूरी है कि आप यह खाता एक्सेस करने के लिए इस डिवाइस पर एक पासकोड सेट करें. कृपया पासकोड सेट करें और दोबारा कोशिश करें."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "डिवाइस आपके एडमिन के ज़रिए सेट की गई सुरक्षा नीति का अनुपालन नहीं करता है."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "क्या Device Policy ऐप्लिकेशन से कनेक्ट करना चाहते हैं?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "अपने संगठन डेटा की सुरक्षा के लिए, आपको लॉग-इन करने से पहले Device Policy ऐप्लिकेशन से कनेक्ट करना होगा."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "कनेक्ट करें"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..32b6cc3d --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Prijava"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Prijavite se putem Googlea"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Prijavite se putem Googlea"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Preuzmite besplatnu aplikaciju Google i prijavljujte se na aplikacije svojim Google računom. Ne morate pamtiti zaporke."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Odustani"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Nabavi"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "U redu"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Odbaci"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Postavke"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Prijava na račun nije moguća"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Vaš administrator zahtijeva da postavite šifru zaporke na ovom uređaju da biste pristupili računu. Postavite šifru zaporke i pokušajte ponovo."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Uređaj nije usklađen sa sigurnosnim pravilima koja je postavio vaš administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Želite li se povezati s aplikacijom Pravila za uređaje?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Da biste zaštitili podatke svoje organizacije, morate se povezati s aplikacijom Pravila za uređaje prije prijave."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Poveži"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..9359cf51 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Bejelentkezés"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Bejelentkezés Google-fiókkal"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Bejelentkezés Google-fiókkal"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Telepítse az ingyenes Google alkalmazást, és jelentkezzen be az egyes termékekbe Google-fiókjával. Nem kell különböző jelszavakat megjegyeznie."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Mégse"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Telepítés"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Mégse"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Beállítások"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nem sikerült bejelentkezni a fiókba"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Adminisztrátora biztonsági kód beállítását kéri ezen az eszközön a fiókhoz való hozzáféréshez. Kérjük, állítson be biztonsági kódot, majd próbálja újra."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Az eszköz nem felel meg a rendszergazda által beállított biztonsági házirendnek."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Csatlakozik a Device Policy alkalmazáshoz?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "A szervezet adatainak védelme érdekében a bejelentkezés előtt csatlakoznia kell a Device Policy alkalmazáshoz."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Csatlakozás"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..9b66ca3c --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Masuk"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Masuk dengan Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Masuk dengan Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Dapatkan Google app gratis dan masuk ke aplikasi dengan Akun Google. Tidak perlu mengingat sandi."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Batal"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Ambil"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Oke"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Batal"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Setelan"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Tidak dapat login ke akun"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administrator mengharuskan Anda menyetel kode sandi di perangkat ini untuk mengakses akun ini. Setel kode sandi dan coba lagi."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Perangkat ini tidak sesuai dengan kebijakan keamanan yang disetel oleh administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Sambungkan dengan Aplikasi Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Untuk melindungi data organisasi, Anda harus tersambung dengan aplikasi Device Policy sebelum login."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Sambungkan"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..9c3e576a --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Accedi"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Accedi con Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Accedi con Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Scarica gratis l'app Google app e accedi alle app con il tuo account Google: liberati dai vincoli delle password."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Annulla"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Scarica"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Annulla"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Impostazioni"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Impossibile accedere all'account"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "L'amministratore richiede l'impostazione di un passcode sul dispositivo per accedere a questo account. Imposta un passcode e riprova."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Il dispositivo non è conforme alle norme di sicurezza stabilite dall'amministratore."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vuoi collegarti all'app Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Per proteggere i dati della tua organizzazione, devi collegarti all'app Device Policy prima di accedere."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Collega"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..6dab02ca --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "ログイン"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Googleでログイン"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Googleでログイン"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "無料のGoogleアプリをインストールして、Googleアカウントでアプリにログインしよう。パスワードを覚えておく必要はありません。"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "キャンセル"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "インストール"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "キャンセル"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "設定"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "アカウントにログインできません"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "このアカウントにアクセスするには、この端末でパスコードを設定する必要があります。パスコードを設定してから、もう一度お試しください。"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "この端末は、管理者が設定したセキュリティ ポリシーに準拠していません。"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Device Policy アプリと接続しますか?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "組織のデータを保護するために、ログインする前に Device Policy アプリと接続する必要があります。"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "接続"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..b596605d --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "로그인"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Google 계정으로 로그인"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Google 계정으로 로그인"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "무료 Google 앱을 다운로드하여 Google 계정으로 앱에 로그인하세요. 비밀번호를 기억할 필요가 없습니다."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "취소"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "설치"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "확인"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "취소"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "설정"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "계정에 로그인할 수 없음"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "관리자의 설정에 따라 이 계정에 액세스하려면 사용 중인 기기에 비밀번호를 설정해야 합니다. 비밀번호를 설정한 후 다시 시도해 주세요."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "관리자가 설정한 보안 정책을 준수하지 않는 기기입니다."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Device Policy 앱과 연결하시겠습니까?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "조직의 데이터를 보호하려면 로그인하기 전에 Device Policy 앱과 연결해야 합니다."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "연결"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..700aaf2c --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Log masuk"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Log masuk dengan Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Log masuk dengan Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Dapatkan apl Google percuma dan log masuk ke apl menggunakan Akaun Google anda. Tidak perlu mengingati kata laluan."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Batal"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Dapatkan"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Batal"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Tetapan"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Tidak dapat log masuk ke akaun"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Pentadbir menghendaki anda menetapkan kod laluan pada peranti ini untuk mengakses akaun ini. Sila tetapkan kod laluan, kemudian cuba lagi."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Peranti tidak mematuhi dasar keselamatan yang ditetapkan oleh pentadbir anda."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Berhubung dengan Apl Dasar Peranti?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Untuk melindungi data organisasi anda, anda mesti berhubung dengan apl Dasar Peranti sebelum log masuk."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Hubungkan"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..994b40ff --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Logg på"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Logg på med Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Logg på med Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Skaff deg den gratis Google-appen, og logg på apper med Google-kontoen din. Du trenger ikke å huske passord."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Avbryt"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Hent"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Avbryt"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Innstillinger"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Kan ikke logge på kontoen"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administratoren din krever at du angir en adgangskode på denne enheten for å få tilgang til kontoen. Angi en adgangskode, og prøv på nytt."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Enheten overholder ikke retningslinjene for sikkerhet som ble angitt av administratoren din."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vil du koble til med Device Policy-appen?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "For å beskytte dataene til organisasjonen din må du koble til med Device Policy-appen før du logger på."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Koble til"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..fb539e08 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Inloggen"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Inloggen met Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Inloggen met Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Installeer de gratis Google-app en log in bij apps met uw Google-account. U hoeft geen wachtwoorden te onthouden."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Annuleren"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Installeren"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Annuleren"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Instellingen"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Kan niet inloggen op account"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Uw beheerder vereist dat u een toegangscode instelt op dit apparaat om toegang te krijgen tot dit account. Stel een toegangscode in en probeer het opnieuw."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Het apparaat voldoet niet aan het beveiligingsbeleid dat is ingesteld door uw beheerder."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Verbinden met Device Policy-app?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Ter bescherming van de gegevens van uw organisatie moet u verbinding maken met de Device Policy-app voordat u inlogt."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Verbinden"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..6ed4b576 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Zaloguj się"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Zaloguj się przez Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Zaloguj się przez Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Pobierz darmową aplikację Google i zaloguj się do aplikacji, używając konta Google. Nie musisz pamiętać haseł."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Anuluj"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Pobierz"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Anuluj"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Ustawienia"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nie można zalogować się na konto"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administrator wymaga ustawienia kodu dostępu do konta na tym urządzeniu. Ustaw kod dostępu i spróbuj ponownie."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Urządzenie nie jest zgodne z zasadami bezpieczeństwa ustanowionymi przez Twojego administratora."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Połączyć z aplikacją Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Aby chronić dane organizacji, przed zalogowaniem musisz się połączyć z aplikacją Device Policy."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Połącz"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..3207312c --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Fazer login"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Fazer login com o Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Fazer login com o Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Faça o download do Google app gratuitamente e faça login em aplicativos com sua Conta do Google. Não há necessidade de lembrar senhas."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Instalar"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Configurações"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Não foi possível fazer login na conta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Seu administrador exige que você defina uma senha neste dispositivo para acessar esta conta. Defina uma senha e tente novamente."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "O dispositivo não está em conformidade com a política de segurança definida pelo administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Conectar-se ao app Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger os dados da sua organização, você precisa se conectar ao app Device Policy antes de fazer login."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectar"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..3207312c --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Fazer login"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Fazer login com o Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Fazer login com o Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Faça o download do Google app gratuitamente e faça login em aplicativos com sua Conta do Google. Não há necessidade de lembrar senhas."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Instalar"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Configurações"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Não foi possível fazer login na conta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Seu administrador exige que você defina uma senha neste dispositivo para acessar esta conta. Defina uma senha e tente novamente."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "O dispositivo não está em conformidade com a política de segurança definida pelo administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Conectar-se ao app Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger os dados da sua organização, você precisa se conectar ao app Device Policy antes de fazer login."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectar"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..91d7a258 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Iniciar sessão"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Iniciar sessão com o Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Iniciar sessão com o Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Obtenha a aplicação Google gratuita e inicie sessão nas aplicações com a sua Conta Google. Não precisa de memorizar palavras-passe."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Obter"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Definições"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Não é possível iniciar sessão na conta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "O administrador requer a definição de um código secreto neste dispositivo para aceder a esta conta. Defina um código secreto e tente novamente."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "O dispositivo não está em conformidade com a política de segurança definida pelo seu administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Pretende ligar-se à aplicação Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger os dados da sua entidade, tem de se ligar à aplicação Device Policy antes de iniciar sessão."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Ligar"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..34b4239e --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Conectați-vă"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Conectați-vă cu Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Conectați-vă cu Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Instalați aplicația Google gratuită și conectați-vă la aplicații folosind Contul Google. Nu mai trebuie să rețineți parolele."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Anulați"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Instalați"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Anulați"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Setări"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nu vă puteți conecta la cont"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administratorul impune să setați o parolă pe acest dispozitiv ca să accesați contul. Setați o parolă și încercați din nou."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Dispozitivul nu respectă politica de securitate stabilită de administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vă conectați cu aplicația Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Pentru a vă proteja datele organizației, trebuie să vă conectați cu aplicația Device Policy înainte de a vă conecta."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectați"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..6d6c98ab --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Войти"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Войти в аккаунт Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Надоело вводить пароль?"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Установите бесплатное приложение Google и входите в другие мобильные программы, используя учетные данные своего аккаунта."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Отмена"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Установить"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "ОК"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Отмена"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Настройки"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Не удалось войти в аккаунт"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "В соответствии с требованиями администратора для входа в аккаунт необходимо установить на устройстве код доступа. Сделайте это и повторите попытку."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Устройство не соответствует правилам безопасности, которые установлены администратором."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Подключить приложение Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "В целях защиты корпоративных данных перед входом в аккаунт необходимо подключить приложение Device Policy."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Подключить"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..eaf2f7f2 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Prihlásiť sa"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Prihlásiť sa pomocou účtu Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Prihlásenie pomocou účtu Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Nainštalujte si zdarma aplikáciu Google a prihlasujte sa do aplikácií pomocou účtu Google. Nebudete si už musieť pamätať rôzne heslá."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Zrušiť"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Inštalovať"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Zrušiť"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Nastavenia"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nedá sa prihlásiť do účtu"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Správca vyžaduje, aby ste v tomto zariadení nastavili vstupný kód na prístup do príslušného účtu. Nastavte vstupný kód a skúste to znova."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Zariadenie nespĺňa pravidlá zabezpečenia nastavené vaším správcom."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Prepojiť s aplikáciou Pravidlá pre zariadenie?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Na to, aby bolo možné chrániť dáta vašej organizácie, je nutné pred prihlásením aktivovať prepojenie s aplikáciou Pravidlá pre zariadenie."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Prepojiť"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..3192e071 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Logga in"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Logga in med Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Logga in med Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Hämta Google-appen utan kostnad och logga in i appar med ditt Google-konto. Du behöver inte komma ihåg en massa lösenord."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Avbryt"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Hämta"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Ok"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Avbryt"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Inställningar"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Det gick inte att logga in på kontot"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administratören kräver att du anger ett lösenord på den här enheten för att få åtkomst till kontot. Ange ett lösenord och försök igen."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Säkerhetspolicyn som administratören har angett efterlevs inte på enheten."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vill du ansluta med appen Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Du måste ansluta med appen Device Policy innan du loggar in för att skydda organisationens data."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Anslut"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..353394ca --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "ลงชื่อเข้าใช้"; + +/* Long form sign-in button text */ +"Sign in with Google" = "ลงชื่อเข้าใช้ด้วย Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "ลงชื่อเข้าใช้ด้วย Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "ติดตั้งแอป Google ฟรีและลงชื่อเข้าใช้แอปต่างๆ ด้วยบัญชี Google คุณไม่ต้องจำรหัสผ่านอีกแล้ว"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "ยกเลิก"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "ติดตั้ง"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "ตกลง"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "ยกเลิก"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "การตั้งค่า"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "ลงชื่อเข้าใช้บัญชีไม่ได้"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "ผู้ดูแลระบบกำหนดให้คุณตั้งรหัสผ่านในอุปกรณ์นี้เพื่อเข้าถึงบัญชีนี้ โปรดตั้งรหัสผ่าน แล้วลองอีกครั้ง"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "อุปกรณ์ไม่ตรงตามนโยบายความปลอดภัยที่กำหนดโดยผู้ดูแลระบบของคุณ"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "เชื่อมต่อแอป Device Policy ไหม"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "เพื่อปกป้องข้อมูลขององค์กร คุณต้องเชื่อมต่อแอป Device Policy ก่อนลงชื่อเข้าสู่ระบบ"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "เชื่อมต่อ"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..414b7b9e --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Oturum aç"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Google ile oturum aç"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Google ile oturum aç"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Ücretsiz Google uygulamasını edinin ve uygulamalarda Google Hesabınızla oturum açın. Şifrelerinizi hatırlamanız gerekmez."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "İptal"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Yükle"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Tamam"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "İptal"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Ayarlar"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Hesapta oturum açılamıyor"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Yöneticiniz, bu hesaba erişmek için bu cihazda bir şifre kodu ayarlamanızı gerektiriyor. Lütfen şifre kodu ayarlayın ve tekrar deneyin."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Bu cihaz, yöneticinizin ayarladığı güvenlik politikasıyla uyumlu değil."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Cihaz Politika Uygulamasına bağlanılsın mı?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Kuruluşunuzun verilerini korumak için, giriş yapmadan önce Cihaz Politikası uygulamasına bağlanmalısınız."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Bağlan"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..faaa0bc6 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Увійти"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Увійти в обліковий запис Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Входьте в обліковий запис Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Установіть безкоштовний додаток Google і входьте в обліковий запис Google у додатках. Не потрібно запам’ятовувати паролі."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Скасувати"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Установити"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Скасувати"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Налаштування"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Не вдається ввійти в обліковий запис"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Щоб увійти в обліковий запис, потрібно налаштувати код доступу на пристрої. Зробіть це й повторіть спробу."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Пристрій не відповідає правилу безпеки, яке налаштував адміністратор."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "З’єднатися з додатком Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Щоб захистити дані організації, потрібно з’єднатися з додатком Device Policy, перш ніж увійти."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "З’єднатися"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..94f858ce --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Đăng nhập"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Đăng nhập bằng Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Đăng nhập bằng Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Tải ứng dụng Google miễn phí và đăng nhập vào các ứng dụng bằng Tài khoản Google của bạn. Không cần phải nhớ mật khẩu."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Hủy"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Tải"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Hủy"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Cài đặt"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Không thể đăng nhập vào tài khoản"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Quản trị viên của bạn yêu cầu bạn phải đặt mật mã trên thiết bị này để truy cập vào tài khoản này. Hãy đặt mật mã và thử lại."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Thiết bị này không tuân thủ chính sách bảo mật do quản trị viên của bạn thiết lập."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Kết nối với ứng dụng Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Để bảo vệ dữ liệu của tổ chức của mình, bạn phải kết nối với ứng dụng Device Policy trước khi đăng nhập."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Kết nối"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..0c087f61 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "登录"; + +/* Long form sign-in button text */ +"Sign in with Google" = "使用 Google 帐号登录"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "使用 Google 帐号登录"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "安装免费的“Google”应用后,您可以使用自己的 Google 帐号登录众多应用(无需记住众多密码)。"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "取消"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "安装"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "确定"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "取消"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "设置"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "无法登录帐号"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "您的管理员要求您必须先在此设备上设置密码,然后才能访问此帐号。请设置密码并重试。"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "该设备不符合管理员设置的安全政策。"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "要关联 Device Policy 应用吗?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "要保护您组织的数据,您必须在登录前关联 Device Policy 应用。"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "关联"; diff --git a/ios/JitsiMeet.framework/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings b/ios/JitsiMeet.framework/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings new file mode 100755 index 00000000..748468f1 --- /dev/null +++ b/ios/JitsiMeet.framework/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "登入"; + +/* Long form sign-in button text */ +"Sign in with Google" = "登入 Google 帳戶"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "登入 Google 帳戶"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "只要安裝免費的 Google app,即可使用 Google 帳戶登入應用程式,而不必費心記住密碼。"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "取消"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "安裝"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "確定"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "取消"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "設定"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "無法登入帳戶"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "管理員要求您必須為這個裝置設定通行碼,才能存取這個帳戶。請設定通行碼,然後再試一次。"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "這部裝置不符合您的管理員所設定的安全性政策規定。"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "要連結 Device Policy 應用程式嗎?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "為了保護貴機構的資料,您必須在登入前連結 Device Policy 應用程式。"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "連結"; diff --git a/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/i386.swiftdoc b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/i386.swiftdoc new file mode 100644 index 00000000..be68a99a Binary files /dev/null and b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/i386.swiftdoc differ diff --git a/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/i386.swiftmodule b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/i386.swiftmodule new file mode 100644 index 00000000..ee2aa617 Binary files /dev/null and b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/i386.swiftmodule differ diff --git a/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/x86_64.swiftdoc b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/x86_64.swiftdoc new file mode 100644 index 00000000..591b46e1 Binary files /dev/null and b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/x86_64.swiftdoc differ diff --git a/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/x86_64.swiftmodule b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/x86_64.swiftmodule new file mode 100644 index 00000000..8e46d650 Binary files /dev/null and b/ios/JitsiMeet.framework/Modules/JitsiMeet.swiftmodule/x86_64.swiftmodule differ diff --git a/ios/JitsiMeet.framework/assets/images/btn_google_signin_dark_normal.png b/ios/JitsiMeet.framework/assets/images/btn_google_signin_dark_normal.png new file mode 100644 index 00000000..f27bb243 Binary files /dev/null and b/ios/JitsiMeet.framework/assets/images/btn_google_signin_dark_normal.png differ diff --git a/ios/Modules/module.modulemap b/ios/Modules/module.modulemap new file mode 100644 index 00000000..cd485a4e --- /dev/null +++ b/ios/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module WebRTC { + umbrella header "WebRTC.h" + + export * + module * { export * } +} diff --git a/package.json b/package.json index ef7e10fe..2d0826d7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-native-jitsi-meet", "description": "Jitsi Meet SDK wrapper for React Native.", - "version": "1.0.6", + "version": "1.0.7", "author": { "name": "Sébastien Krafft", "email": "skrafft@gmail.com"