Skip to content

Releases: SRGSSR/pillarbox-apple

Documentation

05 Dec 07:24
6f88994
Compare
Choose a tag to compare
Documentation Pre-release
Pre-release

This release adds integration documentation (articles and tutorials).

Demo changes

  • Remove some test streams.

Fixes

  • Hide Picture in Picture classes that were incorrectly exposed publicly.

What's Changed

Full Changelog: 0.7.0...0.8.0

Picture in Picture support

24 Nov 09:08
0.7.0
0d7f659
Compare
Choose a tag to compare
Pre-release

This release introduces support for Picture in Picture.

Picture in Picture

  • Added basic Picture in Picture support to VideoView.
  • Implemented basic Picture in Picture support for SystemVideoView.
  • Support advanced Picture in Picture integration.

Miscellaneous Improvements

  • Added translations.
  • Improved visibility tracking with VoiceOver enabled.
  • Consolidated player publishers.
  • Removed all workarounds created for AirPlay.
  • Updated documentation.
  • Reduced the frequency of playback rate updates sent to analytics.
  • Enhanced playback speed support implementation.
  • Improved the demo application.
  • Enhanced player item tracker API and stream type transition support.
  • Simplified background video measurement management for comScore.

Fixes

  • Corrected custom slider animation.
  • Addressed flaky tests.
  • Resolved seek bar slowness caused by media selection.
  • Mitigated performance issues related to media selection criteria retrieval.
  • Preserved media selection characteristics between selections.
  • Fixed media selection issues when altering the current selection programmatically.

What's Changed

  • Translate packages by @defagos in #574
  • Improve visibility tracking with VoiceOver enabled by @defagos in #575
  • Consolidate player publishers by @waliid in #587
  • Fix custom slider animation by @defagos in #589
  • Update Commanders Act and comScore SDKs by @defagos in #588
  • Fix flaky tests by @defagos in #594
  • Remove all workarounds made for AirPlay by @waliid in #591
  • Fix seek bar slowness due to media selection by @waliid in #590
  • Mitigate media selection criteria retrieval performance issues by @defagos in #596
  • Preserve media selection characteristics between selections by @defagos in #597
  • Update gems and some docs by @waliid in #592
  • Fix media selection issues when altering current selection programmatically by @defagos in #600
  • Minimize the frequency of playback rate updates sent to analytics by @waliid in #599
  • Improve playback speed support implementation by @defagos in #601
  • Share current item publisher for consistency by @defagos in #602
  • Display the URL cache size by @waliid in #604
  • Remove superfluous observation by @defagos in #608
  • Make routing management global by @defagos in #621
  • Add basic Picture in Picture support to VideoView by @defagos in #623
  • Support advanced PiP integration by @waliid in #624
  • Remove superfluous PiP identifier by @defagos in #625
  • Implement a style to prevent redundant menus in the macOS app by @waliid in #627
  • Add the support of the Picture in Picture for the system video view by @waliid in #628
  • Document Picture in Picture integration by @defagos in #629
  • Restore from Picture in Picture earlier by @defagos in #630
  • Fix the display issue related to clearing the cache by @waliid in #633
  • Support Picture in Picture in playlists by @waliid in #631
  • Correct the deferred seek by @waliid in #632
  • Sort BUs by alphabetical order by @waliid in #635
  • Add source code access for showcases by @waliid in #634
  • Fix the path for accessing the source code by @waliid in #637
  • Improve setting support by @defagos in #638
  • Point at matching source code version by @defagos in #640
  • Add TestFlight link by @defagos in #641
  • Remove UIKit-oriented APIs by @defagos in #642
  • Enable new rules introduced in SwiftLint 0.53.0 by @defagos in #645
  • Add GitHub shortcuts by @waliid in #643
  • Display SRG SSR media duration in minutes by @defagos in #644
  • Remove useless imports by @waliid in #646
  • Improve player item tracker API and stream type transition support by @defagos in #647
  • Remove overly complicated background video measurement management for comScore by @defagos in #649

