diff --git a/CocoaSplit.xcodeproj/project.pbxproj b/CocoaSplit.xcodeproj/project.pbxproj index f8a8a2b2..b64aee26 100644 --- a/CocoaSplit.xcodeproj/project.pbxproj +++ b/CocoaSplit.xcodeproj/project.pbxproj @@ -179,6 +179,8 @@ 34A629451FBB6DC500B4E16A /* CSJSAnimationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 34A629441FBB6DC500B4E16A /* CSJSAnimationDelegate.m */; }; 34A64A2F165EFE4C00A68428 /* PreviewView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34A64A2E165EFE4B00A68428 /* PreviewView.m */; }; 34A64A37165F208800A68428 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34A64A36165F208800A68428 /* QuartzCore.framework */; }; + 34A77455201449450036F8B5 /* CSStreamServiceBase.h in Sources */ = {isa = PBXBuildFile; fileRef = 34A77454201449450036F8B5 /* CSStreamServiceBase.h */; }; + 34A77457201449C30036F8B5 /* CSStreamServiceBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 34A77456201449C30036F8B5 /* CSStreamServiceBase.m */; }; 34A7ADB81C01EF1400685044 /* CompressionSettingsPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34A7ADB71C01EF1400685044 /* CompressionSettingsPanelController.m */; }; 34A7C1AD19B9A57600BC6882 /* CSLayoutSwitcherExtraPlugin.bundle in Copy Files */ = {isa = PBXBuildFile; fileRef = 34A7C1A119B9A41A00BC6882 /* CSLayoutSwitcherExtraPlugin.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 34AB1C311B944F48003F2C03 /* CSPreviewOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34AB1C301B944F48003F2C03 /* CSPreviewOverlayView.m */; }; @@ -884,6 +886,8 @@ 34A64A36165F208800A68428 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 34A7745220141DF70036F8B5 /* CSOutputWriterProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSOutputWriterProtocol.h; path = PluginHeaders/CSOutputWriterProtocol.h; sourceTree = ""; }; 34A77453201442B60036F8B5 /* CapturedFrameData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CapturedFrameData.h; path = PluginHeaders/CapturedFrameData.h; sourceTree = ""; }; + 34A77454201449450036F8B5 /* CSStreamServiceBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CSStreamServiceBase.h; path = PluginHeaders/CSStreamServiceBase.h; sourceTree = ""; }; + 34A77456201449C30036F8B5 /* CSStreamServiceBase.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CSStreamServiceBase.m; sourceTree = ""; }; 34A7ADB61C01EF1400685044 /* CompressionSettingsPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CompressionSettingsPanelController.h; path = Interface/CompressionSettingsPanelController.h; sourceTree = ""; }; 34A7ADB71C01EF1400685044 /* CompressionSettingsPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CompressionSettingsPanelController.m; path = Interface/CompressionSettingsPanelController.m; sourceTree = ""; }; 34A7C17A19B98EA200BC6882 /* CSExtraPluginProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSExtraPluginProtocol.h; path = PluginHeaders/CSExtraPluginProtocol.h; sourceTree = ""; }; @@ -1410,6 +1414,7 @@ 346544DE1FC24248003B9991 /* NSImage+tintedImage.m */, 346544E01FC2457E003B9991 /* CSNSImageCellThemed.h */, 346544E11FC2457E003B9991 /* CSNSImageCellThemed.m */, + 34A77456201449C30036F8B5 /* CSStreamServiceBase.m */, ); path = CocoaSplit; sourceTree = ""; @@ -1713,6 +1718,7 @@ 34EA822C1D3C568400928A06 /* CSOauth2Authenticator.h */, 3408234619BC50AD00CD1F5F /* CSNotifications.h */, 34DBBAB2201412FC00B3DFFD /* CSOutputBase.h */, + 34A77454201449450036F8B5 /* CSStreamServiceBase.h */, ); name = PluginHeaders; sourceTree = ""; @@ -2759,6 +2765,7 @@ 34ED8C711B07371C002C0674 /* MIKMIDIMappingManager.m in Sources */, 3481F30619B48C7C00CC76D8 /* SourceLayout+ScriptingAdditions.m in Sources */, 34EAFB6F1A1A137600E12FBD /* CSMeterCell.m in Sources */, + 34A77457201449C30036F8B5 /* CSStreamServiceBase.m in Sources */, 34D2D5771A547C35001004E5 /* CSTextCaptureViewControllerBase.m in Sources */, 34B5FCDF19BF1C3F00F67D19 /* CreateLayoutViewController.m in Sources */, 34788DDB1EF5996000C3C9C5 /* CATransaction+JSExtensions.m in Sources */, @@ -2846,6 +2853,7 @@ 34A7ADB81C01EF1400685044 /* CompressionSettingsPanelController.m in Sources */, 34DC2FB01B512362008F12A2 /* CSCaptureBase+TimerDelegate.m in Sources */, 34ED8C791B07371C002C0674 /* MIKMIDIMetaEvent.m in Sources */, + 34A77455201449450036F8B5 /* CSStreamServiceBase.h in Sources */, 34F52A2B1BC1E0F900662911 /* CSLayoutButton.m in Sources */, 34576C7819AFCA1B007BAD90 /* CSPluginLoader.m in Sources */, 34FDD6F21A215268009A7413 /* CSPluginServices.m in Sources */, diff --git a/CocoaSplit/CSStreamServiceBase.m b/CocoaSplit/CSStreamServiceBase.m new file mode 100644 index 00000000..983a75f6 --- /dev/null +++ b/CocoaSplit/CSStreamServiceBase.m @@ -0,0 +1,75 @@ +// +// CSStreamServiceBase.m +// CocoaSplit +// +// Created by Zakk on 1/20/18. +// + +#import +#import "CSStreamServiceBase.h" +#import "CSOutputBase.h" + +@implementation CSStreamServiceBase + + + + +-(NSViewController *)getConfigurationView +{ + return nil; +} + + +-(NSString *)getServiceDestination +{ + return nil; +} + + +-(NSString *)getServiceFormat +{ + return nil; +} + ++(NSString *)label +{ + return nil; +} + + ++(NSString *)serviceDescription +{ + return nil; +} + ++(NSImage *)serviceImage +{ + return nil; +} + +-(NSObject *)createOutput; +{ + return [[CSOutputBase alloc] init]; +} + + +-(void)prepareForStreamStart +{ + return; +} + + + +- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { + return; +} + +- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { + return [self init]; +} + + +@synthesize isReady; + +@end + diff --git a/CocoaSplit/OutputDestination.h b/CocoaSplit/OutputDestination.h index 6e38870d..feb317b4 100644 --- a/CocoaSplit/OutputDestination.h +++ b/CocoaSplit/OutputDestination.h @@ -3,7 +3,6 @@ // H264Streamer // // Created by Zakk on 9/16/12. -// Copyright (c) 2012 Zakk. All rights reserved. // #import @@ -11,7 +10,7 @@ #import "VideoCompressor.h" #import "CaptureController.h" #import "CSLayoutRecorderInfoProtocol.h" -#import "CSOutputBase.h" +#import "CSStreamServiceProtocol.h" @@ -56,7 +55,7 @@ @property (strong) NSString *output_format; @property (strong) NSString *stream_key; @property (assign) int stream_delay; -@property (strong) CSOutputBase *ffmpeg_out; +@property (strong) NSObject *ffmpeg_out; @property (weak) id settingsController; @property (strong) NSColor *textColor; @property (assign) NSUInteger delay_buffer_frames; diff --git a/CocoaSplit/OutputDestination.m b/CocoaSplit/OutputDestination.m index b4645368..e49697e6 100644 --- a/CocoaSplit/OutputDestination.m +++ b/CocoaSplit/OutputDestination.m @@ -3,7 +3,6 @@ // H264Streamer // // Created by Zakk on 9/16/12. -// Copyright (c) 2012 Zakk. All rights reserved. // #import "OutputDestination.h" @@ -35,7 +34,6 @@ -(void) encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.type_name forKey:@"type_name"]; [aCoder encodeObject:self.type_class_name forKey:@"type_class_name"]; @@ -353,7 +351,7 @@ -(void) attachOutput { - CSOutputBase *newout; + NSObject *newout; if (!self.active) { return; @@ -361,8 +359,12 @@ if (!self.ffmpeg_out) { - - newout = [[CSOutputBase alloc] init]; + if (self.streamServiceObject) + { + newout = [self.streamServiceObject createOutput]; + } else { + newout = [[CSOutputBase alloc] init]; + } } else { newout = self.ffmpeg_out; } diff --git a/CocoaSplit/PluginHeaders/CSStreamServiceBase.h b/CocoaSplit/PluginHeaders/CSStreamServiceBase.h new file mode 100644 index 00000000..b55ad991 --- /dev/null +++ b/CocoaSplit/PluginHeaders/CSStreamServiceBase.h @@ -0,0 +1,25 @@ +// +// CSStreamServiceBase.m +// CocoaSplit +// +// Created by Zakk on 1/20/18. +// + +#import +#import "CSStreamServiceProtocol.h" + +@interface CSStreamServiceBase : NSObject + +-(NSViewController *)getConfigurationView; +-(NSString *)getServiceDestination; +-(NSString *)getServiceFormat; ++(NSString *)label; ++(NSString *)serviceDescription; ++(NSImage *)serviceImage; +-(NSObject *)createOutput; + +-(void)prepareForStreamStart; +@end + + + diff --git a/CocoaSplit/PluginHeaders/CSStreamServiceProtocol.h b/CocoaSplit/PluginHeaders/CSStreamServiceProtocol.h index 08222411..edf40d30 100644 --- a/CocoaSplit/PluginHeaders/CSStreamServiceProtocol.h +++ b/CocoaSplit/PluginHeaders/CSStreamServiceProtocol.h @@ -9,7 +9,7 @@ #import #import "CSOutputWriterProtocol.h" -@protocol CSStreamServiceProtocol +@protocol CSStreamServiceProtocol @property bool isReady; @@ -19,6 +19,7 @@ +(NSString *)label; +(NSString *)serviceDescription; +(NSImage *)serviceImage; +-(NSObject *)createOutput; -(void)prepareForStreamStart; diff --git a/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/CSFileStreamRTMPService.h b/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/CSFileStreamRTMPService.h index 1e934058..eda03f68 100644 --- a/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/CSFileStreamRTMPService.h +++ b/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/CSFileStreamRTMPService.h @@ -7,9 +7,9 @@ #import #import "CSStreamServiceProtocol.h" -#import "CSOutputBase.h" +#import "CSStreamServiceBase.h" -@interface CSFileStreamRTMPService : CSOutputBase +@interface CSFileStreamRTMPService : CSStreamServiceBase @property bool isReady; diff --git a/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/FileStreamService.h b/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/FileStreamService.h index 906fd486..7993dd0a 100644 --- a/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/FileStreamService.h +++ b/StreamServicePlugins/CSFileStreamServicePlugin/CSFileStreamServicePlugin/FileStreamService.h @@ -7,9 +7,9 @@ #import #import "CSStreamServiceProtocol.h" -#import "CSOutputBase.h" +#import "CSStreamServiceBase.h" -@interface FileStreamService : CSOutputBase +@interface FileStreamService : CSStreamServiceBase @property bool isReady; diff --git a/StreamServicePlugins/CSHitboxStreamServicePlugin/CSHitboxStreamServicePlugin/HitboxStreamService.h b/StreamServicePlugins/CSHitboxStreamServicePlugin/CSHitboxStreamServicePlugin/HitboxStreamService.h index abbf51db..bba5abfd 100644 --- a/StreamServicePlugins/CSHitboxStreamServicePlugin/CSHitboxStreamServicePlugin/HitboxStreamService.h +++ b/StreamServicePlugins/CSHitboxStreamServicePlugin/CSHitboxStreamServicePlugin/HitboxStreamService.h @@ -7,11 +7,11 @@ #import #import "CSStreamServiceProtocol.h" -#import "CSOutputBase.h" +#import "CSStreamServiceBase.h" #define HITBOX_API_BASE "https://api.hitbox.tv/" -@interface HitboxStreamService : CSOutputBase +@interface HitboxStreamService : CSStreamServiceBase @property bool isReady; diff --git a/StreamServicePlugins/CSTwitchStreamServicePlugin/TwitchStreamService.h b/StreamServicePlugins/CSTwitchStreamServicePlugin/TwitchStreamService.h index 6781fabf..f989834c 100644 --- a/StreamServicePlugins/CSTwitchStreamServicePlugin/TwitchStreamService.h +++ b/StreamServicePlugins/CSTwitchStreamServicePlugin/TwitchStreamService.h @@ -9,9 +9,9 @@ #import "CSStreamServiceProtocol.h" #import "CSPluginServices.h" #import "CSOauth2Authenticator.h" -#import "CSOutputBase.h" +#import "CSStreamServiceBase.h" -@interface TwitchStreamService : CSOutputBase +@interface TwitchStreamService : CSStreamServiceBase { NSString *_oauth_client_id; bool _key_fetch_pending; diff --git a/StreamServicePlugins/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamService.h b/StreamServicePlugins/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamService.h index dbc158c2..839f90cc 100644 --- a/StreamServicePlugins/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamService.h +++ b/StreamServicePlugins/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamServicePlugin/CSVaughnliveStreamService.h @@ -7,12 +7,12 @@ #import #import "CSStreamServiceProtocol.h" -#import "CSOutputBase.h" +#import "CSStreamServiceBase.h" #define INGEST_URL @"rtmp://live.vaughnlive.tv:443/live/" -@interface CSVaughnliveStreamService : CSOutputBase +@interface CSVaughnliveStreamService : CSStreamServiceBase { NSString *_ingestURL; } diff --git a/StreamServicePlugins/CSYoutubeStreamServicePlugin/CSYoutubeStreamServicePlugin/CSYoutubeStreamService.h b/StreamServicePlugins/CSYoutubeStreamServicePlugin/CSYoutubeStreamServicePlugin/CSYoutubeStreamService.h index b61235b5..0e1837fd 100644 --- a/StreamServicePlugins/CSYoutubeStreamServicePlugin/CSYoutubeStreamServicePlugin/CSYoutubeStreamService.h +++ b/StreamServicePlugins/CSYoutubeStreamServicePlugin/CSYoutubeStreamServicePlugin/CSYoutubeStreamService.h @@ -9,9 +9,9 @@ #import "CSStreamServiceProtocol.h" #import "CSPluginServices.h" #import "CSOauth2Authenticator.h" -#import "CSOutputBase.h" +#import "CSStreamServiceBase.h" -@interface CSYoutubeStreamService : CSOutputBase +@interface CSYoutubeStreamService : CSStreamServiceBase { NSString *_currentStreamDest; bool _destination_fetch_pending;