├── GStreamerSwiftUIDemo.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── raktimbora.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── GStreamerSwiftUIDemo ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── CameraView.swift ├── CameraViewController.swift ├── GStreamerBackend.h ├── GStreamerBackend.m ├── GStreamerBackendProtocol.swift ├── GStreamerSwiftUIDemo-Bridging-Header.h ├── GStreamerSwiftUIDemoApp.swift ├── MainView.swift ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json ├── gst_ios_init.h └── gst_ios_init.m ├── README.md ├── screenshot_1.png ├── screenshot_2.png └── screenshot_3.png /GStreamerSwiftUIDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 56; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 095960022A407D3A00C0C1BC /* GStreamerSwiftUIDemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 095960012A407D3A00C0C1BC /* GStreamerSwiftUIDemoApp.swift */; }; 11 | 095960042A407D3A00C0C1BC /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 095960032A407D3A00C0C1BC /* MainView.swift */; }; 12 | 095960062A407D3A00C0C1BC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 095960052A407D3A00C0C1BC /* Assets.xcassets */; }; 13 | 095960092A407D3A00C0C1BC /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 095960082A407D3A00C0C1BC /* Preview Assets.xcassets */; }; 14 | 095960112A407E6E00C0C1BC /* GStreamer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 095960102A407E6E00C0C1BC /* GStreamer.framework */; }; 15 | 095960132A407EDD00C0C1BC /* libiconv.2.4.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 095960122A407EDD00C0C1BC /* libiconv.2.4.0.tbd */; }; 16 | 095960152A407EE700C0C1BC /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 095960142A407EE700C0C1BC /* VideoToolbox.framework */; }; 17 | 095960172A407EF100C0C1BC /* libc++.1.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 095960162A407EF100C0C1BC /* libc++.1.tbd */; }; 18 | 0959601B2A4086D500C0C1BC /* gst_ios_init.m in Sources */ = {isa = PBXBuildFile; fileRef = 0959601A2A4086D500C0C1BC /* gst_ios_init.m */; }; 19 | 0959601F2A40D67000C0C1BC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0959601E2A40D67000C0C1BC /* AVFoundation.framework */; }; 20 | 095960212A40D69400C0C1BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 095960202A40D69400C0C1BC /* AudioToolbox.framework */; }; 21 | 095960232A40D6D300C0C1BC /* libcmph.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 095960222A40D6D300C0C1BC /* libcmph.tbd */; }; 22 | 095960262A40EAFF00C0C1BC /* GStreamerBackend.m in Sources */ = {isa = PBXBuildFile; fileRef = 095960252A40EAFF00C0C1BC /* GStreamerBackend.m */; }; 23 | 095960282A40EB7100C0C1BC /* GStreamerBackendProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 095960272A40EB7100C0C1BC /* GStreamerBackendProtocol.swift */; }; 24 | 0959602A2A40EB9400C0C1BC /* CameraView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 095960292A40EB9400C0C1BC /* CameraView.swift */; }; 25 | 0959602C2A40EBBE00C0C1BC /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0959602B2A40EBBE00C0C1BC /* CameraViewController.swift */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXFileReference section */ 29 | 09595FFE2A407D3A00C0C1BC /* GStreamerSwiftUIDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GStreamerSwiftUIDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | 095960012A407D3A00C0C1BC /* GStreamerSwiftUIDemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GStreamerSwiftUIDemoApp.swift; sourceTree = ""; }; 31 | 095960032A407D3A00C0C1BC /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; 32 | 095960052A407D3A00C0C1BC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 33 | 095960082A407D3A00C0C1BC /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 34 | 095960102A407E6E00C0C1BC /* GStreamer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GStreamer.framework; path = ../../Library/Developer/GStreamer/iPhone.sdk/GStreamer.framework; sourceTree = ""; }; 35 | 095960122A407EDD00C0C1BC /* libiconv.2.4.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.2.4.0.tbd; path = usr/lib/libiconv.2.4.0.tbd; sourceTree = SDKROOT; }; 36 | 095960142A407EE700C0C1BC /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; }; 37 | 095960162A407EF100C0C1BC /* libc++.1.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.1.tbd"; path = "usr/lib/libc++.1.tbd"; sourceTree = SDKROOT; }; 38 | 095960182A4086D400C0C1BC /* GStreamerSwiftUIDemo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "GStreamerSwiftUIDemo-Bridging-Header.h"; sourceTree = ""; }; 39 | 095960192A4086D500C0C1BC /* gst_ios_init.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gst_ios_init.h; sourceTree = ""; }; 40 | 0959601A2A4086D500C0C1BC /* gst_ios_init.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = gst_ios_init.m; sourceTree = ""; }; 41 | 0959601E2A40D67000C0C1BC /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 42 | 095960202A40D69400C0C1BC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 43 | 095960222A40D6D300C0C1BC /* libcmph.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcmph.tbd; path = usr/lib/libcmph.tbd; sourceTree = SDKROOT; }; 44 | 095960242A40EAFF00C0C1BC /* GStreamerBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GStreamerBackend.h; sourceTree = ""; }; 45 | 095960252A40EAFF00C0C1BC /* GStreamerBackend.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GStreamerBackend.m; sourceTree = ""; }; 46 | 095960272A40EB7100C0C1BC /* GStreamerBackendProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GStreamerBackendProtocol.swift; sourceTree = ""; }; 47 | 095960292A40EB9400C0C1BC /* CameraView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraView.swift; sourceTree = ""; }; 48 | 0959602B2A40EBBE00C0C1BC /* CameraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraViewController.swift; sourceTree = ""; }; 49 | /* End PBXFileReference section */ 50 | 51 | /* Begin PBXFrameworksBuildPhase section */ 52 | 09595FFB2A407D3A00C0C1BC /* Frameworks */ = { 53 | isa = PBXFrameworksBuildPhase; 54 | buildActionMask = 2147483647; 55 | files = ( 56 | 095960232A40D6D300C0C1BC /* libcmph.tbd in Frameworks */, 57 | 095960212A40D69400C0C1BC /* AudioToolbox.framework in Frameworks */, 58 | 0959601F2A40D67000C0C1BC /* AVFoundation.framework in Frameworks */, 59 | 095960172A407EF100C0C1BC /* libc++.1.tbd in Frameworks */, 60 | 095960152A407EE700C0C1BC /* VideoToolbox.framework in Frameworks */, 61 | 095960132A407EDD00C0C1BC /* libiconv.2.4.0.tbd in Frameworks */, 62 | 095960112A407E6E00C0C1BC /* GStreamer.framework in Frameworks */, 63 | ); 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | /* End PBXFrameworksBuildPhase section */ 67 | 68 | /* Begin PBXGroup section */ 69 | 09595FF52A407D3A00C0C1BC = { 70 | isa = PBXGroup; 71 | children = ( 72 | 095960002A407D3A00C0C1BC /* GStreamerSwiftUIDemo */, 73 | 09595FFF2A407D3A00C0C1BC /* Products */, 74 | 0959600F2A407E6E00C0C1BC /* Frameworks */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 09595FFF2A407D3A00C0C1BC /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 09595FFE2A407D3A00C0C1BC /* GStreamerSwiftUIDemo.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 095960002A407D3A00C0C1BC /* GStreamerSwiftUIDemo */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 095960012A407D3A00C0C1BC /* GStreamerSwiftUIDemoApp.swift */, 90 | 095960242A40EAFF00C0C1BC /* GStreamerBackend.h */, 91 | 095960252A40EAFF00C0C1BC /* GStreamerBackend.m */, 92 | 095960032A407D3A00C0C1BC /* MainView.swift */, 93 | 095960052A407D3A00C0C1BC /* Assets.xcassets */, 94 | 095960072A407D3A00C0C1BC /* Preview Content */, 95 | 095960192A4086D500C0C1BC /* gst_ios_init.h */, 96 | 0959601A2A4086D500C0C1BC /* gst_ios_init.m */, 97 | 095960182A4086D400C0C1BC /* GStreamerSwiftUIDemo-Bridging-Header.h */, 98 | 095960272A40EB7100C0C1BC /* GStreamerBackendProtocol.swift */, 99 | 095960292A40EB9400C0C1BC /* CameraView.swift */, 100 | 0959602B2A40EBBE00C0C1BC /* CameraViewController.swift */, 101 | ); 102 | path = GStreamerSwiftUIDemo; 103 | sourceTree = ""; 104 | }; 105 | 095960072A407D3A00C0C1BC /* Preview Content */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 095960082A407D3A00C0C1BC /* Preview Assets.xcassets */, 109 | ); 110 | path = "Preview Content"; 111 | sourceTree = ""; 112 | }; 113 | 0959600F2A407E6E00C0C1BC /* Frameworks */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | 095960222A40D6D300C0C1BC /* libcmph.tbd */, 117 | 095960202A40D69400C0C1BC /* AudioToolbox.framework */, 118 | 0959601E2A40D67000C0C1BC /* AVFoundation.framework */, 119 | 095960162A407EF100C0C1BC /* libc++.1.tbd */, 120 | 095960142A407EE700C0C1BC /* VideoToolbox.framework */, 121 | 095960122A407EDD00C0C1BC /* libiconv.2.4.0.tbd */, 122 | 095960102A407E6E00C0C1BC /* GStreamer.framework */, 123 | ); 124 | name = Frameworks; 125 | sourceTree = ""; 126 | }; 127 | /* End PBXGroup section */ 128 | 129 | /* Begin PBXNativeTarget section */ 130 | 09595FFD2A407D3A00C0C1BC /* GStreamerSwiftUIDemo */ = { 131 | isa = PBXNativeTarget; 132 | buildConfigurationList = 0959600C2A407D3A00C0C1BC /* Build configuration list for PBXNativeTarget "GStreamerSwiftUIDemo" */; 133 | buildPhases = ( 134 | 09595FFA2A407D3A00C0C1BC /* Sources */, 135 | 09595FFB2A407D3A00C0C1BC /* Frameworks */, 136 | 09595FFC2A407D3A00C0C1BC /* Resources */, 137 | ); 138 | buildRules = ( 139 | ); 140 | dependencies = ( 141 | ); 142 | name = GStreamerSwiftUIDemo; 143 | productName = GStreamerSwiftUIDemo; 144 | productReference = 09595FFE2A407D3A00C0C1BC /* GStreamerSwiftUIDemo.app */; 145 | productType = "com.apple.product-type.application"; 146 | }; 147 | /* End PBXNativeTarget section */ 148 | 149 | /* Begin PBXProject section */ 150 | 09595FF62A407D3A00C0C1BC /* Project object */ = { 151 | isa = PBXProject; 152 | attributes = { 153 | BuildIndependentTargetsInParallel = 1; 154 | LastSwiftUpdateCheck = 1430; 155 | LastUpgradeCheck = 1430; 156 | TargetAttributes = { 157 | 09595FFD2A407D3A00C0C1BC = { 158 | CreatedOnToolsVersion = 14.3.1; 159 | LastSwiftMigration = 1430; 160 | }; 161 | }; 162 | }; 163 | buildConfigurationList = 09595FF92A407D3A00C0C1BC /* Build configuration list for PBXProject "GStreamerSwiftUIDemo" */; 164 | compatibilityVersion = "Xcode 14.0"; 165 | developmentRegion = en; 166 | hasScannedForEncodings = 0; 167 | knownRegions = ( 168 | en, 169 | Base, 170 | ); 171 | mainGroup = 09595FF52A407D3A00C0C1BC; 172 | productRefGroup = 09595FFF2A407D3A00C0C1BC /* Products */; 173 | projectDirPath = ""; 174 | projectRoot = ""; 175 | targets = ( 176 | 09595FFD2A407D3A00C0C1BC /* GStreamerSwiftUIDemo */, 177 | ); 178 | }; 179 | /* End PBXProject section */ 180 | 181 | /* Begin PBXResourcesBuildPhase section */ 182 | 09595FFC2A407D3A00C0C1BC /* Resources */ = { 183 | isa = PBXResourcesBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | 095960092A407D3A00C0C1BC /* Preview Assets.xcassets in Resources */, 187 | 095960062A407D3A00C0C1BC /* Assets.xcassets in Resources */, 188 | ); 189 | runOnlyForDeploymentPostprocessing = 0; 190 | }; 191 | /* End PBXResourcesBuildPhase section */ 192 | 193 | /* Begin PBXSourcesBuildPhase section */ 194 | 09595FFA2A407D3A00C0C1BC /* Sources */ = { 195 | isa = PBXSourcesBuildPhase; 196 | buildActionMask = 2147483647; 197 | files = ( 198 | 0959601B2A4086D500C0C1BC /* gst_ios_init.m in Sources */, 199 | 095960262A40EAFF00C0C1BC /* GStreamerBackend.m in Sources */, 200 | 095960042A407D3A00C0C1BC /* MainView.swift in Sources */, 201 | 0959602A2A40EB9400C0C1BC /* CameraView.swift in Sources */, 202 | 0959602C2A40EBBE00C0C1BC /* CameraViewController.swift in Sources */, 203 | 095960282A40EB7100C0C1BC /* GStreamerBackendProtocol.swift in Sources */, 204 | 095960022A407D3A00C0C1BC /* GStreamerSwiftUIDemoApp.swift in Sources */, 205 | ); 206 | runOnlyForDeploymentPostprocessing = 0; 207 | }; 208 | /* End PBXSourcesBuildPhase section */ 209 | 210 | /* Begin XCBuildConfiguration section */ 211 | 0959600A2A407D3A00C0C1BC /* Debug */ = { 212 | isa = XCBuildConfiguration; 213 | buildSettings = { 214 | ALWAYS_SEARCH_USER_PATHS = NO; 215 | CLANG_ANALYZER_NONNULL = YES; 216 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 217 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 218 | CLANG_ENABLE_MODULES = YES; 219 | CLANG_ENABLE_OBJC_ARC = YES; 220 | CLANG_ENABLE_OBJC_WEAK = YES; 221 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 222 | CLANG_WARN_BOOL_CONVERSION = YES; 223 | CLANG_WARN_COMMA = YES; 224 | CLANG_WARN_CONSTANT_CONVERSION = YES; 225 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 226 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 227 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 228 | CLANG_WARN_EMPTY_BODY = YES; 229 | CLANG_WARN_ENUM_CONVERSION = YES; 230 | CLANG_WARN_INFINITE_RECURSION = YES; 231 | CLANG_WARN_INT_CONVERSION = YES; 232 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 233 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 234 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 235 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 236 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 237 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 238 | CLANG_WARN_STRICT_PROTOTYPES = YES; 239 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 240 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 241 | CLANG_WARN_UNREACHABLE_CODE = YES; 242 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 243 | COPY_PHASE_STRIP = NO; 244 | DEBUG_INFORMATION_FORMAT = dwarf; 245 | ENABLE_STRICT_OBJC_MSGSEND = YES; 246 | ENABLE_TESTABILITY = YES; 247 | EXCLUDED_ARCHS = arm64; 248 | FRAMEWORK_SEARCH_PATHS = /Users/raktimbora/Library/Developer/GStreamer/iPhone.sdk/; 249 | GCC_C_LANGUAGE_STANDARD = gnu11; 250 | GCC_DYNAMIC_NO_PIC = NO; 251 | GCC_NO_COMMON_BLOCKS = YES; 252 | GCC_OPTIMIZATION_LEVEL = 0; 253 | GCC_PREPROCESSOR_DEFINITIONS = ( 254 | "DEBUG=1", 255 | "$(inherited)", 256 | ); 257 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 258 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 259 | GCC_WARN_UNDECLARED_SELECTOR = YES; 260 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 261 | GCC_WARN_UNUSED_FUNCTION = YES; 262 | GCC_WARN_UNUSED_VARIABLE = YES; 263 | HEADER_SEARCH_PATHS = ""; 264 | IPHONEOS_DEPLOYMENT_TARGET = 16.4; 265 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 266 | MTL_FAST_MATH = YES; 267 | ONLY_ACTIVE_ARCH = YES; 268 | SDKROOT = iphoneos; 269 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 270 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 271 | }; 272 | name = Debug; 273 | }; 274 | 0959600B2A407D3A00C0C1BC /* Release */ = { 275 | isa = XCBuildConfiguration; 276 | buildSettings = { 277 | ALWAYS_SEARCH_USER_PATHS = NO; 278 | CLANG_ANALYZER_NONNULL = YES; 279 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 280 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 281 | CLANG_ENABLE_MODULES = YES; 282 | CLANG_ENABLE_OBJC_ARC = YES; 283 | CLANG_ENABLE_OBJC_WEAK = YES; 284 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 285 | CLANG_WARN_BOOL_CONVERSION = YES; 286 | CLANG_WARN_COMMA = YES; 287 | CLANG_WARN_CONSTANT_CONVERSION = YES; 288 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 289 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 290 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 291 | CLANG_WARN_EMPTY_BODY = YES; 292 | CLANG_WARN_ENUM_CONVERSION = YES; 293 | CLANG_WARN_INFINITE_RECURSION = YES; 294 | CLANG_WARN_INT_CONVERSION = YES; 295 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 296 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 297 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 298 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 299 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 300 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 301 | CLANG_WARN_STRICT_PROTOTYPES = YES; 302 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 303 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 304 | CLANG_WARN_UNREACHABLE_CODE = YES; 305 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 306 | COPY_PHASE_STRIP = NO; 307 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 308 | ENABLE_NS_ASSERTIONS = NO; 309 | ENABLE_STRICT_OBJC_MSGSEND = YES; 310 | EXCLUDED_ARCHS = arm64; 311 | FRAMEWORK_SEARCH_PATHS = /Users/raktimbora/Library/Developer/GStreamer/iPhone.sdk/; 312 | GCC_C_LANGUAGE_STANDARD = gnu11; 313 | GCC_NO_COMMON_BLOCKS = YES; 314 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 315 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 316 | GCC_WARN_UNDECLARED_SELECTOR = YES; 317 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 318 | GCC_WARN_UNUSED_FUNCTION = YES; 319 | GCC_WARN_UNUSED_VARIABLE = YES; 320 | HEADER_SEARCH_PATHS = ""; 321 | IPHONEOS_DEPLOYMENT_TARGET = 16.4; 322 | MTL_ENABLE_DEBUG_INFO = NO; 323 | MTL_FAST_MATH = YES; 324 | SDKROOT = iphoneos; 325 | SWIFT_COMPILATION_MODE = wholemodule; 326 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 327 | VALIDATE_PRODUCT = YES; 328 | }; 329 | name = Release; 330 | }; 331 | 0959600D2A407D3A00C0C1BC /* Debug */ = { 332 | isa = XCBuildConfiguration; 333 | buildSettings = { 334 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 335 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 336 | CLANG_ENABLE_MODULES = YES; 337 | CLANG_WARN_DOCUMENTATION_COMMENTS = NO; 338 | CODE_SIGN_STYLE = Automatic; 339 | CURRENT_PROJECT_VERSION = 1; 340 | DEVELOPMENT_ASSET_PATHS = "\"GStreamerSwiftUIDemo/Preview Content\""; 341 | DEVELOPMENT_TEAM = 58N3QYAX7K; 342 | ENABLE_PREVIEWS = YES; 343 | FRAMEWORK_SEARCH_PATHS = "${HOME}/Library/Developer/GStreamer/iPhone.sdk/"; 344 | GENERATE_INFOPLIST_FILE = YES; 345 | HEADER_SEARCH_PATHS = "/Users/raktimbora/Library/Developer/GStreamer/iPhone.sdk/GStreamer.framework/Headers/**"; 346 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 347 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 348 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 349 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 350 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 351 | IPHONEOS_DEPLOYMENT_TARGET = 16.3; 352 | LD_RUNPATH_SEARCH_PATHS = ( 353 | "$(inherited)", 354 | "@executable_path/Frameworks", 355 | ); 356 | MARKETING_VERSION = 1.0; 357 | OTHER_LDFLAGS = ( 358 | "-lresolv", 359 | "-framework", 360 | CoreFoundation, 361 | "-framework", 362 | Foundation, 363 | "-framework", 364 | AVFoundation, 365 | "-framework", 366 | CoreMedia, 367 | "-framework", 368 | CoreVideo, 369 | "-framework", 370 | CoreAudio, 371 | "-framework", 372 | AudioToolbox, 373 | "-framework", 374 | OpenGLES, 375 | "-framework", 376 | AssetsLibrary, 377 | "-framework", 378 | QuartzCore, 379 | "-framework", 380 | AssetsLibrary, 381 | "-framework", 382 | Metal, 383 | "-framework", 384 | IOSurface, 385 | "$(inherited)", 386 | ); 387 | PRODUCT_BUNDLE_IDENTIFIER = com.itonimanalytics.iosapps.GStreamerSwiftUIDemo; 388 | PRODUCT_NAME = "$(TARGET_NAME)"; 389 | SWIFT_EMIT_LOC_STRINGS = YES; 390 | SWIFT_OBJC_BRIDGING_HEADER = "GStreamerSwiftUIDemo/GStreamerSwiftUIDemo-Bridging-Header.h"; 391 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 392 | SWIFT_VERSION = 5.0; 393 | TARGETED_DEVICE_FAMILY = "1,2"; 394 | }; 395 | name = Debug; 396 | }; 397 | 0959600E2A407D3A00C0C1BC /* Release */ = { 398 | isa = XCBuildConfiguration; 399 | buildSettings = { 400 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 401 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 402 | CLANG_ENABLE_MODULES = YES; 403 | CLANG_WARN_DOCUMENTATION_COMMENTS = NO; 404 | CODE_SIGN_STYLE = Automatic; 405 | CURRENT_PROJECT_VERSION = 1; 406 | DEVELOPMENT_ASSET_PATHS = "\"GStreamerSwiftUIDemo/Preview Content\""; 407 | DEVELOPMENT_TEAM = 58N3QYAX7K; 408 | ENABLE_PREVIEWS = YES; 409 | FRAMEWORK_SEARCH_PATHS = "${HOME}/Library/Developer/GStreamer/iPhone.sdk/"; 410 | GENERATE_INFOPLIST_FILE = YES; 411 | HEADER_SEARCH_PATHS = "/Users/raktimbora/Library/Developer/GStreamer/iPhone.sdk/GStreamer.framework/Headers/**"; 412 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 413 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 414 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 415 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 416 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 417 | IPHONEOS_DEPLOYMENT_TARGET = 16.3; 418 | LD_RUNPATH_SEARCH_PATHS = ( 419 | "$(inherited)", 420 | "@executable_path/Frameworks", 421 | ); 422 | MARKETING_VERSION = 1.0; 423 | OTHER_LDFLAGS = ( 424 | "-lresolv", 425 | "-framework", 426 | CoreFoundation, 427 | "-framework", 428 | Foundation, 429 | "-framework", 430 | AVFoundation, 431 | "-framework", 432 | CoreMedia, 433 | "-framework", 434 | CoreVideo, 435 | "-framework", 436 | CoreAudio, 437 | "-framework", 438 | AudioToolbox, 439 | "-framework", 440 | OpenGLES, 441 | "-framework", 442 | AssetsLibrary, 443 | "-framework", 444 | QuartzCore, 445 | "-framework", 446 | AssetsLibrary, 447 | "-framework", 448 | Metal, 449 | "-framework", 450 | IOSurface, 451 | "$(inherited)", 452 | ); 453 | PRODUCT_BUNDLE_IDENTIFIER = com.itonimanalytics.iosapps.GStreamerSwiftUIDemo; 454 | PRODUCT_NAME = "$(TARGET_NAME)"; 455 | SWIFT_EMIT_LOC_STRINGS = YES; 456 | SWIFT_OBJC_BRIDGING_HEADER = "GStreamerSwiftUIDemo/GStreamerSwiftUIDemo-Bridging-Header.h"; 457 | SWIFT_VERSION = 5.0; 458 | TARGETED_DEVICE_FAMILY = "1,2"; 459 | }; 460 | name = Release; 461 | }; 462 | /* End XCBuildConfiguration section */ 463 | 464 | /* Begin XCConfigurationList section */ 465 | 09595FF92A407D3A00C0C1BC /* Build configuration list for PBXProject "GStreamerSwiftUIDemo" */ = { 466 | isa = XCConfigurationList; 467 | buildConfigurations = ( 468 | 0959600A2A407D3A00C0C1BC /* Debug */, 469 | 0959600B2A407D3A00C0C1BC /* Release */, 470 | ); 471 | defaultConfigurationIsVisible = 0; 472 | defaultConfigurationName = Release; 473 | }; 474 | 0959600C2A407D3A00C0C1BC /* Build configuration list for PBXNativeTarget "GStreamerSwiftUIDemo" */ = { 475 | isa = XCConfigurationList; 476 | buildConfigurations = ( 477 | 0959600D2A407D3A00C0C1BC /* Debug */, 478 | 0959600E2A407D3A00C0C1BC /* Release */, 479 | ); 480 | defaultConfigurationIsVisible = 0; 481 | defaultConfigurationName = Release; 482 | }; 483 | /* End XCConfigurationList section */ 484 | }; 485 | rootObject = 09595FF62A407D3A00C0C1BC /* Project object */; 486 | } 487 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo.xcodeproj/xcuserdata/raktimbora.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | GStreamerSwiftUIDemo.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/CameraView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CameraView.swift 3 | // GStreamerSwiftUIDemo 4 | // 5 | // Created by Raktim Bora on 14.06.23. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct CameraView: UIViewRepresentable { 11 | 12 | var placeholderView:UIView 13 | 14 | init(placeholderView: UIView) { 15 | self.placeholderView = placeholderView 16 | } 17 | 18 | func makeUIView(context: Context) -> some UIView { 19 | return placeholderView 20 | } 21 | 22 | func updateUIView(_ uiView: UIViewType, context: Context) { 23 | 24 | } 25 | 26 | } 27 | 28 | //struct CameraView_Previews: PreviewProvider { 29 | // static var previews: some View { 30 | // CameraView() 31 | // } 32 | //} 33 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/CameraViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CameraViewController.swift 3 | // GStreamerSwiftUIDemo 4 | // 5 | // Created by Raktim Bora on 19.06.23. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | import Dispatch 11 | import SwiftUI 12 | 13 | 14 | @objc class CameraViewController: NSObject, GStreamerBackendProtocol, ObservableObject{ 15 | 16 | var gstBackend:GStreamerBackend? 17 | var camUIView:UIView 18 | @Published var gStreamerInitializationStatus:Bool = false 19 | @Published var messageFromGstBackend:String? 20 | 21 | init(camUIView:UIView) { 22 | self.camUIView = camUIView 23 | } 24 | 25 | func initBackend(){ 26 | self.gstBackend = GStreamerBackend(self, videoView: self.camUIView) 27 | let queue = DispatchQueue(label: "run_app_q") 28 | queue.async{ 29 | self.gstBackend?.run_app_pipeline_threaded() 30 | } 31 | return 32 | } 33 | 34 | func play(){ 35 | if gstBackend == nil{ 36 | self.initBackend() 37 | } 38 | self.gstBackend!.play() 39 | } 40 | 41 | func pause(){ 42 | self.gstBackend!.pause() 43 | } 44 | 45 | @objc func gStreamerInitialized() { 46 | self.gStreamerInitializationStatus = true 47 | } 48 | 49 | @objc func gstreamerSetUIMessageWithMessage(message: String) { 50 | self.messageFromGstBackend = message 51 | } 52 | 53 | 54 | } 55 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/GStreamerBackend.h: -------------------------------------------------------------------------------- 1 | // 2 | // GStreamerBackend.h 3 | // GStreamerSwiftUIDemo 4 | // 5 | // Created by Raktim Bora on 13.06.23. 6 | // 7 | 8 | #ifndef GStreamerBackend_h 9 | #define GStreamerBackend_h 10 | 11 | #include 12 | #include 13 | #import 14 | 15 | @interface GStreamerBackend : NSObject 16 | 17 | -(id) init:(id) uiDelegate videoView:(UIView*) video_view; 18 | 19 | -(void) play; 20 | 21 | -(void) pause; 22 | 23 | -(void) run_app_pipeline_threaded; 24 | @end 25 | 26 | #endif /* GStreamerBackend_h */ 27 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/GStreamerBackend.m: -------------------------------------------------------------------------------- 1 | // 2 | // GStreamerBackend.c 3 | // GStreamerSwiftUIDemo 4 | // 5 | // Created by Raktim Bora on 19.06.23. 6 | // 7 | 8 | #include 9 | #include "GStreamerBackend.h" 10 | # include "gst_ios_init.h" 11 | #include 12 | 13 | #include 14 | #include 15 | #import "GStreamerSwiftUIDemo-Swift.h" 16 | 17 | GST_DEBUG_CATEGORY_STATIC (debug_category); 18 | #define GST_CAT_DEFAULT debug_category 19 | 20 | @interface GStreamerBackend() 21 | -(void)setUIMessage:(gchar*) message; 22 | -(void)run_app_pipeline; 23 | -(void)check_initialization_complete; 24 | @end 25 | 26 | @implementation GStreamerBackend { 27 | id ui_delegate; /* Class that we use to interact with the user interface */ 28 | GstElement *pipeline; /* The running pipeline */ 29 | GstElement *video_sink;/* The video sink element which receives XOverlay commands */ 30 | GMainContext *context; /* GLib context used to run the main loop */ 31 | GMainLoop *main_loop; /* GLib main loop */ 32 | gboolean initialized; /* To avoid informing the UI multiple times about the initialization */ 33 | GstBus *bus; 34 | UIView *ui_video_view; /* UIView that holds the video */ 35 | GstMessage* eos_msg; 36 | } 37 | 38 | /* 39 | * Interface methods 40 | */ 41 | 42 | -(id) init:(id) uiDelegate videoView:(UIView *)video_view 43 | { 44 | if (self = [super init]) 45 | { 46 | self->ui_delegate = uiDelegate; 47 | self->ui_video_view = video_view; 48 | 49 | GST_DEBUG_CATEGORY_INIT (debug_category, "GStreamerSwiftUIDemo", 0, "GStreamerSwiftUIDemo-Backend"); 50 | gst_debug_set_threshold_for_name("GStreamerSwiftUIDemo", GST_LEVEL_INFO); 51 | } 52 | 53 | return self; 54 | } 55 | 56 | -(void) run_app_pipeline_threaded 57 | { 58 | [self run_app_pipeline]; 59 | return; 60 | } 61 | 62 | 63 | 64 | -(void) play 65 | { 66 | if(gst_element_set_state(pipeline, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) { 67 | [self setUIMessage:"Failed to set pipeline to playing"]; 68 | } 69 | } 70 | 71 | 72 | -(void) pause 73 | { 74 | if(gst_element_set_state(pipeline, GST_STATE_PAUSED) == GST_STATE_CHANGE_FAILURE) { 75 | [self setUIMessage:"Failed to set pipeline to paused"]; 76 | } 77 | } 78 | 79 | -(void) destroy 80 | { 81 | if(gst_element_set_state(pipeline, GST_STATE_PAUSED) == GST_STATE_CHANGE_FAILURE) { 82 | [self setUIMessage:"Failed to set pipeline to READY"]; 83 | } 84 | eos_msg = gst_message_new_eos(GST_OBJECT(pipeline)); 85 | gst_element_post_message (pipeline, eos_msg); 86 | } 87 | 88 | 89 | /* Change the message on the UI through the UI delegate */ 90 | -(void)setUIMessage:(gchar*) message 91 | { 92 | NSString *messagString = [NSString stringWithUTF8String:message]; 93 | if(ui_delegate && [ui_delegate respondsToSelector:@selector(gstreamerSetUIMessageWithMessageWithMessage:)]) 94 | { 95 | [ui_delegate gstreamerSetUIMessageWithMessageWithMessage:messagString]; 96 | } 97 | } 98 | 99 | static void eos_cb(GstBus *bus, GstMessage *msg, GStreamerBackend *self){ 100 | printf("\neos called\n"); 101 | gst_element_set_state (self->pipeline, GST_STATE_NULL); 102 | g_main_loop_quit(self->main_loop); 103 | } 104 | 105 | /* Retrieve errors from the bus and show them on the UI */ 106 | static void error_cb (GstBus *bus, GstMessage *msg, GStreamerBackend *self) 107 | { 108 | GError *err; 109 | gchar *debug_info; 110 | gchar *message_string; 111 | 112 | gst_message_parse_error (msg, &err, &debug_info); 113 | message_string = g_strdup_printf ("Error received from element %s: %s", GST_OBJECT_NAME (msg->src), err->message); 114 | printf("Some error occured in from element %s: %s", GST_OBJECT_NAME (msg->src), err->message); 115 | g_clear_error (&err); 116 | g_free (debug_info); 117 | [self setUIMessage:message_string]; 118 | g_free (message_string); 119 | gst_element_set_state (self->pipeline, GST_STATE_NULL); 120 | } 121 | 122 | /* Notify UI about pipeline state changes */ 123 | static void state_changed_cb (GstBus *bus, GstMessage *msg, GStreamerBackend *self) 124 | { 125 | GstState old_state, new_state, pending_state; 126 | gst_message_parse_state_changed (msg, &old_state, &new_state, &pending_state); 127 | /* Only pay attention to messages coming from the pipeline, not its children */ 128 | if (GST_MESSAGE_SRC (msg) == GST_OBJECT (self->pipeline)) { 129 | gchar *message = g_strdup_printf("State changed from %s to %s", gst_element_state_get_name(old_state), gst_element_state_get_name(new_state)); 130 | [self setUIMessage:message]; 131 | g_free (message); 132 | } 133 | } 134 | 135 | /* Check if all conditions are met to report GStreamer as initialized. 136 | * These conditions will change depending on the application */ 137 | -(void) check_initialization_complete 138 | { 139 | if (!initialized && main_loop) { 140 | GST_DEBUG ("Initialization complete, notifying application."); 141 | if (ui_delegate && [ui_delegate respondsToSelector:@selector(gStreamerInitialized)]) 142 | { 143 | [ui_delegate gStreamerInitialized]; 144 | } 145 | initialized = TRUE; 146 | } 147 | } 148 | 149 | /* Main method */ 150 | -(void) run_app_pipeline 151 | { 152 | GSource *bus_source; 153 | GError *error = NULL; 154 | 155 | GST_DEBUG ("Creating pipeline"); 156 | 157 | /* Create our own GLib Main Context and make it the default one */ 158 | context = g_main_context_new (); 159 | g_main_context_push_thread_default(context); 160 | 161 | /* Build pipeline */ 162 | /* Change the RTSP URL to your desired URL below */ 163 | pipeline = gst_parse_launch("playbin uri=rtsp://username:password@ip_address/additional_stream_url", &error); 164 | 165 | 166 | if (error && !GST_IS_ELEMENT(pipeline)) { 167 | gchar *message = g_strdup_printf("Unable to build pipeline: %s", error->message); 168 | g_clear_error (&error); 169 | [self setUIMessage:message]; 170 | g_free (message); 171 | return; 172 | } 173 | 174 | /* Set the pipeline to READY, so it can already accept a window handle */ 175 | gst_element_set_state(pipeline, GST_STATE_READY); 176 | 177 | video_sink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); 178 | if (!video_sink) { 179 | GST_ERROR ("Could not retrieve video sink"); 180 | return; 181 | } 182 | gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(video_sink), (guintptr) (id) ui_video_view); 183 | 184 | /* Signals to watch */ 185 | bus = gst_element_get_bus (pipeline); 186 | bus_source = gst_bus_create_watch (bus); 187 | g_source_set_callback (bus_source, (GSourceFunc) gst_bus_async_signal_func, NULL, NULL); 188 | g_source_attach (bus_source, context); 189 | g_source_unref (bus_source); 190 | g_signal_connect (G_OBJECT (bus), "message::error", (GCallback)error_cb, (__bridge void *)self); 191 | g_signal_connect (G_OBJECT (bus), "message::eos", (GCallback)eos_cb, (__bridge void *)self); 192 | g_signal_connect (G_OBJECT (bus), "message::state-changed", (GCallback)state_changed_cb, (__bridge void *)self); 193 | gst_object_unref (bus); 194 | 195 | /* Create a GLib Main Loop and set it to run */ 196 | GST_DEBUG ("Entering main loop..."); 197 | printf("\nEntering main loop..\n"); 198 | main_loop = g_main_loop_new (context, FALSE); 199 | //sleep(5); 200 | [self check_initialization_complete]; 201 | g_main_loop_run (main_loop); 202 | GST_DEBUG ("Exited main loop"); 203 | g_main_loop_unref (main_loop); 204 | main_loop = NULL; 205 | 206 | /* Free resources */ 207 | g_main_context_pop_thread_default(context); 208 | g_main_context_unref (context); 209 | gst_element_set_state (pipeline, GST_STATE_NULL); 210 | gst_object_unref (pipeline); 211 | return; 212 | } 213 | 214 | @end 215 | 216 | 217 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/GStreamerBackendProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GStreamerBackendProtocol.swift 3 | // GStreamerSwiftUIDemo 4 | // 5 | // Created by Raktim Bora on 19.06.23. 6 | // 7 | 8 | import Foundation 9 | 10 | 11 | protocol GStreamerBackendProtocol{ 12 | func gStreamerInitialized() 13 | func gstreamerSetUIMessageWithMessage(message: String) 14 | } 15 | 16 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/GStreamerSwiftUIDemo-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "GStreamerBackend.h" 6 | #import "gst_ios_init.h" 7 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/GStreamerSwiftUIDemoApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GStreamerSwiftUIDemoApp.swift 3 | // GStreamerSwiftUIDemo 4 | // 5 | // Created by Raktim Bora on 19.06.23. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct GStreamerSwiftUIDemoApp: App { 12 | init(){ 13 | gst_ios_init() 14 | } 15 | var body: some Scene { 16 | WindowGroup { 17 | MainView() 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/MainView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // GStreamerSwiftUIDemo 4 | // 5 | // Created by Raktim Bora on 14.06.23. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct MainView: View { 11 | 12 | @ObservedObject var camViewController:CameraViewController 13 | 14 | init() { 15 | self.camViewController = CameraViewController(camUIView: UIView()) 16 | } 17 | 18 | func play_stream(){ 19 | self.camViewController.play() 20 | } 21 | 22 | 23 | func pause_stream(){ 24 | self.camViewController.pause() 25 | } 26 | 27 | var body: some View { 28 | GeometryReader { geometry in 29 | VStack { 30 | CameraContainerView(camContainerViewController: self.camViewController).padding(.all, 20) 31 | Spacer() 32 | GStreamerStatusMessageView(camContainerViewController: self.camViewController) 33 | HStack(spacing: 10){ 34 | Button{ 35 | play_stream() 36 | }label: { 37 | Image(systemName: "play") 38 | }.padding() 39 | Button{ 40 | pause_stream() 41 | }label: { 42 | Image(systemName: "pause") 43 | }.padding() 44 | }.frame(height: CGFloat(geometry.size.height * 0.10)) 45 | .disabled(!self.camViewController.gStreamerInitializationStatus) 46 | }.position(x: geometry.size.width / 2, y: geometry.size.height / 2) 47 | } 48 | 49 | 50 | } 51 | 52 | 53 | } 54 | 55 | 56 | struct CameraContainerView:View{ 57 | @ObservedObject var camContainerViewController:CameraViewController 58 | var body: some View{ 59 | Group{ 60 | if camContainerViewController.gstBackend != nil{ 61 | CameraView(placeholderView: camContainerViewController.camUIView) 62 | 63 | } else { 64 | let _ = camContainerViewController.initBackend() 65 | Text("Initializing GStreamer, please wait...").frame(alignment: .center) 66 | } 67 | } 68 | 69 | } 70 | } 71 | 72 | 73 | struct GStreamerStatusMessageView: View{ 74 | @ObservedObject var camContainerViewController:CameraViewController 75 | var body: some View{ 76 | if self.camContainerViewController.gStreamerInitializationStatus, let msg = self.camContainerViewController.messageFromGstBackend{ 77 | Text(msg) 78 | }else{ 79 | EmptyView() 80 | } 81 | 82 | } 83 | } 84 | 85 | 86 | //struct MainView_Previews: PreviewProvider { 87 | // static var previews: some View { 88 | // MainView() 89 | // } 90 | //} 91 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/gst_ios_init.h: -------------------------------------------------------------------------------- 1 | #ifndef __GST_IOS_INIT_H__ 2 | #define __GST_IOS_INIT_H__ 3 | 4 | #include 5 | 6 | G_BEGIN_DECLS 7 | 8 | #define GST_G_IO_MODULE_DECLARE(name) \ 9 | extern void G_PASTE(g_io_, G_PASTE(name, _load)) (gpointer module) 10 | 11 | #define GST_G_IO_MODULE_LOAD(name) \ 12 | G_PASTE(g_io_, G_PASTE(name, _load)) (NULL) 13 | 14 | /* Uncomment each line to enable the plugin categories that your application needs. 15 | * You can also enable individual plugins. See gst_ios_init.c to see their names 16 | */ 17 | 18 | #define GST_IOS_PLUGINS_CORE 19 | #define GST_IOS_PLUGINS_CODECS 20 | #define GST_IOS_PLUGINS_ENCODING 21 | #define GST_IOS_PLUGINS_NET 22 | #define GST_IOS_PLUGINS_PLAYBACK 23 | #define GST_IOS_PLUGINS_VIS 24 | #define GST_IOS_PLUGINS_SYS 25 | #define GST_IOS_PLUGINS_EFFECTS 26 | #define GST_IOS_PLUGINS_CAPTURE 27 | #define GST_IOS_PLUGINS_CODECS_GPL 28 | #define GST_IOS_PLUGINS_CODECS_RESTRICTED 29 | #define GST_IOS_PLUGINS_NET_RESTRICTED 30 | #define GST_IOS_PLUGINS_GES 31 | 32 | 33 | //#define GST_IOS_GIO_MODULE_GNUTLS 34 | 35 | void gst_ios_init (void); 36 | 37 | G_END_DECLS 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /GStreamerSwiftUIDemo/gst_ios_init.m: -------------------------------------------------------------------------------- 1 | #include "gst_ios_init.h" 2 | 3 | #include 4 | #include 5 | 6 | #if defined(GST_IOS_PLUGIN_COREELEMENTS) || defined(GST_IOS_PLUGINS_CORE) 7 | GST_PLUGIN_STATIC_DECLARE(coreelements); 8 | #endif 9 | #if defined(GST_IOS_PLUGIN_CORETRACERS) || defined(GST_IOS_PLUGINS_CORE) 10 | GST_PLUGIN_STATIC_DECLARE(coretracers); 11 | #endif 12 | #if defined(GST_IOS_PLUGIN_ADDER) || defined(GST_IOS_PLUGINS_CORE) 13 | GST_PLUGIN_STATIC_DECLARE(adder); 14 | #endif 15 | #if defined(GST_IOS_PLUGIN_APP) || defined(GST_IOS_PLUGINS_CORE) 16 | GST_PLUGIN_STATIC_DECLARE(app); 17 | #endif 18 | #if defined(GST_IOS_PLUGIN_AUDIOCONVERT) || defined(GST_IOS_PLUGINS_CORE) 19 | GST_PLUGIN_STATIC_DECLARE(audioconvert); 20 | #endif 21 | #if defined(GST_IOS_PLUGIN_AUDIOMIXER) || defined(GST_IOS_PLUGINS_CORE) 22 | GST_PLUGIN_STATIC_DECLARE(audiomixer); 23 | #endif 24 | #if defined(GST_IOS_PLUGIN_AUDIORATE) || defined(GST_IOS_PLUGINS_CORE) 25 | GST_PLUGIN_STATIC_DECLARE(audiorate); 26 | #endif 27 | #if defined(GST_IOS_PLUGIN_AUDIORESAMPLE) || defined(GST_IOS_PLUGINS_CORE) 28 | GST_PLUGIN_STATIC_DECLARE(audioresample); 29 | #endif 30 | #if defined(GST_IOS_PLUGIN_AUDIOTESTSRC) || defined(GST_IOS_PLUGINS_CORE) 31 | GST_PLUGIN_STATIC_DECLARE(audiotestsrc); 32 | #endif 33 | #if defined(GST_IOS_PLUGIN_COMPOSITOR) || defined(GST_IOS_PLUGINS_CORE) 34 | GST_PLUGIN_STATIC_DECLARE(compositor); 35 | #endif 36 | #if defined(GST_IOS_PLUGIN_GIO) || defined(GST_IOS_PLUGINS_CORE) 37 | GST_PLUGIN_STATIC_DECLARE(gio); 38 | #endif 39 | #if defined(GST_IOS_PLUGIN_OVERLAYCOMPOSITION) || defined(GST_IOS_PLUGINS_CORE) 40 | GST_PLUGIN_STATIC_DECLARE(overlaycomposition); 41 | #endif 42 | #if defined(GST_IOS_PLUGIN_PANGO) || defined(GST_IOS_PLUGINS_CORE) 43 | GST_PLUGIN_STATIC_DECLARE(pango); 44 | #endif 45 | #if defined(GST_IOS_PLUGIN_RAWPARSE) || defined(GST_IOS_PLUGINS_CORE) 46 | GST_PLUGIN_STATIC_DECLARE(rawparse); 47 | #endif 48 | #if defined(GST_IOS_PLUGIN_TYPEFINDFUNCTIONS) || defined(GST_IOS_PLUGINS_CORE) 49 | GST_PLUGIN_STATIC_DECLARE(typefindfunctions); 50 | #endif 51 | #if defined(GST_IOS_PLUGIN_VIDEOCONVERTSCALE) || defined(GST_IOS_PLUGINS_CORE) 52 | GST_PLUGIN_STATIC_DECLARE(videoconvertscale); 53 | #endif 54 | #if defined(GST_IOS_PLUGIN_VIDEORATE) || defined(GST_IOS_PLUGINS_CORE) 55 | GST_PLUGIN_STATIC_DECLARE(videorate); 56 | #endif 57 | #if defined(GST_IOS_PLUGIN_VIDEOTESTSRC) || defined(GST_IOS_PLUGINS_CORE) 58 | GST_PLUGIN_STATIC_DECLARE(videotestsrc); 59 | #endif 60 | #if defined(GST_IOS_PLUGIN_VOLUME) || defined(GST_IOS_PLUGINS_CORE) 61 | GST_PLUGIN_STATIC_DECLARE(volume); 62 | #endif 63 | #if defined(GST_IOS_PLUGIN_AUTODETECT) || defined(GST_IOS_PLUGINS_CORE) 64 | GST_PLUGIN_STATIC_DECLARE(autodetect); 65 | #endif 66 | #if defined(GST_IOS_PLUGIN_VIDEOFILTER) || defined(GST_IOS_PLUGINS_CORE) 67 | GST_PLUGIN_STATIC_DECLARE(videofilter); 68 | #endif 69 | #if defined(GST_IOS_PLUGIN_SUBPARSE) || defined(GST_IOS_PLUGINS_CODECS) 70 | GST_PLUGIN_STATIC_DECLARE(subparse); 71 | #endif 72 | #if defined(GST_IOS_PLUGIN_OGG) || defined(GST_IOS_PLUGINS_CODECS) 73 | GST_PLUGIN_STATIC_DECLARE(ogg); 74 | #endif 75 | #if defined(GST_IOS_PLUGIN_THEORA) || defined(GST_IOS_PLUGINS_CODECS) 76 | GST_PLUGIN_STATIC_DECLARE(theora); 77 | #endif 78 | #if defined(GST_IOS_PLUGIN_VORBIS) || defined(GST_IOS_PLUGINS_CODECS) 79 | GST_PLUGIN_STATIC_DECLARE(vorbis); 80 | #endif 81 | #if defined(GST_IOS_PLUGIN_OPUS) || defined(GST_IOS_PLUGINS_CODECS) 82 | GST_PLUGIN_STATIC_DECLARE(opus); 83 | #endif 84 | #if defined(GST_IOS_PLUGIN_ALAW) || defined(GST_IOS_PLUGINS_CODECS) 85 | GST_PLUGIN_STATIC_DECLARE(alaw); 86 | #endif 87 | #if defined(GST_IOS_PLUGIN_APETAG) || defined(GST_IOS_PLUGINS_CODECS) 88 | GST_PLUGIN_STATIC_DECLARE(apetag); 89 | #endif 90 | #if defined(GST_IOS_PLUGIN_AUDIOPARSERS) || defined(GST_IOS_PLUGINS_CODECS) 91 | GST_PLUGIN_STATIC_DECLARE(audioparsers); 92 | #endif 93 | #if defined(GST_IOS_PLUGIN_AUPARSE) || defined(GST_IOS_PLUGINS_CODECS) 94 | GST_PLUGIN_STATIC_DECLARE(auparse); 95 | #endif 96 | #if defined(GST_IOS_PLUGIN_AVI) || defined(GST_IOS_PLUGINS_CODECS) 97 | GST_PLUGIN_STATIC_DECLARE(avi); 98 | #endif 99 | #if defined(GST_IOS_PLUGIN_DV) || defined(GST_IOS_PLUGINS_CODECS) 100 | GST_PLUGIN_STATIC_DECLARE(dv); 101 | #endif 102 | #if defined(GST_IOS_PLUGIN_FLAC) || defined(GST_IOS_PLUGINS_CODECS) 103 | GST_PLUGIN_STATIC_DECLARE(flac); 104 | #endif 105 | #if defined(GST_IOS_PLUGIN_FLV) || defined(GST_IOS_PLUGINS_CODECS) 106 | GST_PLUGIN_STATIC_DECLARE(flv); 107 | #endif 108 | #if defined(GST_IOS_PLUGIN_FLXDEC) || defined(GST_IOS_PLUGINS_CODECS) 109 | GST_PLUGIN_STATIC_DECLARE(flxdec); 110 | #endif 111 | #if defined(GST_IOS_PLUGIN_ICYDEMUX) || defined(GST_IOS_PLUGINS_CODECS) 112 | GST_PLUGIN_STATIC_DECLARE(icydemux); 113 | #endif 114 | #if defined(GST_IOS_PLUGIN_ID3DEMUX) || defined(GST_IOS_PLUGINS_CODECS) 115 | GST_PLUGIN_STATIC_DECLARE(id3demux); 116 | #endif 117 | #if defined(GST_IOS_PLUGIN_ISOMP4) || defined(GST_IOS_PLUGINS_CODECS) 118 | GST_PLUGIN_STATIC_DECLARE(isomp4); 119 | #endif 120 | #if defined(GST_IOS_PLUGIN_JPEG) || defined(GST_IOS_PLUGINS_CODECS) 121 | GST_PLUGIN_STATIC_DECLARE(jpeg); 122 | #endif 123 | #if defined(GST_IOS_PLUGIN_LAME) || defined(GST_IOS_PLUGINS_CODECS) 124 | GST_PLUGIN_STATIC_DECLARE(lame); 125 | #endif 126 | #if defined(GST_IOS_PLUGIN_MATROSKA) || defined(GST_IOS_PLUGINS_CODECS) 127 | GST_PLUGIN_STATIC_DECLARE(matroska); 128 | #endif 129 | #if defined(GST_IOS_PLUGIN_MPG123) || defined(GST_IOS_PLUGINS_CODECS) 130 | GST_PLUGIN_STATIC_DECLARE(mpg123); 131 | #endif 132 | #if defined(GST_IOS_PLUGIN_MULAW) || defined(GST_IOS_PLUGINS_CODECS) 133 | GST_PLUGIN_STATIC_DECLARE(mulaw); 134 | #endif 135 | #if defined(GST_IOS_PLUGIN_MULTIPART) || defined(GST_IOS_PLUGINS_CODECS) 136 | GST_PLUGIN_STATIC_DECLARE(multipart); 137 | #endif 138 | #if defined(GST_IOS_PLUGIN_PNG) || defined(GST_IOS_PLUGINS_CODECS) 139 | GST_PLUGIN_STATIC_DECLARE(png); 140 | #endif 141 | #if defined(GST_IOS_PLUGIN_SPEEX) || defined(GST_IOS_PLUGINS_CODECS) 142 | GST_PLUGIN_STATIC_DECLARE(speex); 143 | #endif 144 | #if defined(GST_IOS_PLUGIN_TAGLIB) || defined(GST_IOS_PLUGINS_CODECS) 145 | GST_PLUGIN_STATIC_DECLARE(taglib); 146 | #endif 147 | #if defined(GST_IOS_PLUGIN_VPX) || defined(GST_IOS_PLUGINS_CODECS) 148 | GST_PLUGIN_STATIC_DECLARE(vpx); 149 | #endif 150 | #if defined(GST_IOS_PLUGIN_WAVENC) || defined(GST_IOS_PLUGINS_CODECS) 151 | GST_PLUGIN_STATIC_DECLARE(wavenc); 152 | #endif 153 | #if defined(GST_IOS_PLUGIN_WAVPACK) || defined(GST_IOS_PLUGINS_CODECS) 154 | GST_PLUGIN_STATIC_DECLARE(wavpack); 155 | #endif 156 | #if defined(GST_IOS_PLUGIN_WAVPARSE) || defined(GST_IOS_PLUGINS_CODECS) 157 | GST_PLUGIN_STATIC_DECLARE(wavparse); 158 | #endif 159 | #if defined(GST_IOS_PLUGIN_Y4MENC) || defined(GST_IOS_PLUGINS_CODECS) 160 | GST_PLUGIN_STATIC_DECLARE(y4menc); 161 | #endif 162 | #if defined(GST_IOS_PLUGIN_ADPCMDEC) || defined(GST_IOS_PLUGINS_CODECS) 163 | GST_PLUGIN_STATIC_DECLARE(adpcmdec); 164 | #endif 165 | #if defined(GST_IOS_PLUGIN_ADPCMENC) || defined(GST_IOS_PLUGINS_CODECS) 166 | GST_PLUGIN_STATIC_DECLARE(adpcmenc); 167 | #endif 168 | #if defined(GST_IOS_PLUGIN_DASH) || defined(GST_IOS_PLUGINS_CODECS) 169 | GST_PLUGIN_STATIC_DECLARE(dash); 170 | #endif 171 | #if defined(GST_IOS_PLUGIN_DVBSUBOVERLAY) || defined(GST_IOS_PLUGINS_CODECS) 172 | GST_PLUGIN_STATIC_DECLARE(dvbsuboverlay); 173 | #endif 174 | #if defined(GST_IOS_PLUGIN_DVDSPU) || defined(GST_IOS_PLUGINS_CODECS) 175 | GST_PLUGIN_STATIC_DECLARE(dvdspu); 176 | #endif 177 | #if defined(GST_IOS_PLUGIN_HLS) || defined(GST_IOS_PLUGINS_CODECS) 178 | GST_PLUGIN_STATIC_DECLARE(hls); 179 | #endif 180 | #if defined(GST_IOS_PLUGIN_ID3TAG) || defined(GST_IOS_PLUGINS_CODECS) 181 | GST_PLUGIN_STATIC_DECLARE(id3tag); 182 | #endif 183 | #if defined(GST_IOS_PLUGIN_MIDI) || defined(GST_IOS_PLUGINS_CODECS) 184 | GST_PLUGIN_STATIC_DECLARE(midi); 185 | #endif 186 | #if defined(GST_IOS_PLUGIN_MXF) || defined(GST_IOS_PLUGINS_CODECS) 187 | GST_PLUGIN_STATIC_DECLARE(mxf); 188 | #endif 189 | #if defined(GST_IOS_PLUGIN_OPENH264) || defined(GST_IOS_PLUGINS_CODECS) 190 | GST_PLUGIN_STATIC_DECLARE(openh264); 191 | #endif 192 | #if defined(GST_IOS_PLUGIN_OPUSPARSE) || defined(GST_IOS_PLUGINS_CODECS) 193 | GST_PLUGIN_STATIC_DECLARE(opusparse); 194 | #endif 195 | #if defined(GST_IOS_PLUGIN_PCAPPARSE) || defined(GST_IOS_PLUGINS_CODECS) 196 | GST_PLUGIN_STATIC_DECLARE(pcapparse); 197 | #endif 198 | #if defined(GST_IOS_PLUGIN_PNM) || defined(GST_IOS_PLUGINS_CODECS) 199 | GST_PLUGIN_STATIC_DECLARE(pnm); 200 | #endif 201 | #if defined(GST_IOS_PLUGIN_RFBSRC) || defined(GST_IOS_PLUGINS_CODECS) 202 | GST_PLUGIN_STATIC_DECLARE(rfbsrc); 203 | #endif 204 | #if defined(GST_IOS_PLUGIN_SIREN) || defined(GST_IOS_PLUGINS_CODECS) 205 | GST_PLUGIN_STATIC_DECLARE(siren); 206 | #endif 207 | #if defined(GST_IOS_PLUGIN_SMOOTHSTREAMING) || defined(GST_IOS_PLUGINS_CODECS) 208 | GST_PLUGIN_STATIC_DECLARE(smoothstreaming); 209 | #endif 210 | #if defined(GST_IOS_PLUGIN_SUBENC) || defined(GST_IOS_PLUGINS_CODECS) 211 | GST_PLUGIN_STATIC_DECLARE(subenc); 212 | #endif 213 | #if defined(GST_IOS_PLUGIN_VIDEOPARSERSBAD) || defined(GST_IOS_PLUGINS_CODECS) 214 | GST_PLUGIN_STATIC_DECLARE(videoparsersbad); 215 | #endif 216 | #if defined(GST_IOS_PLUGIN_Y4MDEC) || defined(GST_IOS_PLUGINS_CODECS) 217 | GST_PLUGIN_STATIC_DECLARE(y4mdec); 218 | #endif 219 | #if defined(GST_IOS_PLUGIN_JPEGFORMAT) || defined(GST_IOS_PLUGINS_CODECS) 220 | GST_PLUGIN_STATIC_DECLARE(jpegformat); 221 | #endif 222 | #if defined(GST_IOS_PLUGIN_GDP) || defined(GST_IOS_PLUGINS_CODECS) 223 | GST_PLUGIN_STATIC_DECLARE(gdp); 224 | #endif 225 | #if defined(GST_IOS_PLUGIN_RSVG) || defined(GST_IOS_PLUGINS_CODECS) 226 | GST_PLUGIN_STATIC_DECLARE(rsvg); 227 | #endif 228 | #if defined(GST_IOS_PLUGIN_OPENJPEG) || defined(GST_IOS_PLUGINS_CODECS) 229 | GST_PLUGIN_STATIC_DECLARE(openjpeg); 230 | #endif 231 | #if defined(GST_IOS_PLUGIN_SPANDSP) || defined(GST_IOS_PLUGINS_CODECS) 232 | GST_PLUGIN_STATIC_DECLARE(spandsp); 233 | #endif 234 | #if defined(GST_IOS_PLUGIN_SBC) || defined(GST_IOS_PLUGINS_CODECS) 235 | GST_PLUGIN_STATIC_DECLARE(sbc); 236 | #endif 237 | #if defined(GST_IOS_PLUGIN_ENCODING) || defined(GST_IOS_PLUGINS_ENCODING) 238 | GST_PLUGIN_STATIC_DECLARE(encoding); 239 | #endif 240 | #if defined(GST_IOS_PLUGIN_TCP) || defined(GST_IOS_PLUGINS_NET) 241 | GST_PLUGIN_STATIC_DECLARE(tcp); 242 | #endif 243 | #if defined(GST_IOS_PLUGIN_RTSP) || defined(GST_IOS_PLUGINS_NET) 244 | GST_PLUGIN_STATIC_DECLARE(rtsp); 245 | #endif 246 | #if defined(GST_IOS_PLUGIN_RTP) || defined(GST_IOS_PLUGINS_NET) 247 | GST_PLUGIN_STATIC_DECLARE(rtp); 248 | #endif 249 | #if defined(GST_IOS_PLUGIN_RTPMANAGER) || defined(GST_IOS_PLUGINS_NET) 250 | GST_PLUGIN_STATIC_DECLARE(rtpmanager); 251 | #endif 252 | #if defined(GST_IOS_PLUGIN_SOUP) || defined(GST_IOS_PLUGINS_NET) 253 | GST_PLUGIN_STATIC_DECLARE(soup); 254 | #endif 255 | #if defined(GST_IOS_PLUGIN_UDP) || defined(GST_IOS_PLUGINS_NET) 256 | GST_PLUGIN_STATIC_DECLARE(udp); 257 | #endif 258 | #if defined(GST_IOS_PLUGIN_DTLS) || defined(GST_IOS_PLUGINS_NET) 259 | GST_PLUGIN_STATIC_DECLARE(dtls); 260 | #endif 261 | #if defined(GST_IOS_PLUGIN_SDPELEM) || defined(GST_IOS_PLUGINS_NET) 262 | GST_PLUGIN_STATIC_DECLARE(sdpelem); 263 | #endif 264 | #if defined(GST_IOS_PLUGIN_SRTP) || defined(GST_IOS_PLUGINS_NET) 265 | GST_PLUGIN_STATIC_DECLARE(srtp); 266 | #endif 267 | #if defined(GST_IOS_PLUGIN_WEBRTC) || defined(GST_IOS_PLUGINS_NET) 268 | GST_PLUGIN_STATIC_DECLARE(webrtc); 269 | #endif 270 | #if defined(GST_IOS_PLUGIN_SRT) || defined(GST_IOS_PLUGINS_NET) 271 | GST_PLUGIN_STATIC_DECLARE(srt); 272 | #endif 273 | #if defined(GST_IOS_PLUGIN_SCTP) || defined(GST_IOS_PLUGINS_NET) 274 | GST_PLUGIN_STATIC_DECLARE(sctp); 275 | #endif 276 | #if defined(GST_IOS_PLUGIN_NICE) || defined(GST_IOS_PLUGINS_NET) 277 | GST_PLUGIN_STATIC_DECLARE(nice); 278 | #endif 279 | #if defined(GST_IOS_PLUGIN_RTSPCLIENTSINK) || defined(GST_IOS_PLUGINS_NET) 280 | GST_PLUGIN_STATIC_DECLARE(rtspclientsink); 281 | #endif 282 | #if defined(GST_IOS_PLUGIN_PLAYBACK) || defined(GST_IOS_PLUGINS_PLAYBACK) 283 | GST_PLUGIN_STATIC_DECLARE(playback); 284 | #endif 285 | #if defined(GST_IOS_PLUGIN_GOOM) || defined(GST_IOS_PLUGINS_VIS) 286 | GST_PLUGIN_STATIC_DECLARE(goom); 287 | #endif 288 | #if defined(GST_IOS_PLUGIN_GOOM2K1) || defined(GST_IOS_PLUGINS_VIS) 289 | GST_PLUGIN_STATIC_DECLARE(goom2k1); 290 | #endif 291 | #if defined(GST_IOS_PLUGIN_AUDIOVISUALIZERS) || defined(GST_IOS_PLUGINS_VIS) 292 | GST_PLUGIN_STATIC_DECLARE(audiovisualizers); 293 | #endif 294 | #if defined(GST_IOS_PLUGIN_OPENGL) || defined(GST_IOS_PLUGINS_SYS) 295 | GST_PLUGIN_STATIC_DECLARE(opengl); 296 | #endif 297 | #if defined(GST_IOS_PLUGIN_OSXAUDIO) || defined(GST_IOS_PLUGINS_SYS) 298 | GST_PLUGIN_STATIC_DECLARE(osxaudio); 299 | #endif 300 | #if defined(GST_IOS_PLUGIN_APPLEMEDIA) || defined(GST_IOS_PLUGINS_SYS) 301 | GST_PLUGIN_STATIC_DECLARE(applemedia); 302 | #endif 303 | #if defined(GST_IOS_PLUGIN_SHM) || defined(GST_IOS_PLUGINS_SYS) 304 | GST_PLUGIN_STATIC_DECLARE(shm); 305 | #endif 306 | #if defined(GST_IOS_PLUGIN_ALPHA) || defined(GST_IOS_PLUGINS_EFFECTS) 307 | GST_PLUGIN_STATIC_DECLARE(alpha); 308 | #endif 309 | #if defined(GST_IOS_PLUGIN_ALPHACOLOR) || defined(GST_IOS_PLUGINS_EFFECTS) 310 | GST_PLUGIN_STATIC_DECLARE(alphacolor); 311 | #endif 312 | #if defined(GST_IOS_PLUGIN_AUDIOFX) || defined(GST_IOS_PLUGINS_EFFECTS) 313 | GST_PLUGIN_STATIC_DECLARE(audiofx); 314 | #endif 315 | #if defined(GST_IOS_PLUGIN_CAIRO) || defined(GST_IOS_PLUGINS_EFFECTS) 316 | GST_PLUGIN_STATIC_DECLARE(cairo); 317 | #endif 318 | #if defined(GST_IOS_PLUGIN_CUTTER) || defined(GST_IOS_PLUGINS_EFFECTS) 319 | GST_PLUGIN_STATIC_DECLARE(cutter); 320 | #endif 321 | #if defined(GST_IOS_PLUGIN_DEBUG) || defined(GST_IOS_PLUGINS_EFFECTS) 322 | GST_PLUGIN_STATIC_DECLARE(debug); 323 | #endif 324 | #if defined(GST_IOS_PLUGIN_DEINTERLACE) || defined(GST_IOS_PLUGINS_EFFECTS) 325 | GST_PLUGIN_STATIC_DECLARE(deinterlace); 326 | #endif 327 | #if defined(GST_IOS_PLUGIN_DTMF) || defined(GST_IOS_PLUGINS_EFFECTS) 328 | GST_PLUGIN_STATIC_DECLARE(dtmf); 329 | #endif 330 | #if defined(GST_IOS_PLUGIN_EFFECTV) || defined(GST_IOS_PLUGINS_EFFECTS) 331 | GST_PLUGIN_STATIC_DECLARE(effectv); 332 | #endif 333 | #if defined(GST_IOS_PLUGIN_EQUALIZER) || defined(GST_IOS_PLUGINS_EFFECTS) 334 | GST_PLUGIN_STATIC_DECLARE(equalizer); 335 | #endif 336 | #if defined(GST_IOS_PLUGIN_GDKPIXBUF) || defined(GST_IOS_PLUGINS_EFFECTS) 337 | GST_PLUGIN_STATIC_DECLARE(gdkpixbuf); 338 | #endif 339 | #if defined(GST_IOS_PLUGIN_IMAGEFREEZE) || defined(GST_IOS_PLUGINS_EFFECTS) 340 | GST_PLUGIN_STATIC_DECLARE(imagefreeze); 341 | #endif 342 | #if defined(GST_IOS_PLUGIN_INTERLEAVE) || defined(GST_IOS_PLUGINS_EFFECTS) 343 | GST_PLUGIN_STATIC_DECLARE(interleave); 344 | #endif 345 | #if defined(GST_IOS_PLUGIN_LEVEL) || defined(GST_IOS_PLUGINS_EFFECTS) 346 | GST_PLUGIN_STATIC_DECLARE(level); 347 | #endif 348 | #if defined(GST_IOS_PLUGIN_MULTIFILE) || defined(GST_IOS_PLUGINS_EFFECTS) 349 | GST_PLUGIN_STATIC_DECLARE(multifile); 350 | #endif 351 | #if defined(GST_IOS_PLUGIN_REPLAYGAIN) || defined(GST_IOS_PLUGINS_EFFECTS) 352 | GST_PLUGIN_STATIC_DECLARE(replaygain); 353 | #endif 354 | #if defined(GST_IOS_PLUGIN_SHAPEWIPE) || defined(GST_IOS_PLUGINS_EFFECTS) 355 | GST_PLUGIN_STATIC_DECLARE(shapewipe); 356 | #endif 357 | #if defined(GST_IOS_PLUGIN_SMPTE) || defined(GST_IOS_PLUGINS_EFFECTS) 358 | GST_PLUGIN_STATIC_DECLARE(smpte); 359 | #endif 360 | #if defined(GST_IOS_PLUGIN_SPECTRUM) || defined(GST_IOS_PLUGINS_EFFECTS) 361 | GST_PLUGIN_STATIC_DECLARE(spectrum); 362 | #endif 363 | #if defined(GST_IOS_PLUGIN_VIDEOBOX) || defined(GST_IOS_PLUGINS_EFFECTS) 364 | GST_PLUGIN_STATIC_DECLARE(videobox); 365 | #endif 366 | #if defined(GST_IOS_PLUGIN_VIDEOCROP) || defined(GST_IOS_PLUGINS_EFFECTS) 367 | GST_PLUGIN_STATIC_DECLARE(videocrop); 368 | #endif 369 | #if defined(GST_IOS_PLUGIN_VIDEOMIXER) || defined(GST_IOS_PLUGINS_EFFECTS) 370 | GST_PLUGIN_STATIC_DECLARE(videomixer); 371 | #endif 372 | #if defined(GST_IOS_PLUGIN_ACCURIP) || defined(GST_IOS_PLUGINS_EFFECTS) 373 | GST_PLUGIN_STATIC_DECLARE(accurip); 374 | #endif 375 | #if defined(GST_IOS_PLUGIN_AIFF) || defined(GST_IOS_PLUGINS_EFFECTS) 376 | GST_PLUGIN_STATIC_DECLARE(aiff); 377 | #endif 378 | #if defined(GST_IOS_PLUGIN_AUDIOFXBAD) || defined(GST_IOS_PLUGINS_EFFECTS) 379 | GST_PLUGIN_STATIC_DECLARE(audiofxbad); 380 | #endif 381 | #if defined(GST_IOS_PLUGIN_AUTOCONVERT) || defined(GST_IOS_PLUGINS_EFFECTS) 382 | GST_PLUGIN_STATIC_DECLARE(autoconvert); 383 | #endif 384 | #if defined(GST_IOS_PLUGIN_BAYER) || defined(GST_IOS_PLUGINS_EFFECTS) 385 | GST_PLUGIN_STATIC_DECLARE(bayer); 386 | #endif 387 | #if defined(GST_IOS_PLUGIN_COLOREFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) 388 | GST_PLUGIN_STATIC_DECLARE(coloreffects); 389 | #endif 390 | #if defined(GST_IOS_PLUGIN_CLOSEDCAPTION) || defined(GST_IOS_PLUGINS_EFFECTS) 391 | GST_PLUGIN_STATIC_DECLARE(closedcaption); 392 | #endif 393 | #if defined(GST_IOS_PLUGIN_DEBUGUTILSBAD) || defined(GST_IOS_PLUGINS_EFFECTS) 394 | GST_PLUGIN_STATIC_DECLARE(debugutilsbad); 395 | #endif 396 | #if defined(GST_IOS_PLUGIN_FIELDANALYSIS) || defined(GST_IOS_PLUGINS_EFFECTS) 397 | GST_PLUGIN_STATIC_DECLARE(fieldanalysis); 398 | #endif 399 | #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) 400 | GST_PLUGIN_STATIC_DECLARE(freeverb); 401 | #endif 402 | #if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) 403 | GST_PLUGIN_STATIC_DECLARE(frei0r); 404 | #endif 405 | #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) 406 | GST_PLUGIN_STATIC_DECLARE(gaudieffects); 407 | #endif 408 | #if defined(GST_IOS_PLUGIN_GEOMETRICTRANSFORM) || defined(GST_IOS_PLUGINS_EFFECTS) 409 | GST_PLUGIN_STATIC_DECLARE(geometrictransform); 410 | #endif 411 | #if defined(GST_IOS_PLUGIN_INTER) || defined(GST_IOS_PLUGINS_EFFECTS) 412 | GST_PLUGIN_STATIC_DECLARE(inter); 413 | #endif 414 | #if defined(GST_IOS_PLUGIN_INTERLACE) || defined(GST_IOS_PLUGINS_EFFECTS) 415 | GST_PLUGIN_STATIC_DECLARE(interlace); 416 | #endif 417 | #if defined(GST_IOS_PLUGIN_IVTC) || defined(GST_IOS_PLUGINS_EFFECTS) 418 | GST_PLUGIN_STATIC_DECLARE(ivtc); 419 | #endif 420 | #if defined(GST_IOS_PLUGIN_LEGACYRAWPARSE) || defined(GST_IOS_PLUGINS_EFFECTS) 421 | GST_PLUGIN_STATIC_DECLARE(legacyrawparse); 422 | #endif 423 | #if defined(GST_IOS_PLUGIN_PROXY) || defined(GST_IOS_PLUGINS_EFFECTS) 424 | GST_PLUGIN_STATIC_DECLARE(proxy); 425 | #endif 426 | #if defined(GST_IOS_PLUGIN_REMOVESILENCE) || defined(GST_IOS_PLUGINS_EFFECTS) 427 | GST_PLUGIN_STATIC_DECLARE(removesilence); 428 | #endif 429 | #if defined(GST_IOS_PLUGIN_SEGMENTCLIP) || defined(GST_IOS_PLUGINS_EFFECTS) 430 | GST_PLUGIN_STATIC_DECLARE(segmentclip); 431 | #endif 432 | #if defined(GST_IOS_PLUGIN_SMOOTH) || defined(GST_IOS_PLUGINS_EFFECTS) 433 | GST_PLUGIN_STATIC_DECLARE(smooth); 434 | #endif 435 | #if defined(GST_IOS_PLUGIN_SPEED) || defined(GST_IOS_PLUGINS_EFFECTS) 436 | GST_PLUGIN_STATIC_DECLARE(speed); 437 | #endif 438 | #if defined(GST_IOS_PLUGIN_SOUNDTOUCH) || defined(GST_IOS_PLUGINS_EFFECTS) 439 | GST_PLUGIN_STATIC_DECLARE(soundtouch); 440 | #endif 441 | #if defined(GST_IOS_PLUGIN_VIDEOFILTERSBAD) || defined(GST_IOS_PLUGINS_EFFECTS) 442 | GST_PLUGIN_STATIC_DECLARE(videofiltersbad); 443 | #endif 444 | #if defined(GST_IOS_PLUGIN_WEBRTCDSP) || defined(GST_IOS_PLUGINS_EFFECTS) 445 | GST_PLUGIN_STATIC_DECLARE(webrtcdsp); 446 | #endif 447 | #if defined(GST_IOS_PLUGIN_LADSPA) || defined(GST_IOS_PLUGINS_EFFECTS) 448 | GST_PLUGIN_STATIC_DECLARE(ladspa); 449 | #endif 450 | #if defined(GST_IOS_PLUGIN_AUDIOBUFFERSPLIT) || defined(GST_IOS_PLUGINS_EFFECTS) 451 | GST_PLUGIN_STATIC_DECLARE(audiobuffersplit); 452 | #endif 453 | #if defined(GST_IOS_PLUGIN_CAMERABIN) || defined(GST_IOS_PLUGINS_CAPTURE) 454 | GST_PLUGIN_STATIC_DECLARE(camerabin); 455 | #endif 456 | #if defined(GST_IOS_PLUGIN_ASSRENDER) || defined(GST_IOS_PLUGINS_CODECS_GPL) 457 | GST_PLUGIN_STATIC_DECLARE(assrender); 458 | #endif 459 | #if defined(GST_IOS_PLUGIN_ASFMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 460 | GST_PLUGIN_STATIC_DECLARE(asfmux); 461 | #endif 462 | #if defined(GST_IOS_PLUGIN_DTSDEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 463 | GST_PLUGIN_STATIC_DECLARE(dtsdec); 464 | #endif 465 | #if defined(GST_IOS_PLUGIN_MPEGPSDEMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 466 | GST_PLUGIN_STATIC_DECLARE(mpegpsdemux); 467 | #endif 468 | #if defined(GST_IOS_PLUGIN_MPEGPSMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 469 | GST_PLUGIN_STATIC_DECLARE(mpegpsmux); 470 | #endif 471 | #if defined(GST_IOS_PLUGIN_MPEGTSDEMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 472 | GST_PLUGIN_STATIC_DECLARE(mpegtsdemux); 473 | #endif 474 | #if defined(GST_IOS_PLUGIN_MPEGTSMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 475 | GST_PLUGIN_STATIC_DECLARE(mpegtsmux); 476 | #endif 477 | #if defined(GST_IOS_PLUGIN_VOAACENC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 478 | GST_PLUGIN_STATIC_DECLARE(voaacenc); 479 | #endif 480 | #if defined(GST_IOS_PLUGIN_A52DEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 481 | GST_PLUGIN_STATIC_DECLARE(a52dec); 482 | #endif 483 | #if defined(GST_IOS_PLUGIN_AMRNB) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 484 | GST_PLUGIN_STATIC_DECLARE(amrnb); 485 | #endif 486 | #if defined(GST_IOS_PLUGIN_AMRWBDEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 487 | GST_PLUGIN_STATIC_DECLARE(amrwbdec); 488 | #endif 489 | #if defined(GST_IOS_PLUGIN_ASF) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 490 | GST_PLUGIN_STATIC_DECLARE(asf); 491 | #endif 492 | #if defined(GST_IOS_PLUGIN_DVDSUB) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 493 | GST_PLUGIN_STATIC_DECLARE(dvdsub); 494 | #endif 495 | #if defined(GST_IOS_PLUGIN_DVDLPCMDEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 496 | GST_PLUGIN_STATIC_DECLARE(dvdlpcmdec); 497 | #endif 498 | #if defined(GST_IOS_PLUGIN_XINGMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 499 | GST_PLUGIN_STATIC_DECLARE(xingmux); 500 | #endif 501 | #if defined(GST_IOS_PLUGIN_REALMEDIA) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 502 | GST_PLUGIN_STATIC_DECLARE(realmedia); 503 | #endif 504 | #if defined(GST_IOS_PLUGIN_X264) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 505 | GST_PLUGIN_STATIC_DECLARE(x264); 506 | #endif 507 | #if defined(GST_IOS_PLUGIN_LIBAV) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 508 | GST_PLUGIN_STATIC_DECLARE(libav); 509 | #endif 510 | #if defined(GST_IOS_PLUGIN_RTMP) || defined(GST_IOS_PLUGINS_NET_RESTRICTED) 511 | GST_PLUGIN_STATIC_DECLARE(rtmp); 512 | #endif 513 | #if defined(GST_IOS_PLUGIN_NLE) || defined(GST_IOS_PLUGINS_GES) 514 | GST_PLUGIN_STATIC_DECLARE(nle); 515 | #endif 516 | 517 | #if defined(GST_IOS_GIO_MODULE_OPENSSL) 518 | GST_G_IO_MODULE_DECLARE(openssl); 519 | #endif 520 | 521 | void 522 | gst_ios_init (void) 523 | { 524 | GstPluginFeature *plugin; 525 | GstRegistry *reg; 526 | NSString *resources = [[NSBundle mainBundle] resourcePath]; 527 | NSString *tmp = NSTemporaryDirectory(); 528 | NSString *cache = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"]; 529 | NSString *docs = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 530 | 531 | const gchar *resources_dir = [resources UTF8String]; 532 | const gchar *tmp_dir = [tmp UTF8String]; 533 | const gchar *cache_dir = [cache UTF8String]; 534 | const gchar *docs_dir = [docs UTF8String]; 535 | gchar *ca_certificates; 536 | 537 | g_setenv ("TMP", tmp_dir, TRUE); 538 | g_setenv ("TEMP", tmp_dir, TRUE); 539 | g_setenv ("TMPDIR", tmp_dir, TRUE); 540 | g_setenv ("XDG_RUNTIME_DIR", resources_dir, TRUE); 541 | g_setenv ("XDG_CACHE_HOME", cache_dir, TRUE); 542 | 543 | g_setenv ("HOME", docs_dir, TRUE); 544 | g_setenv ("XDG_DATA_DIRS", resources_dir, TRUE); 545 | g_setenv ("XDG_CONFIG_DIRS", resources_dir, TRUE); 546 | g_setenv ("XDG_CONFIG_HOME", cache_dir, TRUE); 547 | g_setenv ("XDG_DATA_HOME", resources_dir, TRUE); 548 | g_setenv ("FONTCONFIG_PATH", resources_dir, TRUE); 549 | 550 | ca_certificates = g_build_filename (resources_dir, "ssl", "certs", "ca-certificates.crt", NULL); 551 | g_setenv ("CA_CERTIFICATES", ca_certificates, TRUE); 552 | 553 | #if defined(GST_IOS_GIO_MODULE_OPENSSL) 554 | GST_G_IO_MODULE_LOAD(openssl); 555 | #endif 556 | 557 | if (ca_certificates) { 558 | GTlsBackend *backend = g_tls_backend_get_default (); 559 | if (backend) { 560 | GTlsDatabase *db = g_tls_file_database_new (ca_certificates, NULL); 561 | if (db) 562 | g_tls_backend_set_default_database (backend, db); 563 | } 564 | } 565 | g_free (ca_certificates); 566 | 567 | gst_init (NULL, NULL); 568 | 569 | #if defined(GST_IOS_PLUGIN_COREELEMENTS) || defined(GST_IOS_PLUGINS_CORE) 570 | GST_PLUGIN_STATIC_REGISTER(coreelements); 571 | #endif 572 | #if defined(GST_IOS_PLUGIN_CORETRACERS) || defined(GST_IOS_PLUGINS_CORE) 573 | GST_PLUGIN_STATIC_REGISTER(coretracers); 574 | #endif 575 | #if defined(GST_IOS_PLUGIN_ADDER) || defined(GST_IOS_PLUGINS_CORE) 576 | GST_PLUGIN_STATIC_REGISTER(adder); 577 | #endif 578 | #if defined(GST_IOS_PLUGIN_APP) || defined(GST_IOS_PLUGINS_CORE) 579 | GST_PLUGIN_STATIC_REGISTER(app); 580 | #endif 581 | #if defined(GST_IOS_PLUGIN_AUDIOCONVERT) || defined(GST_IOS_PLUGINS_CORE) 582 | GST_PLUGIN_STATIC_REGISTER(audioconvert); 583 | #endif 584 | #if defined(GST_IOS_PLUGIN_AUDIOMIXER) || defined(GST_IOS_PLUGINS_CORE) 585 | GST_PLUGIN_STATIC_REGISTER(audiomixer); 586 | #endif 587 | #if defined(GST_IOS_PLUGIN_AUDIORATE) || defined(GST_IOS_PLUGINS_CORE) 588 | GST_PLUGIN_STATIC_REGISTER(audiorate); 589 | #endif 590 | #if defined(GST_IOS_PLUGIN_AUDIORESAMPLE) || defined(GST_IOS_PLUGINS_CORE) 591 | GST_PLUGIN_STATIC_REGISTER(audioresample); 592 | #endif 593 | #if defined(GST_IOS_PLUGIN_AUDIOTESTSRC) || defined(GST_IOS_PLUGINS_CORE) 594 | GST_PLUGIN_STATIC_REGISTER(audiotestsrc); 595 | #endif 596 | #if defined(GST_IOS_PLUGIN_COMPOSITOR) || defined(GST_IOS_PLUGINS_CORE) 597 | GST_PLUGIN_STATIC_REGISTER(compositor); 598 | #endif 599 | #if defined(GST_IOS_PLUGIN_GIO) || defined(GST_IOS_PLUGINS_CORE) 600 | GST_PLUGIN_STATIC_REGISTER(gio); 601 | #endif 602 | #if defined(GST_IOS_PLUGIN_OVERLAYCOMPOSITION) || defined(GST_IOS_PLUGINS_CORE) 603 | GST_PLUGIN_STATIC_REGISTER(overlaycomposition); 604 | #endif 605 | #if defined(GST_IOS_PLUGIN_PANGO) || defined(GST_IOS_PLUGINS_CORE) 606 | GST_PLUGIN_STATIC_REGISTER(pango); 607 | #endif 608 | #if defined(GST_IOS_PLUGIN_RAWPARSE) || defined(GST_IOS_PLUGINS_CORE) 609 | GST_PLUGIN_STATIC_REGISTER(rawparse); 610 | #endif 611 | #if defined(GST_IOS_PLUGIN_TYPEFINDFUNCTIONS) || defined(GST_IOS_PLUGINS_CORE) 612 | GST_PLUGIN_STATIC_REGISTER(typefindfunctions); 613 | #endif 614 | #if defined(GST_IOS_PLUGIN_VIDEOCONVERTSCALE) || defined(GST_IOS_PLUGINS_CORE) 615 | GST_PLUGIN_STATIC_REGISTER(videoconvertscale); 616 | #endif 617 | #if defined(GST_IOS_PLUGIN_VIDEORATE) || defined(GST_IOS_PLUGINS_CORE) 618 | GST_PLUGIN_STATIC_REGISTER(videorate); 619 | #endif 620 | #if defined(GST_IOS_PLUGIN_VIDEOTESTSRC) || defined(GST_IOS_PLUGINS_CORE) 621 | GST_PLUGIN_STATIC_REGISTER(videotestsrc); 622 | #endif 623 | #if defined(GST_IOS_PLUGIN_VOLUME) || defined(GST_IOS_PLUGINS_CORE) 624 | GST_PLUGIN_STATIC_REGISTER(volume); 625 | #endif 626 | #if defined(GST_IOS_PLUGIN_AUTODETECT) || defined(GST_IOS_PLUGINS_CORE) 627 | GST_PLUGIN_STATIC_REGISTER(autodetect); 628 | #endif 629 | #if defined(GST_IOS_PLUGIN_VIDEOFILTER) || defined(GST_IOS_PLUGINS_CORE) 630 | GST_PLUGIN_STATIC_REGISTER(videofilter); 631 | #endif 632 | #if defined(GST_IOS_PLUGIN_SUBPARSE) || defined(GST_IOS_PLUGINS_CODECS) 633 | GST_PLUGIN_STATIC_REGISTER(subparse); 634 | #endif 635 | #if defined(GST_IOS_PLUGIN_OGG) || defined(GST_IOS_PLUGINS_CODECS) 636 | GST_PLUGIN_STATIC_REGISTER(ogg); 637 | #endif 638 | #if defined(GST_IOS_PLUGIN_THEORA) || defined(GST_IOS_PLUGINS_CODECS) 639 | GST_PLUGIN_STATIC_REGISTER(theora); 640 | #endif 641 | #if defined(GST_IOS_PLUGIN_VORBIS) || defined(GST_IOS_PLUGINS_CODECS) 642 | GST_PLUGIN_STATIC_REGISTER(vorbis); 643 | #endif 644 | #if defined(GST_IOS_PLUGIN_OPUS) || defined(GST_IOS_PLUGINS_CODECS) 645 | GST_PLUGIN_STATIC_REGISTER(opus); 646 | #endif 647 | #if defined(GST_IOS_PLUGIN_ALAW) || defined(GST_IOS_PLUGINS_CODECS) 648 | GST_PLUGIN_STATIC_REGISTER(alaw); 649 | #endif 650 | #if defined(GST_IOS_PLUGIN_APETAG) || defined(GST_IOS_PLUGINS_CODECS) 651 | GST_PLUGIN_STATIC_REGISTER(apetag); 652 | #endif 653 | #if defined(GST_IOS_PLUGIN_AUDIOPARSERS) || defined(GST_IOS_PLUGINS_CODECS) 654 | GST_PLUGIN_STATIC_REGISTER(audioparsers); 655 | #endif 656 | #if defined(GST_IOS_PLUGIN_AUPARSE) || defined(GST_IOS_PLUGINS_CODECS) 657 | GST_PLUGIN_STATIC_REGISTER(auparse); 658 | #endif 659 | #if defined(GST_IOS_PLUGIN_AVI) || defined(GST_IOS_PLUGINS_CODECS) 660 | GST_PLUGIN_STATIC_REGISTER(avi); 661 | #endif 662 | #if defined(GST_IOS_PLUGIN_DV) || defined(GST_IOS_PLUGINS_CODECS) 663 | GST_PLUGIN_STATIC_REGISTER(dv); 664 | #endif 665 | #if defined(GST_IOS_PLUGIN_FLAC) || defined(GST_IOS_PLUGINS_CODECS) 666 | GST_PLUGIN_STATIC_REGISTER(flac); 667 | #endif 668 | #if defined(GST_IOS_PLUGIN_FLV) || defined(GST_IOS_PLUGINS_CODECS) 669 | GST_PLUGIN_STATIC_REGISTER(flv); 670 | #endif 671 | #if defined(GST_IOS_PLUGIN_FLXDEC) || defined(GST_IOS_PLUGINS_CODECS) 672 | GST_PLUGIN_STATIC_REGISTER(flxdec); 673 | #endif 674 | #if defined(GST_IOS_PLUGIN_ICYDEMUX) || defined(GST_IOS_PLUGINS_CODECS) 675 | GST_PLUGIN_STATIC_REGISTER(icydemux); 676 | #endif 677 | #if defined(GST_IOS_PLUGIN_ID3DEMUX) || defined(GST_IOS_PLUGINS_CODECS) 678 | GST_PLUGIN_STATIC_REGISTER(id3demux); 679 | #endif 680 | #if defined(GST_IOS_PLUGIN_ISOMP4) || defined(GST_IOS_PLUGINS_CODECS) 681 | GST_PLUGIN_STATIC_REGISTER(isomp4); 682 | #endif 683 | #if defined(GST_IOS_PLUGIN_JPEG) || defined(GST_IOS_PLUGINS_CODECS) 684 | GST_PLUGIN_STATIC_REGISTER(jpeg); 685 | #endif 686 | #if defined(GST_IOS_PLUGIN_LAME) || defined(GST_IOS_PLUGINS_CODECS) 687 | GST_PLUGIN_STATIC_REGISTER(lame); 688 | #endif 689 | #if defined(GST_IOS_PLUGIN_MATROSKA) || defined(GST_IOS_PLUGINS_CODECS) 690 | GST_PLUGIN_STATIC_REGISTER(matroska); 691 | #endif 692 | #if defined(GST_IOS_PLUGIN_MPG123) || defined(GST_IOS_PLUGINS_CODECS) 693 | GST_PLUGIN_STATIC_REGISTER(mpg123); 694 | #endif 695 | #if defined(GST_IOS_PLUGIN_MULAW) || defined(GST_IOS_PLUGINS_CODECS) 696 | GST_PLUGIN_STATIC_REGISTER(mulaw); 697 | #endif 698 | #if defined(GST_IOS_PLUGIN_MULTIPART) || defined(GST_IOS_PLUGINS_CODECS) 699 | GST_PLUGIN_STATIC_REGISTER(multipart); 700 | #endif 701 | #if defined(GST_IOS_PLUGIN_PNG) || defined(GST_IOS_PLUGINS_CODECS) 702 | GST_PLUGIN_STATIC_REGISTER(png); 703 | #endif 704 | #if defined(GST_IOS_PLUGIN_SPEEX) || defined(GST_IOS_PLUGINS_CODECS) 705 | GST_PLUGIN_STATIC_REGISTER(speex); 706 | #endif 707 | #if defined(GST_IOS_PLUGIN_TAGLIB) || defined(GST_IOS_PLUGINS_CODECS) 708 | GST_PLUGIN_STATIC_REGISTER(taglib); 709 | #endif 710 | #if defined(GST_IOS_PLUGIN_VPX) || defined(GST_IOS_PLUGINS_CODECS) 711 | GST_PLUGIN_STATIC_REGISTER(vpx); 712 | #endif 713 | #if defined(GST_IOS_PLUGIN_WAVENC) || defined(GST_IOS_PLUGINS_CODECS) 714 | GST_PLUGIN_STATIC_REGISTER(wavenc); 715 | #endif 716 | #if defined(GST_IOS_PLUGIN_WAVPACK) || defined(GST_IOS_PLUGINS_CODECS) 717 | GST_PLUGIN_STATIC_REGISTER(wavpack); 718 | #endif 719 | #if defined(GST_IOS_PLUGIN_WAVPARSE) || defined(GST_IOS_PLUGINS_CODECS) 720 | GST_PLUGIN_STATIC_REGISTER(wavparse); 721 | #endif 722 | #if defined(GST_IOS_PLUGIN_Y4MENC) || defined(GST_IOS_PLUGINS_CODECS) 723 | GST_PLUGIN_STATIC_REGISTER(y4menc); 724 | #endif 725 | #if defined(GST_IOS_PLUGIN_ADPCMDEC) || defined(GST_IOS_PLUGINS_CODECS) 726 | GST_PLUGIN_STATIC_REGISTER(adpcmdec); 727 | #endif 728 | #if defined(GST_IOS_PLUGIN_ADPCMENC) || defined(GST_IOS_PLUGINS_CODECS) 729 | GST_PLUGIN_STATIC_REGISTER(adpcmenc); 730 | #endif 731 | #if defined(GST_IOS_PLUGIN_DASH) || defined(GST_IOS_PLUGINS_CODECS) 732 | GST_PLUGIN_STATIC_REGISTER(dash); 733 | #endif 734 | #if defined(GST_IOS_PLUGIN_DVBSUBOVERLAY) || defined(GST_IOS_PLUGINS_CODECS) 735 | GST_PLUGIN_STATIC_REGISTER(dvbsuboverlay); 736 | #endif 737 | #if defined(GST_IOS_PLUGIN_DVDSPU) || defined(GST_IOS_PLUGINS_CODECS) 738 | GST_PLUGIN_STATIC_REGISTER(dvdspu); 739 | #endif 740 | #if defined(GST_IOS_PLUGIN_HLS) || defined(GST_IOS_PLUGINS_CODECS) 741 | GST_PLUGIN_STATIC_REGISTER(hls); 742 | #endif 743 | #if defined(GST_IOS_PLUGIN_ID3TAG) || defined(GST_IOS_PLUGINS_CODECS) 744 | GST_PLUGIN_STATIC_REGISTER(id3tag); 745 | #endif 746 | #if defined(GST_IOS_PLUGIN_MIDI) || defined(GST_IOS_PLUGINS_CODECS) 747 | GST_PLUGIN_STATIC_REGISTER(midi); 748 | #endif 749 | #if defined(GST_IOS_PLUGIN_MXF) || defined(GST_IOS_PLUGINS_CODECS) 750 | GST_PLUGIN_STATIC_REGISTER(mxf); 751 | #endif 752 | #if defined(GST_IOS_PLUGIN_OPENH264) || defined(GST_IOS_PLUGINS_CODECS) 753 | GST_PLUGIN_STATIC_REGISTER(openh264); 754 | #endif 755 | #if defined(GST_IOS_PLUGIN_OPUSPARSE) || defined(GST_IOS_PLUGINS_CODECS) 756 | GST_PLUGIN_STATIC_REGISTER(opusparse); 757 | #endif 758 | #if defined(GST_IOS_PLUGIN_PCAPPARSE) || defined(GST_IOS_PLUGINS_CODECS) 759 | GST_PLUGIN_STATIC_REGISTER(pcapparse); 760 | #endif 761 | #if defined(GST_IOS_PLUGIN_PNM) || defined(GST_IOS_PLUGINS_CODECS) 762 | GST_PLUGIN_STATIC_REGISTER(pnm); 763 | #endif 764 | #if defined(GST_IOS_PLUGIN_RFBSRC) || defined(GST_IOS_PLUGINS_CODECS) 765 | GST_PLUGIN_STATIC_REGISTER(rfbsrc); 766 | #endif 767 | #if defined(GST_IOS_PLUGIN_SIREN) || defined(GST_IOS_PLUGINS_CODECS) 768 | GST_PLUGIN_STATIC_REGISTER(siren); 769 | #endif 770 | #if defined(GST_IOS_PLUGIN_SMOOTHSTREAMING) || defined(GST_IOS_PLUGINS_CODECS) 771 | GST_PLUGIN_STATIC_REGISTER(smoothstreaming); 772 | #endif 773 | #if defined(GST_IOS_PLUGIN_SUBENC) || defined(GST_IOS_PLUGINS_CODECS) 774 | GST_PLUGIN_STATIC_REGISTER(subenc); 775 | #endif 776 | #if defined(GST_IOS_PLUGIN_VIDEOPARSERSBAD) || defined(GST_IOS_PLUGINS_CODECS) 777 | GST_PLUGIN_STATIC_REGISTER(videoparsersbad); 778 | #endif 779 | #if defined(GST_IOS_PLUGIN_Y4MDEC) || defined(GST_IOS_PLUGINS_CODECS) 780 | GST_PLUGIN_STATIC_REGISTER(y4mdec); 781 | #endif 782 | #if defined(GST_IOS_PLUGIN_JPEGFORMAT) || defined(GST_IOS_PLUGINS_CODECS) 783 | GST_PLUGIN_STATIC_REGISTER(jpegformat); 784 | #endif 785 | #if defined(GST_IOS_PLUGIN_GDP) || defined(GST_IOS_PLUGINS_CODECS) 786 | GST_PLUGIN_STATIC_REGISTER(gdp); 787 | #endif 788 | #if defined(GST_IOS_PLUGIN_RSVG) || defined(GST_IOS_PLUGINS_CODECS) 789 | GST_PLUGIN_STATIC_REGISTER(rsvg); 790 | #endif 791 | #if defined(GST_IOS_PLUGIN_OPENJPEG) || defined(GST_IOS_PLUGINS_CODECS) 792 | GST_PLUGIN_STATIC_REGISTER(openjpeg); 793 | #endif 794 | #if defined(GST_IOS_PLUGIN_SPANDSP) || defined(GST_IOS_PLUGINS_CODECS) 795 | GST_PLUGIN_STATIC_REGISTER(spandsp); 796 | #endif 797 | #if defined(GST_IOS_PLUGIN_SBC) || defined(GST_IOS_PLUGINS_CODECS) 798 | GST_PLUGIN_STATIC_REGISTER(sbc); 799 | #endif 800 | #if defined(GST_IOS_PLUGIN_ENCODING) || defined(GST_IOS_PLUGINS_ENCODING) 801 | GST_PLUGIN_STATIC_REGISTER(encoding); 802 | #endif 803 | #if defined(GST_IOS_PLUGIN_TCP) || defined(GST_IOS_PLUGINS_NET) 804 | GST_PLUGIN_STATIC_REGISTER(tcp); 805 | #endif 806 | #if defined(GST_IOS_PLUGIN_RTSP) || defined(GST_IOS_PLUGINS_NET) 807 | GST_PLUGIN_STATIC_REGISTER(rtsp); 808 | #endif 809 | #if defined(GST_IOS_PLUGIN_RTP) || defined(GST_IOS_PLUGINS_NET) 810 | GST_PLUGIN_STATIC_REGISTER(rtp); 811 | #endif 812 | #if defined(GST_IOS_PLUGIN_RTPMANAGER) || defined(GST_IOS_PLUGINS_NET) 813 | GST_PLUGIN_STATIC_REGISTER(rtpmanager); 814 | #endif 815 | #if defined(GST_IOS_PLUGIN_SOUP) || defined(GST_IOS_PLUGINS_NET) 816 | GST_PLUGIN_STATIC_REGISTER(soup); 817 | #endif 818 | #if defined(GST_IOS_PLUGIN_UDP) || defined(GST_IOS_PLUGINS_NET) 819 | GST_PLUGIN_STATIC_REGISTER(udp); 820 | #endif 821 | #if defined(GST_IOS_PLUGIN_DTLS) || defined(GST_IOS_PLUGINS_NET) 822 | GST_PLUGIN_STATIC_REGISTER(dtls); 823 | #endif 824 | #if defined(GST_IOS_PLUGIN_SDPELEM) || defined(GST_IOS_PLUGINS_NET) 825 | GST_PLUGIN_STATIC_REGISTER(sdpelem); 826 | #endif 827 | #if defined(GST_IOS_PLUGIN_SRTP) || defined(GST_IOS_PLUGINS_NET) 828 | GST_PLUGIN_STATIC_REGISTER(srtp); 829 | #endif 830 | #if defined(GST_IOS_PLUGIN_WEBRTC) || defined(GST_IOS_PLUGINS_NET) 831 | GST_PLUGIN_STATIC_REGISTER(webrtc); 832 | #endif 833 | #if defined(GST_IOS_PLUGIN_SRT) || defined(GST_IOS_PLUGINS_NET) 834 | GST_PLUGIN_STATIC_REGISTER(srt); 835 | #endif 836 | #if defined(GST_IOS_PLUGIN_SCTP) || defined(GST_IOS_PLUGINS_NET) 837 | GST_PLUGIN_STATIC_REGISTER(sctp); 838 | #endif 839 | #if defined(GST_IOS_PLUGIN_NICE) || defined(GST_IOS_PLUGINS_NET) 840 | GST_PLUGIN_STATIC_REGISTER(nice); 841 | #endif 842 | #if defined(GST_IOS_PLUGIN_RTSPCLIENTSINK) || defined(GST_IOS_PLUGINS_NET) 843 | GST_PLUGIN_STATIC_REGISTER(rtspclientsink); 844 | #endif 845 | #if defined(GST_IOS_PLUGIN_PLAYBACK) || defined(GST_IOS_PLUGINS_PLAYBACK) 846 | GST_PLUGIN_STATIC_REGISTER(playback); 847 | #endif 848 | #if defined(GST_IOS_PLUGIN_GOOM) || defined(GST_IOS_PLUGINS_VIS) 849 | GST_PLUGIN_STATIC_REGISTER(goom); 850 | #endif 851 | #if defined(GST_IOS_PLUGIN_GOOM2K1) || defined(GST_IOS_PLUGINS_VIS) 852 | GST_PLUGIN_STATIC_REGISTER(goom2k1); 853 | #endif 854 | #if defined(GST_IOS_PLUGIN_AUDIOVISUALIZERS) || defined(GST_IOS_PLUGINS_VIS) 855 | GST_PLUGIN_STATIC_REGISTER(audiovisualizers); 856 | #endif 857 | #if defined(GST_IOS_PLUGIN_OPENGL) || defined(GST_IOS_PLUGINS_SYS) 858 | GST_PLUGIN_STATIC_REGISTER(opengl); 859 | #endif 860 | #if defined(GST_IOS_PLUGIN_OSXAUDIO) || defined(GST_IOS_PLUGINS_SYS) 861 | GST_PLUGIN_STATIC_REGISTER(osxaudio); 862 | #endif 863 | #if defined(GST_IOS_PLUGIN_APPLEMEDIA) || defined(GST_IOS_PLUGINS_SYS) 864 | GST_PLUGIN_STATIC_REGISTER(applemedia); 865 | #endif 866 | #if defined(GST_IOS_PLUGIN_SHM) || defined(GST_IOS_PLUGINS_SYS) 867 | GST_PLUGIN_STATIC_REGISTER(shm); 868 | #endif 869 | #if defined(GST_IOS_PLUGIN_ALPHA) || defined(GST_IOS_PLUGINS_EFFECTS) 870 | GST_PLUGIN_STATIC_REGISTER(alpha); 871 | #endif 872 | #if defined(GST_IOS_PLUGIN_ALPHACOLOR) || defined(GST_IOS_PLUGINS_EFFECTS) 873 | GST_PLUGIN_STATIC_REGISTER(alphacolor); 874 | #endif 875 | #if defined(GST_IOS_PLUGIN_AUDIOFX) || defined(GST_IOS_PLUGINS_EFFECTS) 876 | GST_PLUGIN_STATIC_REGISTER(audiofx); 877 | #endif 878 | #if defined(GST_IOS_PLUGIN_CAIRO) || defined(GST_IOS_PLUGINS_EFFECTS) 879 | GST_PLUGIN_STATIC_REGISTER(cairo); 880 | #endif 881 | #if defined(GST_IOS_PLUGIN_CUTTER) || defined(GST_IOS_PLUGINS_EFFECTS) 882 | GST_PLUGIN_STATIC_REGISTER(cutter); 883 | #endif 884 | #if defined(GST_IOS_PLUGIN_DEBUG) || defined(GST_IOS_PLUGINS_EFFECTS) 885 | GST_PLUGIN_STATIC_REGISTER(debug); 886 | #endif 887 | #if defined(GST_IOS_PLUGIN_DEINTERLACE) || defined(GST_IOS_PLUGINS_EFFECTS) 888 | GST_PLUGIN_STATIC_REGISTER(deinterlace); 889 | #endif 890 | #if defined(GST_IOS_PLUGIN_DTMF) || defined(GST_IOS_PLUGINS_EFFECTS) 891 | GST_PLUGIN_STATIC_REGISTER(dtmf); 892 | #endif 893 | #if defined(GST_IOS_PLUGIN_EFFECTV) || defined(GST_IOS_PLUGINS_EFFECTS) 894 | GST_PLUGIN_STATIC_REGISTER(effectv); 895 | #endif 896 | #if defined(GST_IOS_PLUGIN_EQUALIZER) || defined(GST_IOS_PLUGINS_EFFECTS) 897 | GST_PLUGIN_STATIC_REGISTER(equalizer); 898 | #endif 899 | #if defined(GST_IOS_PLUGIN_GDKPIXBUF) || defined(GST_IOS_PLUGINS_EFFECTS) 900 | GST_PLUGIN_STATIC_REGISTER(gdkpixbuf); 901 | #endif 902 | #if defined(GST_IOS_PLUGIN_IMAGEFREEZE) || defined(GST_IOS_PLUGINS_EFFECTS) 903 | GST_PLUGIN_STATIC_REGISTER(imagefreeze); 904 | #endif 905 | #if defined(GST_IOS_PLUGIN_INTERLEAVE) || defined(GST_IOS_PLUGINS_EFFECTS) 906 | GST_PLUGIN_STATIC_REGISTER(interleave); 907 | #endif 908 | #if defined(GST_IOS_PLUGIN_LEVEL) || defined(GST_IOS_PLUGINS_EFFECTS) 909 | GST_PLUGIN_STATIC_REGISTER(level); 910 | #endif 911 | #if defined(GST_IOS_PLUGIN_MULTIFILE) || defined(GST_IOS_PLUGINS_EFFECTS) 912 | GST_PLUGIN_STATIC_REGISTER(multifile); 913 | #endif 914 | #if defined(GST_IOS_PLUGIN_REPLAYGAIN) || defined(GST_IOS_PLUGINS_EFFECTS) 915 | GST_PLUGIN_STATIC_REGISTER(replaygain); 916 | #endif 917 | #if defined(GST_IOS_PLUGIN_SHAPEWIPE) || defined(GST_IOS_PLUGINS_EFFECTS) 918 | GST_PLUGIN_STATIC_REGISTER(shapewipe); 919 | #endif 920 | #if defined(GST_IOS_PLUGIN_SMPTE) || defined(GST_IOS_PLUGINS_EFFECTS) 921 | GST_PLUGIN_STATIC_REGISTER(smpte); 922 | #endif 923 | #if defined(GST_IOS_PLUGIN_SPECTRUM) || defined(GST_IOS_PLUGINS_EFFECTS) 924 | GST_PLUGIN_STATIC_REGISTER(spectrum); 925 | #endif 926 | #if defined(GST_IOS_PLUGIN_VIDEOBOX) || defined(GST_IOS_PLUGINS_EFFECTS) 927 | GST_PLUGIN_STATIC_REGISTER(videobox); 928 | #endif 929 | #if defined(GST_IOS_PLUGIN_VIDEOCROP) || defined(GST_IOS_PLUGINS_EFFECTS) 930 | GST_PLUGIN_STATIC_REGISTER(videocrop); 931 | #endif 932 | #if defined(GST_IOS_PLUGIN_VIDEOMIXER) || defined(GST_IOS_PLUGINS_EFFECTS) 933 | GST_PLUGIN_STATIC_REGISTER(videomixer); 934 | #endif 935 | #if defined(GST_IOS_PLUGIN_ACCURIP) || defined(GST_IOS_PLUGINS_EFFECTS) 936 | GST_PLUGIN_STATIC_REGISTER(accurip); 937 | #endif 938 | #if defined(GST_IOS_PLUGIN_AIFF) || defined(GST_IOS_PLUGINS_EFFECTS) 939 | GST_PLUGIN_STATIC_REGISTER(aiff); 940 | #endif 941 | #if defined(GST_IOS_PLUGIN_AUDIOFXBAD) || defined(GST_IOS_PLUGINS_EFFECTS) 942 | GST_PLUGIN_STATIC_REGISTER(audiofxbad); 943 | #endif 944 | #if defined(GST_IOS_PLUGIN_AUTOCONVERT) || defined(GST_IOS_PLUGINS_EFFECTS) 945 | GST_PLUGIN_STATIC_REGISTER(autoconvert); 946 | #endif 947 | #if defined(GST_IOS_PLUGIN_BAYER) || defined(GST_IOS_PLUGINS_EFFECTS) 948 | GST_PLUGIN_STATIC_REGISTER(bayer); 949 | #endif 950 | #if defined(GST_IOS_PLUGIN_COLOREFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) 951 | GST_PLUGIN_STATIC_REGISTER(coloreffects); 952 | #endif 953 | #if defined(GST_IOS_PLUGIN_CLOSEDCAPTION) || defined(GST_IOS_PLUGINS_EFFECTS) 954 | GST_PLUGIN_STATIC_REGISTER(closedcaption); 955 | #endif 956 | #if defined(GST_IOS_PLUGIN_DEBUGUTILSBAD) || defined(GST_IOS_PLUGINS_EFFECTS) 957 | GST_PLUGIN_STATIC_REGISTER(debugutilsbad); 958 | #endif 959 | #if defined(GST_IOS_PLUGIN_FIELDANALYSIS) || defined(GST_IOS_PLUGINS_EFFECTS) 960 | GST_PLUGIN_STATIC_REGISTER(fieldanalysis); 961 | #endif 962 | #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) 963 | GST_PLUGIN_STATIC_REGISTER(freeverb); 964 | #endif 965 | #if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) 966 | GST_PLUGIN_STATIC_REGISTER(frei0r); 967 | #endif 968 | #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) 969 | GST_PLUGIN_STATIC_REGISTER(gaudieffects); 970 | #endif 971 | #if defined(GST_IOS_PLUGIN_GEOMETRICTRANSFORM) || defined(GST_IOS_PLUGINS_EFFECTS) 972 | GST_PLUGIN_STATIC_REGISTER(geometrictransform); 973 | #endif 974 | #if defined(GST_IOS_PLUGIN_INTER) || defined(GST_IOS_PLUGINS_EFFECTS) 975 | GST_PLUGIN_STATIC_REGISTER(inter); 976 | #endif 977 | #if defined(GST_IOS_PLUGIN_INTERLACE) || defined(GST_IOS_PLUGINS_EFFECTS) 978 | GST_PLUGIN_STATIC_REGISTER(interlace); 979 | #endif 980 | #if defined(GST_IOS_PLUGIN_IVTC) || defined(GST_IOS_PLUGINS_EFFECTS) 981 | GST_PLUGIN_STATIC_REGISTER(ivtc); 982 | #endif 983 | #if defined(GST_IOS_PLUGIN_LEGACYRAWPARSE) || defined(GST_IOS_PLUGINS_EFFECTS) 984 | GST_PLUGIN_STATIC_REGISTER(legacyrawparse); 985 | #endif 986 | #if defined(GST_IOS_PLUGIN_PROXY) || defined(GST_IOS_PLUGINS_EFFECTS) 987 | GST_PLUGIN_STATIC_REGISTER(proxy); 988 | #endif 989 | #if defined(GST_IOS_PLUGIN_REMOVESILENCE) || defined(GST_IOS_PLUGINS_EFFECTS) 990 | GST_PLUGIN_STATIC_REGISTER(removesilence); 991 | #endif 992 | #if defined(GST_IOS_PLUGIN_SEGMENTCLIP) || defined(GST_IOS_PLUGINS_EFFECTS) 993 | GST_PLUGIN_STATIC_REGISTER(segmentclip); 994 | #endif 995 | #if defined(GST_IOS_PLUGIN_SMOOTH) || defined(GST_IOS_PLUGINS_EFFECTS) 996 | GST_PLUGIN_STATIC_REGISTER(smooth); 997 | #endif 998 | #if defined(GST_IOS_PLUGIN_SPEED) || defined(GST_IOS_PLUGINS_EFFECTS) 999 | GST_PLUGIN_STATIC_REGISTER(speed); 1000 | #endif 1001 | #if defined(GST_IOS_PLUGIN_SOUNDTOUCH) || defined(GST_IOS_PLUGINS_EFFECTS) 1002 | GST_PLUGIN_STATIC_REGISTER(soundtouch); 1003 | #endif 1004 | #if defined(GST_IOS_PLUGIN_VIDEOFILTERSBAD) || defined(GST_IOS_PLUGINS_EFFECTS) 1005 | GST_PLUGIN_STATIC_REGISTER(videofiltersbad); 1006 | #endif 1007 | #if defined(GST_IOS_PLUGIN_WEBRTCDSP) || defined(GST_IOS_PLUGINS_EFFECTS) 1008 | GST_PLUGIN_STATIC_REGISTER(webrtcdsp); 1009 | #endif 1010 | #if defined(GST_IOS_PLUGIN_LADSPA) || defined(GST_IOS_PLUGINS_EFFECTS) 1011 | GST_PLUGIN_STATIC_REGISTER(ladspa); 1012 | #endif 1013 | #if defined(GST_IOS_PLUGIN_AUDIOBUFFERSPLIT) || defined(GST_IOS_PLUGINS_EFFECTS) 1014 | GST_PLUGIN_STATIC_REGISTER(audiobuffersplit); 1015 | #endif 1016 | #if defined(GST_IOS_PLUGIN_CAMERABIN) || defined(GST_IOS_PLUGINS_CAPTURE) 1017 | GST_PLUGIN_STATIC_REGISTER(camerabin); 1018 | #endif 1019 | #if defined(GST_IOS_PLUGIN_ASSRENDER) || defined(GST_IOS_PLUGINS_CODECS_GPL) 1020 | GST_PLUGIN_STATIC_REGISTER(assrender); 1021 | #endif 1022 | #if defined(GST_IOS_PLUGIN_ASFMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1023 | GST_PLUGIN_STATIC_REGISTER(asfmux); 1024 | #endif 1025 | #if defined(GST_IOS_PLUGIN_DTSDEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1026 | GST_PLUGIN_STATIC_REGISTER(dtsdec); 1027 | #endif 1028 | #if defined(GST_IOS_PLUGIN_MPEGPSDEMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1029 | GST_PLUGIN_STATIC_REGISTER(mpegpsdemux); 1030 | #endif 1031 | #if defined(GST_IOS_PLUGIN_MPEGPSMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1032 | GST_PLUGIN_STATIC_REGISTER(mpegpsmux); 1033 | #endif 1034 | #if defined(GST_IOS_PLUGIN_MPEGTSDEMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1035 | GST_PLUGIN_STATIC_REGISTER(mpegtsdemux); 1036 | #endif 1037 | #if defined(GST_IOS_PLUGIN_MPEGTSMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1038 | GST_PLUGIN_STATIC_REGISTER(mpegtsmux); 1039 | #endif 1040 | #if defined(GST_IOS_PLUGIN_VOAACENC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1041 | GST_PLUGIN_STATIC_REGISTER(voaacenc); 1042 | #endif 1043 | #if defined(GST_IOS_PLUGIN_A52DEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1044 | GST_PLUGIN_STATIC_REGISTER(a52dec); 1045 | #endif 1046 | #if defined(GST_IOS_PLUGIN_AMRNB) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1047 | GST_PLUGIN_STATIC_REGISTER(amrnb); 1048 | #endif 1049 | #if defined(GST_IOS_PLUGIN_AMRWBDEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1050 | GST_PLUGIN_STATIC_REGISTER(amrwbdec); 1051 | #endif 1052 | #if defined(GST_IOS_PLUGIN_ASF) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1053 | GST_PLUGIN_STATIC_REGISTER(asf); 1054 | #endif 1055 | #if defined(GST_IOS_PLUGIN_DVDSUB) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1056 | GST_PLUGIN_STATIC_REGISTER(dvdsub); 1057 | #endif 1058 | #if defined(GST_IOS_PLUGIN_DVDLPCMDEC) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1059 | GST_PLUGIN_STATIC_REGISTER(dvdlpcmdec); 1060 | #endif 1061 | #if defined(GST_IOS_PLUGIN_XINGMUX) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1062 | GST_PLUGIN_STATIC_REGISTER(xingmux); 1063 | #endif 1064 | #if defined(GST_IOS_PLUGIN_REALMEDIA) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1065 | GST_PLUGIN_STATIC_REGISTER(realmedia); 1066 | #endif 1067 | #if defined(GST_IOS_PLUGIN_X264) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1068 | GST_PLUGIN_STATIC_REGISTER(x264); 1069 | #endif 1070 | #if defined(GST_IOS_PLUGIN_LIBAV) || defined(GST_IOS_PLUGINS_CODECS_RESTRICTED) 1071 | GST_PLUGIN_STATIC_REGISTER(libav); 1072 | #endif 1073 | #if defined(GST_IOS_PLUGIN_RTMP) || defined(GST_IOS_PLUGINS_NET_RESTRICTED) 1074 | GST_PLUGIN_STATIC_REGISTER(rtmp); 1075 | #endif 1076 | #if defined(GST_IOS_PLUGIN_NLE) || defined(GST_IOS_PLUGINS_GES) 1077 | GST_PLUGIN_STATIC_REGISTER(nle); 1078 | #endif 1079 | 1080 | /* Lower the ranks of filesrc and giosrc so iosavassetsrc is 1081 | * tried first in gst_element_make_from_uri() for file:// */ 1082 | reg = gst_registry_get(); 1083 | plugin = gst_registry_lookup_feature(reg, "filesrc"); 1084 | if (plugin) 1085 | gst_plugin_feature_set_rank(plugin, GST_RANK_SECONDARY); 1086 | plugin = gst_registry_lookup_feature(reg, "giosrc"); 1087 | if (plugin) 1088 | gst_plugin_feature_set_rank(plugin, GST_RANK_SECONDARY-1); 1089 | } 1090 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## GStreamerSwiftUIDemo 2 | 3 | A demo app that uses gstreamer with a SwiftUI interface to display a local RTSP feed. 4 | 5 | **Note**: Before building the app, change the RTSP address [here](https://github.com/borarak/GStreamerSwiftUIDemo/blob/9d257a84243bd4c9063f1909020eae028bf3a319/GStreamerSwiftUIDemo/GStreamerBackend.m#L163) to a valid one. 6 | 7 | 8 | ![play](screenshot_2.png) -------------------------------------------------------------------------------- /screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/borarak/GStreamerSwiftUIDemo/e21e43a4cdec2718a5e8efb42ec3d1280f56d77a/screenshot_1.png -------------------------------------------------------------------------------- /screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/borarak/GStreamerSwiftUIDemo/e21e43a4cdec2718a5e8efb42ec3d1280f56d77a/screenshot_2.png -------------------------------------------------------------------------------- /screenshot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/borarak/GStreamerSwiftUIDemo/e21e43a4cdec2718a5e8efb42ec3d1280f56d77a/screenshot_3.png --------------------------------------------------------------------------------