Full Changelog: 0.6.0...0.7.0

Audio tracks, subtitles and user consent

18 Sep 08:20
67a4367
Compare
Choose a tag to compare

This release adds support for audio tracks and subtitles.

Audio tracks and subtitles

  • Add media selection APIs to retrieve available and selected audio tracks and subtitles or to change the current selection.
  • Display forced subtitles when available.
  • Automatically prefer tracks intended for Audio Description and SDH & CC depending on device accessibility settings.
  • Override media selection programmatically.
  • Override subtitle text style programmatically (WebVTT only).
  • Provide standard menu for audio tracks and subtitles.

Global analytics labels and user consent support

  • You can optionally provide an AnalyticsDataSource when starting Analytics. This data source can be used to deliver global labels in all comScore and Commanders Act events.
  • User consent can be provided in comScore and Commanders Act global labels.

Breaking changes

  • The restart and canRestart APIs have been renamed as replay and canReplay respectively. These APIs now always resume playback if needed.

Miscellaneous improvements

  • Prevent playback of content containing at least a blocked segment.
  • Improve automatic visibility management.
  • Improve SRG SSR resource resolution to prefer HLS streams when available, most notably for SWI content.
  • Add playbackSpeed binding API.
  • Provide playback speed selection in standard menu API.
  • Remove unused Diagnostics and UserInterface packages.
  • Remove unused Google Cast SDK dependency.

Fixes

  • Fix playback crashing when seeking near the end of some streams.
  • Always send uptime to Commanders Act for livestreams, no matter the offset from the live edge.
  • Fix player leak on tvOS.
  • Fix never-ending slider interactions.
  • Retrieve SRG SSR metadata on a device basis (vector).
  • Fix unplayable RTS audio content.

What's Changed

  • Update CI documentation for reliable git-describe results by @defagos in #497
  • Generate local stream for subtitles and audio tracks by @waliid in #498
  • Add support for subtitles and audio tracks by @defagos in #516
  • Reduce stale bot threshold by @defagos in #517
  • Retrieve media composition specific to supported vectors by @defagos in #519
  • Avoid sound playing for a short while after system player UI dismissal on tvOS by @defagos in #522
  • Add WWDC Keynote stream to examples by @defagos in #525
  • Keep user interface visible when seeking within an audio by @defagos in #527
  • Properly ensure menu item ordering by @defagos in #529
  • Always send uptime for livestreams by @defagos in #531
  • Replace deprecated stale bot with maintained one by @defagos in #530
  • Use view modifiers where appropriate by @defagos in #532
  • Show user interface when returning to the foreground while not playing by @defagos in #526
  • Fix neverending custom slider interactions by @defagos in #528
  • Add support for forced subtitles by @defagos in #533
  • Show user interface when playback is paused by @defagos in #535
  • Add SDH and CC support by @defagos in #536
  • Update correctly subtitle selection by @waliid in #538
  • Update advice about automatic audio rendition selection by @defagos in #539
  • Enhancing the media selection options by @waliid in #544
  • Update YouTubeKit by @waliid in #543
  • Support subtitle appearance customization by @defagos in #545
  • Improve default language ordering by @waliid in #546
  • Add priority on supported streaming methods by @waliid in #547
  • Reset media selection context when no item is being played by @defagos in #549
  • Make efficient seeks near the end of the available range safe by @waliid in #550
  • Rename restart API as replay by @defagos in #551
  • Add audio tracks and subtitles analytics by @waliid in #552
  • Fix media composition parsing by @waliid in #554
  • Use page name instead of content title for Commanders Act by @waliid in #557
  • Prevent any chapter from being played if one of its segments is blocked by @defagos in #558
  • Add support for user consent by @waliid in #561
  • Cleanup unused packages and dependencies by @defagos in #565
  • Use Commanders Act debug source key in unit tests by @defagos in #563
  • Revisit menu API by @defagos in #570
  • Update for Xcode 15 and iOS / tvOS 17 support by @defagos in #569

Full Changelog: 0.5.1...0.6.0

