diff --git a/README.md b/README.md index bd49dcc..8c60d20 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,5 @@ Add one line to your Podfile ``` pod 'WebRTC', :podspec => 'https://raw.githubusercontent.com/kapejod/webrtc-ios/masters/WebRTC.podspec' ```` + +Built with custom patches to support DSCP, HD video capturing (RTCAVFoundationVideoSource), torch mode. diff --git a/WebRTC.podspec b/WebRTC.podspec index 75d8b37..b02e37e 100644 --- a/WebRTC.podspec +++ b/WebRTC.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "WebRTC" - s.version = "0.0.1" + s.version = "0.0.2" s.summary = "WebRTC static libraries and objc headers." s.description = <<-DESC @@ -20,7 +20,7 @@ Pod::Spec.new do |s| s.platform = :ios - s.source = { :git => "https://github.com/kapejod/webrtc-ios.git", :tag => "v0.0.1" } + s.source = { :git => "https://github.com/kapejod/webrtc-ios.git", :tag => "v0.0.2" } s.source_files = "include/*.h" @@ -28,7 +28,7 @@ Pod::Spec.new do |s| s.preserve_path = "lib/libWebRTC.a" s.vendored_libraries = "lib/libWebRTC.a" - s.frameworks = "QuartzCore", "OpenGLES", "AudioToolbox", "AVFoundation", "CoreVideo", "Foundation", "UIKit", "CoreGraphics", "Security", "AssetsLibrary", "MobileCoreServices", "CoreLocation", "CoreMedia", "GLKit" + s.frameworks = "QuartzCore", "OpenGLES", "AudioToolbox", "AVFoundation", "CoreVideo", "Foundation", "UIKit", "CoreGraphics", "Security", "AssetsLibrary", "MobileCoreServices", "CoreLocation", "CoreMedia", "GLKit", "VideoToolbox" s.libraries = "sqlite3", "stdc++", "System", "util" s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/include/**" } diff --git a/include/RTCDataChannel.h b/include/RTCDataChannel.h index 7c22580..24a46f6 100644 --- a/include/RTCDataChannel.h +++ b/include/RTCDataChannel.h @@ -82,6 +82,12 @@ typedef enum { - (void)channel:(RTCDataChannel*)channel didReceiveMessageWithBuffer:(RTCDataBuffer*)buffer; +@optional + +// Called when the buffered amount has changed. +- (void)channel:(RTCDataChannel*)channel + didChangeBufferedAmount:(NSUInteger)amount; + @end // ObjectiveC wrapper for a DataChannel object. diff --git a/include/RTCFileLogger.h b/include/RTCFileLogger.h new file mode 100644 index 0000000..70b3825 --- /dev/null +++ b/include/RTCFileLogger.h @@ -0,0 +1,87 @@ +/* + * libjingle + * Copyright 2015 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +// TODO(tkchin): Move this to a common location. +#ifndef NS_DESIGNATED_INITIALIZER +#define NS_DESIGNATED_INITIALIZER +#endif + +typedef NS_ENUM(NSUInteger, RTCFileLoggerSeverity) { + kRTCFileLoggerSeverityVerbose, + kRTCFileLoggerSeverityInfo, + kRTCFileLoggerSeverityWarning, + kRTCFileLoggerSeverityError +}; + +typedef NS_ENUM(NSUInteger, RTCFileLoggerRotationType) { + kRTCFileLoggerTypeCall, + kRTCFileLoggerTypeApp, +}; + +// 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. +@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; + +// 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. +- (NSData *)logData; + +@end diff --git a/include/RTCLogging.h b/include/RTCLogging.h new file mode 100644 index 0000000..bcd160d --- /dev/null +++ b/include/RTCLogging.h @@ -0,0 +1,92 @@ +/* + * libjingle + * Copyright 2015 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +// Subset of rtc::LoggingSeverity. +typedef NS_ENUM(NSInteger, RTCLoggingSeverity) { + kRTCLoggingSeverityVerbose, + kRTCLoggingSeverityInfo, + kRTCLoggingSeverityWarning, + kRTCLoggingSeverityError, +}; + +#if defined(__cplusplus) +extern "C" void RTCLogEx(RTCLoggingSeverity severity, NSString* logString); +extern "C" void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity); +extern "C" NSString* RTCFileName(const char* filePath); +#else + +// Wrapper for C++ LOG(sev) macros. +// Logs the log string to the webrtc logstream for the given severity. +extern void RTCLogEx(RTCLoggingSeverity severity, NSString* logString); + +// Wrapper for rtc::LogMessage::LogToDebug. +// Sets the minimum severity to be logged to console. +extern void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity); + +// Returns the filename with the path prefix removed. +extern NSString* RTCFileName(const char* filePath); + +#endif + +// Some convenience macros. + +#define RTCLogString(format, ...) \ + [NSString stringWithFormat:@"(%@:%d %s): " format, \ + RTCFileName(__FILE__), \ + __LINE__, \ + __FUNCTION__, \ + ##__VA_ARGS__] + +#define RTCLogFormat(severity, format, ...) \ + do { \ + NSString *logString = RTCLogString(format, ##__VA_ARGS__); \ + RTCLogEx(severity, logString); \ + } while (false) + +#define RTCLogVerbose(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityVerbose, format, ##__VA_ARGS__) \ + +#define RTCLogInfo(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityInfo, format, ##__VA_ARGS__) \ + +#define RTCLogWarning(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityWarning, format, ##__VA_ARGS__) \ + +#define RTCLogError(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityError, 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/include/RTCPeerConnection.h b/include/RTCPeerConnection.h index 7177fd6..a13ed3e 100644 --- a/include/RTCPeerConnection.h +++ b/include/RTCPeerConnection.h @@ -27,6 +27,7 @@ #import "RTCPeerConnectionDelegate.h" +@class RTCConfiguration; @class RTCDataChannel; @class RTCDataChannelInit; @class RTCICECandidate; @@ -97,10 +98,12 @@ setRemoteDescriptionWithDelegate:(id)delegate sessionDescription:(RTCSessionDescription *)sdp; -// Restarts or updates the ICE Agent process of gathering local candidates -// and pinging remote candidates. -- (BOOL)updateICEServers:(NSArray *)servers - constraints:(RTCMediaConstraints *)constraints; +// 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; // Provides a remote candidate to the ICE Agent. - (BOOL)addICECandidate:(RTCICECandidate *)candidate; diff --git a/include/RTCPeerConnectionFactory.h b/include/RTCPeerConnectionFactory.h index f0b2e3a..e1e69b4 100644 --- a/include/RTCPeerConnectionFactory.h +++ b/include/RTCPeerConnectionFactory.h @@ -28,6 +28,7 @@ #import @class RTCAudioTrack; +@class RTCConfiguration; @class RTCMediaConstraints; @class RTCMediaStream; @class RTCPeerConnection; @@ -44,7 +45,7 @@ + (void)initializeSSL; + (void)deinitializeSSL; -// Create an RTCPeerConnection object. RTCPeerConnectionFactory will create +// Create an RTCPeerConnection object. RTCPeerConnectionFactory will create // required libjingle threads, socket and network manager factory classes for // networking. - (RTCPeerConnection *) @@ -52,6 +53,11 @@ constraints:(RTCMediaConstraints *)constraints delegate:(id)delegate; +// Creates a peer connection using the default port allocator factory and identity service. +- (RTCPeerConnection *)peerConnectionWithConfiguration:(RTCConfiguration *)configuration + constraints:(RTCMediaConstraints *)constraints + delegate:(id)delegate; + // Create an RTCMediaStream named |label|. - (RTCMediaStream *)mediaStreamWithLabel:(NSString *)label; diff --git a/include/RTCPeerConnectionInterface.h b/include/RTCPeerConnectionInterface.h new file mode 100644 index 0000000..44b971c --- /dev/null +++ b/include/RTCPeerConnectionInterface.h @@ -0,0 +1,77 @@ +/* + * libjingle + * Copyright 2015 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// See talk/app/webrtc/peerconnectioninterface.h. + +#import + +typedef NS_ENUM(NSInteger, RTCIceTransportsType) { + kRTCIceTransportsTypeNone, + kRTCIceTransportsTypeRelay, + kRTCIceTransportsTypeNoHost, + kRTCIceTransportsTypeAll, +}; + +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-08#section-4.1.1 +typedef NS_ENUM(NSInteger, RTCBundlePolicy) { + kRTCBundlePolicyBalanced, + kRTCBundlePolicyMaxBundle, + kRTCBundlePolicyMaxCompat, +}; + +// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-09#section-4.1.1 +typedef NS_ENUM(NSInteger, RTCRtcpMuxPolicy) { + kRTCRtcpMuxPolicyNegotiate, + kRTCRtcpMuxPolicyRequire, +}; + +typedef NS_ENUM(NSInteger, RTCTcpCandidatePolicy) { + kRTCTcpCandidatePolicyEnabled, + kRTCTcpCandidatePolicyDisabled, +}; + +// Configuration object used for creating a peer connection. +@interface RTCConfiguration : NSObject + +@property(nonatomic, assign) RTCIceTransportsType iceTransportsType; +@property(nonatomic, copy) NSArray *iceServers; +@property(nonatomic, assign) RTCBundlePolicy bundlePolicy; +@property(nonatomic, assign) RTCRtcpMuxPolicy rtcpMuxPolicy; +@property(nonatomic, assign) RTCTcpCandidatePolicy tcpCandidatePolicy; +@property(nonatomic, assign) int audioJitterBufferMaxPackets; +@property(nonatomic, assign) int iceConnectionReceivingTimeout; +@property(nonatomic, assign) int iceBackupCandidatePairPingInterval; + +- (instancetype)initWithIceTransportsType:(RTCIceTransportsType)iceTransportsType + bundlePolicy:(RTCBundlePolicy)bundlePolicy + rtcpMuxPolicy:(RTCRtcpMuxPolicy)rtcpMuxPolicy + tcpCandidatePolicy:(RTCTcpCandidatePolicy)tcpCandidatePolicy + audioJitterBufferMaxPackets:(int)audioJitterBufferMaxPackets + iceConnectionReceivingTimeout:(int)iceConnectionReceivingTimeout + iceBackupCandidatePairPingInterval:(int)iceBackupCandidatePairPingInterval; + +@end diff --git a/include/RTCTypes.h b/include/RTCTypes.h index 946148a..99ac192 100644 --- a/include/RTCTypes.h +++ b/include/RTCTypes.h @@ -36,6 +36,7 @@ typedef enum { RTCICEConnectionFailed, RTCICEConnectionDisconnected, RTCICEConnectionClosed, + RTCICEConnectionMax, } RTCICEConnectionState; // RTCICEGatheringState the states in webrtc::ICEGatheringState. diff --git a/lib/libWebRTC.a.gz b/lib/libWebRTC.a.gz index a93d9d9..e2d89ab 100644 Binary files a/lib/libWebRTC.a.gz and b/lib/libWebRTC.a.gz differ