Skip to content

Control center, smooth seeking and skipping support

Pre-release
Pre-release
Compare
Choose a tag to compare
@defagos defagos released this 27 Feb 12:49
· 475 commits to main since this release
193c8cf

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