Enhancements and bug fix

28 Jul 06:21
f720c89
Compare
Choose a tag to compare
Pre-release

This update includes several enhancements and a bug fix.

Enhancements

  • The default Commanders Act logging is now used.
  • The auto-hide standard delay has been reduced from 4 to 3 seconds.
  • Full-screen functionality has been improved on iPad.
  • A PasteButton has been added to the Examples view to paste URLs more easily.
  • Player and analytics versions have been introduced.

Bug Fix

  • The usage of the PhaseAnimator has been removed to avoid freezing the UI on iOS 17 Beta 4.

What's Changed

Full Changelog: 0.5.0...0.5.1

Standard SRG SSR analytics

24 Jul 11:34
0.5.0
2989188
Compare
Choose a tag to compare
Pre-release

This Pillarbox release implements standard SRG SSR streaming analytics. It also provides the necessary toolset to measure page views and events in SRG SSR applications.

This release also adds support for playback speed controls and makes it possible to promote a single instance for system integration in the context of multi-instance player experiences.

Analytics must still be validated but otherwise Pillarbox can be considered suitable for production.

Standard SRG SSR analytics

Standard SRG SSR analytics (comScore / Mediapulse and Commanders Act / Mapp) have been added:

  • Introduce Analytics singleton to manage analytics setup as well as page view and event tracking.
  • Implement standard ComScoreTracker and CommandersAct stream trackers. These trackers are automatically associated with URN-based items played using CoreBusiness but can also be integrated with other data sources if needed.
  • Provide helpers for user interface tracking:
    • PageViewTracking makes it possible to associate page view analytics metadata with view controllers in UIKit contexts.
    • PageViewContainerTracking can be used to integrate custom view controllers with the page view analytics engine. Integration with standard UIKit containers (UINavigationController, UITabBarController, etc.) is provided.
    • Modifiers for declarative view tracking in SwiftUI contexts.
  • Provide helpers for event tracking.

Playback speed

Playback speed support has been added to the Player. Applications are responsible of displaying associated controls however they like:

  • Add APIs to set a desired playback speed, retrieve the available speed range and the currently effective playback speed.
  • Implement support for livestreams, including dynamic speed adjustments for DVR.
  • Support playback speed in playlists.

Multi-instance support

  • Several instances have always been supported by Pillarbox but this release adds APIs to promote one instance for integration into the Control Center and with AirPlay.

Miscellaneous improvements

  • A BufferTracker has been introduced to to be notified about content buffering, in a way similar to ProgressTracker.
  • The LayoutReader view has been replaced by a View.readLayout(into:) modifier which is more convenient to use.
  • The InteractionView detecting any kind of user interaction has been removed. Use a combination of gesture recognizers to detect user interaction and report them to a VisibilityTracker instead.
  • Improve seek smoothness to match the native system user experience.
  • Add muted playback support.
  • Provide presentation size information, which can be used to determine the content aspect ratio and adjust the player layout accordingly.
  • Add overlay support to SystemVideoView.
  • Ensure proper support for Xcode 15 and iOS / iPadOS / tvOS 17 beta.
  • Automatically enable body counters display in Xcode previews.

Demo improvements and fixes

  • Improve slider appearance and behavior.
  • Add ability to play YouTube content for tests purposes.
  • Add playback speed support.
  • Add full-screen support to the playlist demo.
  • Add blurred layout example.
  • Add demo descriptions.
  • Add more sample streams.
  • Automatically resume playback when returning from background in selected demos.
  • Fix server selection.

Fixes

  • Rename Environment as Server to avoid frequent conflicts with SwiftUI Environment.
  • Support for iPad applications run on Silicon Macs has been restored.

What's Changed

Read more

Custom tracking support

04 Apr 05:17
fbebd11
Compare
Choose a tag to compare
Pre-release

This Pillarbox alpha release adds custom tracking implementation. It also introduces several tools making player user interface implementation richer and fixes end of playback behavior. This pre-release is not complete yet but can be used for early adoption in app prototypes.

