We've been hard at work doing numerous small and large improvements to GStreamer for people who want to target Apple platforms: macOS, iOS, and tvOS.
iOS ARM64 Simulator Support via an XCFramework
With the GStreamer 1.28.0 release, the project now releases an XCFramework for iOS. As expected, this XCFramework supports iOS arm64, iOS Simulator x86_64, and iOS Simulator arm64. The legacy iOS framework that lipo-ed iOS arm64 and iOS Simulator x86_64 is now deprecated, and will be removed in a future release.
You can download the XCFramework from the official download page.
Thanks to Amy for helping me with this!
tvOS Support
As of version 1.28.1, GStreamer officially supports tvOS, and binaries for it
are shipped as part of the iOS XCFramework.
This means that the GStreamer 1.28.1 iOS XCFramework contains: ios-arm64,
ios-arm64_x86_64-simulator, tvos-arm64, tvos-arm64_x86_64-simulator.
Most of the relevant Apple-specific plugins are supported:
osxaudio: Audio source/sink, using CoreAudioatdec: Audio decoder, using AudioToolboxatenc: Audio encoder, using AudioToolboxvtdec: Video decoder, using VideoToolboxvtenc: Video encoder, using VideoToolboxglimagesink: Deprecated EAGL video sinkvulkansink: Metal-based video sink, using MoltenVKvulkancolorconvert: Metal-accelerated video conversion, using MoltenVKvulkanoverlaycompositor: Metal-accelerated video overlay compositor, using MoltenVK- ... more Metal/Vulkan elements
Two elements that use AVCaptureDevice had to be disabled because they need
more work to support tvOS:
avfvideosrc: Video capture source, using AVFoundationavfdeviceprovider: Video capture device provider, using AVFoundation
Thanks to Remote Studio for sponsoring this work!
Improved support for using Rust plugins on Apple platforms
Linking more than one Rust plugin into your app had been broken on macOS and iOS for some time. The fix for that requires prelinking, which Amy has written about previously, but it couldn't be enabled on macOS due to some LLVM/LLD issues. We had to wait for the fixes to percolate down to a Rust toolchain release. That finally happened in Rust 1.93, but by that time a new problem had cropped up: Xcode 26.
Due to some toolchain changes in Xcode 26, linking Rust plugins was
failing
on macOS and also on iOS with the legacy framework. After weighing all the
options, the best solution was to add -no_compact_unwind to the linker flags
on macOS, and direct people to use the XCFramework when using Rust plugins on
iOS.
This is now added automatically if you use pkg-config (using CMake or Meson,
for example), but if you're using a plain Xcode project, you need to add
-no_compact_unwind manually to linker flags in Xcode.
This fix will be available in the upcoming 1.28.3 release.
Many more macOS, iOS, tvOS improvements
Contributors have been hard at work with small and large improvements
to the Apple-specific elements in GStreamer. Ranging from
AV1
and VP9
decoding support in vtdec to better debug info,
bugfixes, memory leak fixes, crash fixes, and much more.
The patches are too many to list or even link!