Reland "Simple Default ObjC video codec factories."
This is a reland of 30915a742d86df55ac5c04501c0e8104675a612e
Original change's description:
> Simple Default ObjC video codec factories.
>
> Move the simple video encoder/decoder factory from AppRTCMobile into the
> public API so users who don't have special requirements for video codecs
> can easily get started.
>
> Also clean up the API a little.
>
> This CL replaces the more flexible default factories in
> https://webrtc-review.googlesource.com/c/src/+/7741 and clients that
> want to implement their own codecs will have to supply their own
> encoder/decoder factories as well. The benefits of the approach in
> this CL are a simpler API and less effects on the rest of the code.
>
> Bug: None
> Change-Id: I4ed94090d778b4fc38b49864de1d4de4ff125d6a
> Reviewed-on: https://webrtc-review.googlesource.com/15141
> Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
> Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> Commit-Queue: Anders Carlsson <andersc@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#20441}
Bug: None
Change-Id: If0910cc540dc835dfec4eeb5bea527d88482d110
Reviewed-on: https://webrtc-review.googlesource.com/16780
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20476}
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index 0041d04..c5bc83f 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -230,10 +230,6 @@
"objc/AppRTCMobile/ARDTURNClient+Internal.h",
"objc/AppRTCMobile/ARDTURNClient.h",
"objc/AppRTCMobile/ARDTURNClient.m",
- "objc/AppRTCMobile/ARDVideoDecoderFactory.h",
- "objc/AppRTCMobile/ARDVideoDecoderFactory.m",
- "objc/AppRTCMobile/ARDVideoEncoderFactory.h",
- "objc/AppRTCMobile/ARDVideoEncoderFactory.m",
"objc/AppRTCMobile/ARDWebSocketChannel.h",
"objc/AppRTCMobile/ARDWebSocketChannel.m",
"objc/AppRTCMobile/RTCIceCandidate+JSON.h",
diff --git a/examples/objc/AppRTCMobile/ARDAppClient.m b/examples/objc/AppRTCMobile/ARDAppClient.m
index 8e933b9..f753828 100644
--- a/examples/objc/AppRTCMobile/ARDAppClient.m
+++ b/examples/objc/AppRTCMobile/ARDAppClient.m
@@ -22,6 +22,7 @@
#import "WebRTC/RTCPeerConnectionFactory.h"
#import "WebRTC/RTCRtpSender.h"
#import "WebRTC/RTCTracing.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
#import "WebRTC/RTCVideoTrack.h"
#import "ARDAppEngineClient.h"
@@ -31,8 +32,6 @@
#import "ARDSignalingMessage.h"
#import "ARDTURNClient+Internal.h"
#import "ARDUtilities.h"
-#import "ARDVideoDecoderFactory.h"
-#import "ARDVideoEncoderFactory.h"
#import "ARDWebSocketChannel.h"
#import "RTCIceCandidate+JSON.h"
#import "RTCSessionDescription+JSON.h"
@@ -218,8 +217,8 @@
_isLoopback = isLoopback;
self.state = kARDAppClientStateConnecting;
- ARDVideoDecoderFactory *decoderFactory = [[ARDVideoDecoderFactory alloc] init];
- ARDVideoEncoderFactory *encoderFactory = [[ARDVideoEncoderFactory alloc] init];
+ RTCDefaultVideoDecoderFactory *decoderFactory = [[RTCDefaultVideoDecoderFactory alloc] init];
+ RTCDefaultVideoEncoderFactory *encoderFactory = [[RTCDefaultVideoEncoderFactory alloc] init];
encoderFactory.preferredCodec = [settings currentVideoCodecSettingFromStore];
_factory = [[RTCPeerConnectionFactory alloc] initWithEncoderFactory:encoderFactory
decoderFactory:decoderFactory];
diff --git a/examples/objc/AppRTCMobile/ARDSettingsModel.m b/examples/objc/AppRTCMobile/ARDSettingsModel.m
index ac265c8..0a2bee6 100644
--- a/examples/objc/AppRTCMobile/ARDSettingsModel.m
+++ b/examples/objc/AppRTCMobile/ARDSettingsModel.m
@@ -10,9 +10,9 @@
#import "ARDSettingsModel+Private.h"
#import "ARDSettingsStore.h"
-#import "ARDVideoEncoderFactory.h"
#import "WebRTC/RTCCameraVideoCapturer.h"
#import "WebRTC/RTCMediaConstraints.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
NS_ASSUME_NONNULL_BEGIN
@@ -66,9 +66,7 @@
}
- (NSArray<RTCVideoCodecInfo *> *)availableVideoCodecs {
- NSArray<RTCVideoCodecInfo *> *supportedCodecs =
- [[[ARDVideoEncoderFactory alloc] init] supportedCodecs];
- return supportedCodecs;
+ return [RTCDefaultVideoEncoderFactory supportedCodecs];
}
- (RTCVideoCodecInfo *)currentVideoCodecSettingFromStore {
diff --git a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.h b/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.h
deleted file mode 100644
index bc8be99..0000000
--- a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * 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 <Foundation/Foundation.h>
-#import "WebRTC/RTCVideoCodecFactory.h"
-
-@interface ARDVideoDecoderFactory : NSObject<RTCVideoDecoderFactory>
-
-@end
diff --git a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.h b/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.h
deleted file mode 100644
index fb3e616..0000000
--- a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * 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 <Foundation/Foundation.h>
-#import "WebRTC/RTCVideoCodecFactory.h"
-
-@interface ARDVideoEncoderFactory : NSObject<RTCVideoEncoderFactory>
-
-@property(nonatomic, retain) RTCVideoCodecInfo* preferredCodec;
-
-@end
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index e79ebc7..4be5671 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -318,6 +318,8 @@
rtc_static_library("peerconnectionfactory_objc") {
sources = [
+ "objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m",
+ "objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m",
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h",
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h",
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm",
diff --git a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
similarity index 62%
rename from examples/objc/AppRTCMobile/ARDVideoDecoderFactory.m
rename to sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
index 172635e..0ce0502 100644
--- a/examples/objc/AppRTCMobile/ARDVideoDecoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
@@ -8,20 +8,20 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#import "ARDVideoDecoderFactory.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
#import "WebRTC/RTCVideoCodecH264.h"
#import "WebRTC/RTCVideoDecoderVP8.h"
#import "WebRTC/RTCVideoDecoderVP9.h"
-@implementation ARDVideoDecoderFactory
+@implementation RTCDefaultVideoDecoderFactory
- (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
- if ([info.name isEqualToString:@"H264"]) {
+ if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
return [[RTCVideoDecoderH264 alloc] init];
- } else if ([info.name isEqualToString:@"VP8"]) {
+ } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
return [RTCVideoDecoderVP8 vp8Decoder];
- } else if ([info.name isEqualToString:@"VP9"]) {
+ } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
return [RTCVideoDecoderVP9 vp9Decoder];
}
@@ -30,9 +30,9 @@
- (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
return @[
- [[RTCVideoCodecInfo alloc] initWithName:@"H264" parameters:nil],
- [[RTCVideoCodecInfo alloc] initWithName:@"VP8" parameters:nil],
- [[RTCVideoCodecInfo alloc] initWithName:@"VP9" parameters:nil]
+ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name],
+ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name],
+ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name]
];
}
diff --git a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
similarity index 79%
rename from examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m
rename to sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
index d6ca592..71ffe29 100644
--- a/examples/objc/AppRTCMobile/ARDVideoEncoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
@@ -8,18 +8,43 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#import "ARDVideoEncoderFactory.h"
+#import "WebRTC/RTCVideoCodecFactory.h"
-#import "ARDSettingsModel.h"
#import "WebRTC/RTCVideoCodec.h"
#import "WebRTC/RTCVideoCodecH264.h"
#import "WebRTC/RTCVideoEncoderVP8.h"
#import "WebRTC/RTCVideoEncoderVP9.h"
-@implementation ARDVideoEncoderFactory
+@implementation RTCDefaultVideoEncoderFactory
@synthesize preferredCodec;
++ (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
+ NSDictionary<NSString *, NSString *> *constrainedHighParams = @{
+ @"profile-level-id" : kRTCLevel31ConstrainedHigh,
+ @"level-asymmetry-allowed" : @"1",
+ @"packetization-mode" : @"1",
+ };
+ RTCVideoCodecInfo *constrainedHighInfo =
+ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
+ parameters:constrainedHighParams];
+
+ NSDictionary<NSString *, NSString *> *constrainedBaselineParams = @{
+ @"profile-level-id" : kRTCLevel31ConstrainedBaseline,
+ @"level-asymmetry-allowed" : @"1",
+ @"packetization-mode" : @"1",
+ };
+ RTCVideoCodecInfo *constrainedBaselineInfo =
+ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
+ parameters:constrainedBaselineParams];
+
+ RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name];
+
+ RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name];
+
+ return @[ constrainedHighInfo, constrainedBaselineInfo, vp8Info, vp9Info ];
+}
+
- (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
@@ -33,35 +58,7 @@
}
- (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
- NSMutableArray<RTCVideoCodecInfo *> *codecs = [NSMutableArray array];
-
- NSDictionary<NSString *, NSString *> *constrainedHighParams = @{
- @"profile-level-id" : kRTCLevel31ConstrainedHigh,
- @"level-asymmetry-allowed" : @"1",
- @"packetization-mode" : @"1",
- };
- RTCVideoCodecInfo *constrainedHighInfo =
- [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
- parameters:constrainedHighParams];
- [codecs addObject:constrainedHighInfo];
-
- NSDictionary<NSString *, NSString *> *constrainedBaselineParams = @{
- @"profile-level-id" : kRTCLevel31ConstrainedBaseline,
- @"level-asymmetry-allowed" : @"1",
- @"packetization-mode" : @"1",
- };
- RTCVideoCodecInfo *constrainedBaselineInfo =
- [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
- parameters:constrainedBaselineParams];
- [codecs addObject:constrainedBaselineInfo];
-
- RTCVideoCodecInfo *vp8Info =
- [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name parameters:nil];
- [codecs addObject:vp8Info];
-
- RTCVideoCodecInfo *vp9Info =
- [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name parameters:nil];
- [codecs addObject:vp9Info];
+ NSMutableArray<RTCVideoCodecInfo *> *codecs = [[[self class] supportedCodecs] mutableCopy];
NSMutableArray<RTCVideoCodecInfo *> *orderedCodecs = [NSMutableArray array];
NSUInteger index = [codecs indexOfObject:self.preferredCodec];
diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h
index aa5f746..c77593f 100644
--- a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h
+++ b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h
@@ -33,4 +33,22 @@
@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 <RTCVideoEncoderFactory>
+
+@property(nonatomic, retain) RTCVideoCodecInfo *preferredCodec;
+
++ (NSArray<RTCVideoCodecInfo *> *)supportedCodecs;
+
+@end
+
+RTC_EXPORT
+@interface RTCDefaultVideoDecoderFactory : NSObject <RTCVideoDecoderFactory>
+@end
+
NS_ASSUME_NONNULL_END