Custom tracking support

  • Custom stream trackers can be implemented using the PlayerItemTracker protocol. Trackers can be used for all sorts of purposes, from analytics data collection to saving the current playback position into a history.
  • Player items can be associated with a list of trackers through dedicated adapters, matching the output of their asset publisher to the input required by a tracker.
  • Trackers associated with a player can be enabled or disabled on-the-fly at any time.

Note that official SRG trackers have not been implemented and are expected for the next release.

End of playback behavior

Behavior at the end of playback has been made consistent:

  • Control center information is correctly cleared when the current playlist has been exhausted.
  • Correct end of playback detection is possible, making it possible to provide a dedicated user interface (e.g. a restart button).
  • A restart API is provided by Player to make it easier to implement end of playback experiences.

User interface implementation

  • An InteractionView view has been added to detect user interaction in a specific area. This can be for example useful to ensure a custom user interface remains visible while the user is still interacting with it.
  • A LayoutReader view has been added to detect whether some area is covering the full screen or the current context. This view can be used to implement behaviors depending on user interface screen coverage.

Miscellaneous improvements

  • Seeking to the default position has been improved for DVR livestreams.
  • Add preventsDisplaySleepDuringVideoPlayback to the player configuration to make it possible to control whether device is allowed to sleep during playback.
  • The type of the media currently being played is now provided by the Player.
  • Make interactive seeks snappier.

Demo improvements

  • A Lists tab has been added, with which almost all Play SRG content can be browsed.
  • An environment selector is available from the Lists tab.
  • A Search tab has been added, with which content can be searched across all business units.
  • The user interface can be toggled with a tap gesture.
  • Video can be zoomed in with a pinch gesture.
  • DRM and token-protected examples are updated automatically with recent content.
  • URNs and URLs can be directly played from the Examples tab.
  • The player displays an audio icon when audio content is played.
  • The player user interface cannot be toggled while using AirPlay or playing audio.
  • Add player layout selection to the demo settings (remark: The system player currently leaks resources).

Fixes

  • Fix incorrect type briefly reported for on-demand audio content.

What's Changed

  • Display version information in the demo settings by @waliid in #276
  • Fix test instabilities with ephemeral sessions by @defagos in #279
  • Load IL media lists in demo by @waliid in #282
  • Fix Fastlane xcversion warning by @defagos in #283
  • Load DRM and token protected examples dynamically by @waliid in #284
  • Add a basic search to the demo by @waliid in #285
  • Direct url and urn entry in the demo by @waliid in #286
  • Improve demo application by @defagos in #287
  • Add some icons for the list sections by @waliid in #291
  • Improve seek to default behavior for DVR streams by @defagos in #293
  • Add server selection to demo by @waliid in #294
  • Manage user interface visibility support by @defagos in #295
  • Add pinch to zoom support to the demo player by @defagos in #302
  • Fix briefly incorrect stream type for AOD content by @defagos in #303
  • Improve view wrappers by @defagos in #307
  • Make behavior consistent at the end of a playback by @waliid in #309
  • Add parameter to control device sleep during video playback by @defagos in #313
  • Keep the controls displayed when AirPlay is enabled by @waliid in #314
  • Inhibit layout info updates during rotation by @defagos in #316
  • Add player layout selection setting to the iOS demo by @defagos in #319
  • Extract media type by @waliid in #321
  • Add make command to update SPM dependencies by @waliid in #322
  • Make interactive seeks snappier by @defagos in #320
  • Add custom tracker support by @defagos in #325
  • Improve project structure by @defagos in #326
  • Deliver the tracker metadata from a publisher by @waliid in #328
  • Flag for tracking activation/deactivation by @waliid in #329
  • Update swiftlint to version 0.51.0 by @defagos in #330
  • Add a way to use an adapter without any configuration or any mapper by @waliid in #331

Full Changelog: 0.3.0...0.4.0

Control center, smooth seeking and skipping support

27 Feb 12:49
193c8cf
Compare
Choose a tag to compare

