diff --git a/LiveKitObjC/LKRoom.m b/LiveKitObjC/LKRoom.m new file mode 100644 index 0000000000..ea4d7d4402 --- /dev/null +++ b/LiveKitObjC/LKRoom.m @@ -0,0 +1,28 @@ +// +// LKRoom.m +// LiveKitObjC +// +// Created by Antonio Scandurra on 01/09/22. +// + +#import +#import + +@interface LKRoom: NSObject { +} + +@property (nonatomic, retain) SLKRoom* room; +@end + +@implementation LKRoom +-(id)init { + if (self = [super init]) { + self.room = [[SLKRoom alloc] init]; + } + return self; +} + +-(void)connectWithURL:(NSString *)url token:(NSString *)token callback:(void(^)(void))callback { + [self.room connectWithUrl:url token:token callback:callback]; +} +@end diff --git a/LiveKitObjC/LiveKitObjC-Bridging-Header.h b/LiveKitObjC/LiveKitObjC-Bridging-Header.h new file mode 100644 index 0000000000..e11d920b12 --- /dev/null +++ b/LiveKitObjC/LiveKitObjC-Bridging-Header.h @@ -0,0 +1,3 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// diff --git a/LiveKitObjC/LiveKitObjC.xcodeproj/project.pbxproj b/LiveKitObjC/LiveKitObjC.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..93053cb68d --- /dev/null +++ b/LiveKitObjC/LiveKitObjC.xcodeproj/project.pbxproj @@ -0,0 +1,342 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + AFA4DBD628C0F839001AD7BE /* LiveKit in Frameworks */ = {isa = PBXBuildFile; productRef = AFA4DBD528C0F839001AD7BE /* LiveKit */; }; + AFA4DBD928C0F87F001AD7BE /* Room.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFA4DBD828C0F87F001AD7BE /* Room.swift */; }; + AFA4DBDB28C0FBC0001AD7BE /* LKRoom.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA4DBDA28C0FBC0001AD7BE /* LKRoom.m */; }; + AFA4DBDE28C121E6001AD7BE /* LiveKit in Frameworks */ = {isa = PBXBuildFile; productRef = AFA4DBDD28C121E6001AD7BE /* LiveKit */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + AFA4DBCD28C0F7F5001AD7BE /* libLiveKitObjC.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libLiveKitObjC.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AFA4DBD728C0F87F001AD7BE /* LiveKitObjC-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "LiveKitObjC-Bridging-Header.h"; sourceTree = ""; }; + AFA4DBD828C0F87F001AD7BE /* Room.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Room.swift; sourceTree = ""; }; + AFA4DBDA28C0FBC0001AD7BE /* LKRoom.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LKRoom.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AFA4DBCB28C0F7F5001AD7BE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AFA4DBD628C0F839001AD7BE /* LiveKit in Frameworks */, + AFA4DBDE28C121E6001AD7BE /* LiveKit in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AFA4DBC428C0F7F5001AD7BE = { + isa = PBXGroup; + children = ( + AFA4DBDA28C0FBC0001AD7BE /* LKRoom.m */, + AFA4DBD828C0F87F001AD7BE /* Room.swift */, + AFA4DBCE28C0F7F5001AD7BE /* Products */, + AFA4DBD728C0F87F001AD7BE /* LiveKitObjC-Bridging-Header.h */, + ); + sourceTree = ""; + }; + AFA4DBCE28C0F7F5001AD7BE /* Products */ = { + isa = PBXGroup; + children = ( + AFA4DBCD28C0F7F5001AD7BE /* libLiveKitObjC.a */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + AFA4DBC928C0F7F5001AD7BE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + AFA4DBCC28C0F7F5001AD7BE /* LiveKitObjC */ = { + isa = PBXNativeTarget; + buildConfigurationList = AFA4DBD128C0F7F5001AD7BE /* Build configuration list for PBXNativeTarget "LiveKitObjC" */; + buildPhases = ( + AFA4DBC928C0F7F5001AD7BE /* Headers */, + AFA4DBCA28C0F7F5001AD7BE /* Sources */, + AFA4DBCB28C0F7F5001AD7BE /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LiveKitObjC; + packageProductDependencies = ( + AFA4DBD528C0F839001AD7BE /* LiveKit */, + AFA4DBDD28C121E6001AD7BE /* LiveKit */, + ); + productName = LiveKitObjC; + productReference = AFA4DBCD28C0F7F5001AD7BE /* libLiveKitObjC.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AFA4DBC528C0F7F5001AD7BE /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1340; + TargetAttributes = { + AFA4DBCC28C0F7F5001AD7BE = { + CreatedOnToolsVersion = 13.4.1; + LastSwiftMigration = 1340; + }; + }; + }; + buildConfigurationList = AFA4DBC828C0F7F5001AD7BE /* Build configuration list for PBXProject "LiveKitObjC" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AFA4DBC428C0F7F5001AD7BE; + packageReferences = ( + AFA4DBD428C0F839001AD7BE /* XCRemoteSwiftPackageReference "client-sdk-swift" */, + AFA4DBDC28C121E6001AD7BE /* XCRemoteSwiftPackageReference "client-sdk-swift" */, + ); + productRefGroup = AFA4DBCE28C0F7F5001AD7BE /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AFA4DBCC28C0F7F5001AD7BE /* LiveKitObjC */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + AFA4DBCA28C0F7F5001AD7BE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFA4DBD928C0F87F001AD7BE /* Room.swift in Sources */, + AFA4DBDB28C0FBC0001AD7BE /* LKRoom.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + AFA4DBCF28C0F7F5001AD7BE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + AFA4DBD028C0F7F5001AD7BE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 12.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + }; + name = Release; + }; + AFA4DBD228C0F7F5001AD7BE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = NO; + EXECUTABLE_PREFIX = lib; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_OBJC_BRIDGING_HEADER = "LiveKitObjC-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + AFA4DBD328C0F7F5001AD7BE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = NO; + EXECUTABLE_PREFIX = lib; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_OBJC_BRIDGING_HEADER = "LiveKitObjC-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AFA4DBC828C0F7F5001AD7BE /* Build configuration list for PBXProject "LiveKitObjC" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AFA4DBCF28C0F7F5001AD7BE /* Debug */, + AFA4DBD028C0F7F5001AD7BE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AFA4DBD128C0F7F5001AD7BE /* Build configuration list for PBXNativeTarget "LiveKitObjC" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AFA4DBD228C0F7F5001AD7BE /* Debug */, + AFA4DBD328C0F7F5001AD7BE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + AFA4DBD428C0F839001AD7BE /* XCRemoteSwiftPackageReference "client-sdk-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/livekit/client-sdk-swift"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + AFA4DBDC28C121E6001AD7BE /* XCRemoteSwiftPackageReference "client-sdk-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/livekit/client-sdk-swift"; + requirement = { + branch = main; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + AFA4DBD528C0F839001AD7BE /* LiveKit */ = { + isa = XCSwiftPackageProductDependency; + package = AFA4DBD428C0F839001AD7BE /* XCRemoteSwiftPackageReference "client-sdk-swift" */; + productName = LiveKit; + }; + AFA4DBDD28C121E6001AD7BE /* LiveKit */ = { + isa = XCSwiftPackageProductDependency; + package = AFA4DBDC28C121E6001AD7BE /* XCRemoteSwiftPackageReference "client-sdk-swift" */; + productName = LiveKit; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = AFA4DBC528C0F7F5001AD7BE /* Project object */; +} diff --git a/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000000..904852142c --- /dev/null +++ b/LiveKitObjC/LiveKitObjC.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,50 @@ +{ + "pins" : [ + { + "identity" : "client-sdk-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/livekit/client-sdk-swift", + "state" : { + "branch" : "main", + "revision" : "e3de0d06e14825a7c9f1204f18f66898afb56cd6" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "3e4e743631e86c8c70dbc6efdc7beaa6e90fd3bb", + "version" : "2.1.1" + } + }, + { + "identity" : "specs", + "kind" : "remoteSourceControl", + "location" : "https://github.com/webrtc-sdk/Specs.git", + "state" : { + "revision" : "5225f2de4b6d0098803b3a0e55b255a41f293dad", + "version" : "104.5112.2" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "6fe203dc33195667ce1759bf0182975e4653ba1c", + "version" : "1.4.4" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "b8230909dedc640294d7324d37f4c91ad3dcf177", + "version" : "1.20.1" + } + } + ], + "version" : 2 +} diff --git a/LiveKitObjC/Room.swift b/LiveKitObjC/Room.swift new file mode 100644 index 0000000000..1019dc7894 --- /dev/null +++ b/LiveKitObjC/Room.swift @@ -0,0 +1,23 @@ +// +// LKRoom.swift +// LiveKitObjC +// +// Created by Antonio Scandurra on 01/09/22. +// + +import Foundation +import LiveKit + +@objc public class SLKRoom: NSObject, RoomDelegate { + lazy var room = Room(delegate: self) + + @objc public func connect( + url: String, + token: String, + callback: @convention(block) @escaping () -> Void + ) { + self.room.connect(url, token).then { room in + callback() + } + } +} diff --git a/crates/capture/build.rs b/crates/capture/build.rs index 7adb758dde..e88423bed1 100644 --- a/crates/capture/build.rs +++ b/crates/capture/build.rs @@ -1,6 +1,8 @@ use std::{env, path::PathBuf, process::Command}; fn main() { + println!("cargo:rustc-link-search=/Users/as-cii/Library/Developer/Xcode/DerivedData/LiveKitObjC-ftgpxknhsgkrocbhhgjkyyvkgkbj/Build/Products/Debug"); + println!("cargo:rustc-link-lib=static=LiveKitObjC"); println!("cargo:rustc-link-lib=framework=ScreenCaptureKit"); println!("cargo:rustc-env=MACOSX_DEPLOYMENT_TARGET=12.3"); diff --git a/crates/capture/src/main.rs b/crates/capture/src/main.rs index 97a5557c66..e456b032ea 100644 --- a/crates/capture/src/main.rs +++ b/crates/capture/src/main.rs @@ -48,6 +48,8 @@ const NSUTF8StringEncoding: NSUInteger = 4; actions!(capture, [Quit]); fn main() { + class!(LKRoom); + SimpleLogger::init(LevelFilter::Info, Default::default()).expect("could not initialize logger"); gpui::App::new(()).unwrap().run(|cx| { @@ -97,60 +99,60 @@ impl ScreenCaptureView { let display_width: usize = msg_send![display, width]; let display_height: usize = msg_send![display, height]; let mut compression_buffer = BytesMut::new(); - let compression_session = CompressionSession::new( - display_width, - display_height, - kCMVideoCodecType_H264, - move |status, flags, sample_buffer| { - if status != 0 { - println!("error encoding frame, code: {}", status); - return; - } - let sample_buffer = CMSampleBuffer::wrap_under_get_rule(sample_buffer); + // let compression_session = CompressionSession::new( + // display_width, + // display_height, + // kCMVideoCodecType_H264, + // move |status, flags, sample_buffer| { + // if status != 0 { + // println!("error encoding frame, code: {}", status); + // return; + // } + // let sample_buffer = CMSampleBuffer::wrap_under_get_rule(sample_buffer); - let mut is_iframe = false; - let attachments = sample_buffer.attachments(); - if let Some(attachments) = attachments.first() { - is_iframe = attachments - .find(kCMSampleAttachmentKey_NotSync as CFStringRef) - .map_or(true, |not_sync| { - CFBooleanGetValue(*not_sync as CFBooleanRef) - }); - } + // let mut is_iframe = false; + // let attachments = sample_buffer.attachments(); + // if let Some(attachments) = attachments.first() { + // is_iframe = attachments + // .find(kCMSampleAttachmentKey_NotSync as CFStringRef) + // .map_or(true, |not_sync| { + // CFBooleanGetValue(*not_sync as CFBooleanRef) + // }); + // } - const START_CODE: [u8; 4] = [0x00, 0x00, 0x00, 0x01]; - if is_iframe { - let format_description = sample_buffer.format_description(); - for ix in 0..format_description.h264_parameter_set_count() { - let parameter_set = - format_description.h264_parameter_set_at_index(ix).unwrap(); - compression_buffer.extend_from_slice(&START_CODE); - compression_buffer.extend_from_slice(parameter_set); - let nal_unit = compression_buffer.split(); - } - } + // const START_CODE: [u8; 4] = [0x00, 0x00, 0x00, 0x01]; + // if is_iframe { + // let format_description = sample_buffer.format_description(); + // for ix in 0..format_description.h264_parameter_set_count() { + // let parameter_set = + // format_description.h264_parameter_set_at_index(ix).unwrap(); + // compression_buffer.extend_from_slice(&START_CODE); + // compression_buffer.extend_from_slice(parameter_set); + // let nal_unit = compression_buffer.split(); + // } + // } - let data = sample_buffer.data(); - let mut data = data.bytes(); + // let data = sample_buffer.data(); + // let mut data = data.bytes(); - const AVCC_HEADER_LENGTH: usize = 4; - while data.len() - AVCC_HEADER_LENGTH > 0 { - let nal_unit_len = match data.read_u32::() { - Ok(len) => len as usize, - Err(error) => { - log::error!("error decoding nal unit length: {}", error); - return; - } - }; - compression_buffer.extend_from_slice(&START_CODE); - compression_buffer.extend_from_slice(&data[..nal_unit_len as usize]); - data = &data[nal_unit_len..]; + // const AVCC_HEADER_LENGTH: usize = 4; + // while data.len() - AVCC_HEADER_LENGTH > 0 { + // let nal_unit_len = match data.read_u32::() { + // Ok(len) => len as usize, + // Err(error) => { + // log::error!("error decoding nal unit length: {}", error); + // return; + // } + // }; + // compression_buffer.extend_from_slice(&START_CODE); + // compression_buffer.extend_from_slice(&data[..nal_unit_len as usize]); + // data = &data[nal_unit_len..]; - let nal_unit = compression_buffer.split(); - } - }, - ) - .unwrap(); + // let nal_unit = compression_buffer.split(); + // } + // }, + // ) + // .unwrap(); let mut decl = ClassDecl::new("CaptureOutput", class!(NSObject)).unwrap(); decl.add_ivar::<*mut c_void>("callback"); @@ -182,9 +184,9 @@ impl ScreenCaptureView { let timing_info = buffer.sample_timing_info(0).unwrap(); let image_buffer = buffer.image_buffer(); - compression_session - .encode_frame(&image_buffer, timing_info) - .unwrap(); + // compression_session + // .encode_frame(&image_buffer, timing_info) + // .unwrap(); *surface_tx.lock().borrow_mut() = Some(image_buffer); }) as Box; let callback = Box::into_raw(Box::new(callback));