This Pillarbox alpha release adds control center integration. It also introduces several user experience and stability improvements related to seeking in general. This pre-release is not complete yet but can be used for early adoption in app prototypes.

Control center support:

  • Metadata can be attached to assets loaded by a player item and is automatically displayed in the control center (including an artwork image when provided).
  • Asset metadata is automatically retrieved for SRG SSR content and displayed in the control center.
  • The following playback controls are available from the control center:
    • Play / pause button.
    • Skip forward / skip backward buttons.
    • Seek bar (replaced with a LIVE label for livestreams without DVR).
    • Playlist navigation (supersedes skip buttons when several items are loaded in the player).

Seeking improvements and skipping

  • Smooth seeking support has been added. Smooth seeking ensures that pending seek requests are executed before any more recent request is addressed. This provides for a better seek user experience overall, letting users peek at video content during seeks.
  • Backward and forward skipping have been added. Skipping uses smooth seeking and intervals are fully configurable.
  • The skip to live APIs have been replaced with skip to default APIs which apply to all kinds of streams (returning to the start of an on-demand stream or to live conditions for a DVR stream).

Playlist navigation improvements

  • Smart navigation has been implemented. With smart navigation enabled the current item is returned to its beginning when navigating the playlist back, provided the playhead position is not located within the first few seconds of the current item. Otherwise playback moves to the previous item. Smart navigation provides a playlist navigation user experience similar to the one usually expected from audio apps and is therefore the default.

Miscellaneous improvements

  • New PlayerConfiguration settings have been added (skip intervals, smart playlist navigation).
  • The isBusy player property informs when the player is busy in a usual sense (buffering or seeking).

Demo improvements

  • Skip buttons have been added to seek forward or backward in 10 second increments.
  • The LIVE label can be tapped to return to live conditions even for streams that do not support DVR.
  • The activity indicator is now displayed when the player is generally busy.
  • Tapping the current playlist item in the playlist demo returns playback to the default position.
  • Settings have been improved:
    • A smart navigation setting has been added.
    • A description has been added for settings whose name is not obvious to understand what they control.
    • Debugging buttons have been added to clear the local URL cache or simulate a memory warning.

Fixes

  • Fix playback sometimes randomly failing for no reason.
  • Make progress tracking more precise and reliable.
  • Time range, item duration and stream type properties are not stored or published anymore to avoid slight potential mismatches with their current player state as seen from the low-level player. They are now always retrieved from the current low-level player state instead.
  • Periodic time publishers now behave like their underlying time observers, i.e. they do not emit additional values on connect or when playback of the last item finishes.
  • The API for player item creation from a URN has been made simpler and more consistent.
  • The similarity operator introduced in Circumspect has been renamed as ~~ to avoid conflicts with the pattern matching operator ~=.

Known limitations

  • All player instances are currently integrated with the control center. Until an official API is provided there is therefore currently no way to choose which player instance should be attached to the control center in a multi-instance context.

What's Changed

  • Improve continuous integration workflow by @defagos in #203
  • Deliver textual asset metadata by @defagos in #212
  • 205 now playing session metadata by @waliid in #213
  • Support playlist navigation from the control center by @defagos in #217
  • Now playing artwork delivery by @waliid in #223
  • Improve code by @defagos in #226
  • Improve control center seek support by @defagos in #227
  • Improve linter git hook to check only swift files in the staging area by @waliid in #230
  • Add support for skips backward and forward by @defagos in #231
  • Improve control center metadata by @defagos in #233
  • Enable more SwiftLint rules by @defagos in #232
  • Fix continuous integration by @defagos in #235
  • 214 enable or disable control center buttons by @waliid in #236
  • Add explanation to obscure demo settings by @defagos in #253
  • Add memory warning simulation button to the demo settings by @defagos in #251
  • Add URL cache cleaning button to the demo by @defagos in #252
  • Fix issues when seeking near the end of a stream by @defagos in #238
  • Fix behavior when skipping several times in a row by @defagos in #257
  • Make smooth seeking the default behavior by @defagos in #260
  • Add documentation for custom player items by @defagos in #261
  • Update project description by @defagos in #264
  • Add seek to default position support by @waliid in #262
  • Improve skip behavior near the end of a stream by @waliid in #265
  • Enable GitHub merge queue by @defagos in #263
  • Improve demo settings by @defagos in #271
  • Retry target seek until it finishes by @defagos in #268
  • Try to mitigate tests that sometimes fail by @waliid in #272
  • Introduce syntactic sugar for expressing times and tolerances by @defagos in #269
  • Use more tolerant Nimble defaults by @defagos in #273
  • Update DRM and token-protected examples by @defagos in #274

Full Changelog: 0.2.0...0.3.0

AirPlay, video background playback and improved playlist support

16 Jan 08:17
15d04c4
Compare
Choose a tag to compare

This Pillarbox alpha release adds AirPlay and video background playback. It also improves playlist management and the associated API. This pre-release is far from complete but can be used for early adoption in app prototypes.

Features

  • AirPlay support for all Player instances by default. The player configuration can be altered to disable AirPlay support for a specific instance.
  • ProgressTracker can be used to update parts of the view hierarchy periodically during playback.
    • Progress trackers make it possible to optimize user interface updates so that high refresh rates are limited to specific view hierarchy subsets only. Several instances can also be used to updates separate subsets of the view hierarchy at different rates.
    • Progress trackers can also be used to update progress interactively, e.g. with a slider. Seeking can either be continuous during interaction or only performed when interaction ends.
  • SystemVideoView provides the standard iOS / tvOS playback experience for the Pillarbox player.
  • Background video playback can be enabled in the player configuration.

Demo improvements

  • The playlist demo has been vastly improved. Items can now be added, removed or rearranged during playback.
  • Progress bars and sliders are now updated every 1/10 second.
  • A settings tab has been added with the following features:
    • A presenter mode has been added. This mode makes taps visible and ensures that playback does not switch to full-screen while mirroring the app over AirPlay.
    • A debugging option makes it possible to visualize view updates in most demo players.
    • Player configuration can be configured (AirPlay and background video playback support).
  • Examples are better organized. Please note that some examples are short-lived (e.g. DRM or Akamai-protected content) and might not be playable. The demo will later be improved so that recent valid content can be played.

Fixes

  • On-demand streams are never reported as DVR streams anymore.
  • Several issues affecting playlist support (most notably playback interruptions when updating items) have been fixed.

What's Changed

  • Update SwiftLint to version 0.50.0 by @defagos in #150
  • Integrate presenter mode in the demo by @defagos in #151
  • Decouple progress from player by @defagos in #152
  • Fix incorrect stream type shortly reported when playing an on-demand stream by @defagos in #156
  • Use local private types instead of private extensions by @defagos in #159
  • 134 add airplay support by @waliid in #164
  • Improve playlist demo by @waliid in #165
  • Update vertical video example by @defagos in #182
  • Integrate Pillarbox with Apple VideoPlayer by @defagos in #184
  • AirPlay player configuration by @waliid in #187
  • Update continuous integration setup documentation by @defagos in #188
  • Add AirPlay player state Boolean by @waliid in #190
  • Background video playback by @waliid in #192
  • Share useful Git hooks by @waliid in #197
  • Mitigate playback issues when seeking near the end of a stream by @defagos in #196

Full Changelog: 0.1.0...0.2.0

SRG SSR content playback

21 Nov 08:38
0.1.0
fc3a534
Compare
Choose a tag to compare
Pre-release

This is the first alpha release for Pillarbox, with which SRG SSR content can be played, although with minimal features and no provided user interface. This pre-release is far from complete but can be used for early adoption in app prototypes.

Features

  • A player which can play SRG SSR contents (videos and audios, on-demand and livestreams, protected or not).
  • Playlist support.
  • Basic view components (video view and slider) with which simple user interfaces can be built.

What's Changed

Full Changelog: https://github.com/SRGSSR/pillarbox-apple/commits/0.1.0