Releases: SRGSSR/pillarbox-android
2.3.0
What's Changed
- PLAY-6636 CommandersAct media event send media_audiodescription_on by @StaehliJ in #629
- Use local MediaComposition for Live urns by @StaehliJ in #633
- Bump robolectric from 4.12.2 to 4.13 by @dependabot in #630
- Bump Gradle from 8.8 to 8.9 by @MGaetan89 in #636
- Bump mockk from 1.13.11 to 1.13.12 by @dependabot in #641
- Bump android-gradle-plugin from 8.5.0 to 8.5.1 by @dependabot in #642
- Bump the androidx group with 3 updates by @dependabot in #640
- Bump kotlinx-kover from 0.8.2 to 0.8.3 by @dependabot in #647
- Bump coil from 2.6.0 to 2.7.0 by @dependabot in #648
- Update to AndroidX Media3 1.4.0 by @MGaetan89 in #618
- Move
TVSlider
topillarbox-demo-shared
by @MGaetan89 in #650 - Remove leanback by @MGaetan89 in #651
- Bump com.autonomousapps.dependency-analysis from 1.32.0 to 1.33.0 by @dependabot in #661
- Bump the androidx group with 10 updates by @dependabot in #660
- Enable edge-to-edge in the demo application by @MGaetan89 in #658
- Add argument to set
Player.getMaxSeekToPreviousPosition
when creating aPillarboxExoPlayer
by @MGaetan89 in #659
Full Changelog: 2.2.1...2.3.0
2.2.1
This release updates AndroidX Lifecycle to 2.8.3, to fix an issue with code shrinking.
What's Changed
- Bump kotlinx-kover from 0.8.1 to 0.8.2 by @dependabot in #622
- Cherry-pick test changes from #615 by @MGaetan89 in #620
- Update AndroidX Lifecycle to 2.8.3 by @MGaetan89 in #617
- Bump kotlinx-serialization from 1.7.0 to 1.7.1 by @dependabot in #623
- Improve version regex and add tests by @MGaetan89 in #616
Full Changelog: 2.2.0...2.2.1
2.2.0
Fixes
- Fix wrong
media_position
send to CommandersAct when removing the current MediaItem from the player. ( PLAYRTS-5583) - Fix ANR when displaying notification with low to no internet.
- Fix current chapter and credit not clear when seek back.
What's Changed
- Don't let Dependabot update ComScore and CommandersAct by @MGaetan89 in #585
- Fix current time range reset by @StaehliJ in #581
- Bump kotlinx-serialization from 1.6.3 to 1.7.0 by @dependabot in #586
- Bump android-gradle-plugin from 8.4.1 to 8.4.2 by @dependabot in #576
- Avoid send null current chapter when not needed by @StaehliJ in #587
- 580 implements custom listeners like media3 by @StaehliJ in #589
- Replace the fondue video in demo by @MGaetan89 in #591
- Bump the androidx group with 7 updates by @dependabot in #594
- Bump android-gradle-plugin from 8.4.2 to 8.5.0 by @dependabot in #595
- Fix: use
runUntilPendingCommandsAreFullyHandled
inCommandersActTrackerIntegrationTest
by @MGaetan89 in #603 - Run Bitmap decoding not on main thread by @StaehliJ in #601
- Bump ktor from 2.3.11 to 2.3.12 by @dependabot in #602
- 605 bad commandersact stop position after removing item by @StaehliJ in #606
Full Changelog: 2.1.2...2.2.0
2.1.2 - Fix CommandersAct crash
Important
This release reverts back CommandersAct version dependency
- CommandersAct core to 5.4.3
- CommandersAct service side to 5.5.2
That introduce application crashes.
What's Changed
- Use DefaultPillarbox setup from the DI by @StaehliJ in #573
- Bump kotlinx-kover from 0.8.0 to 0.8.1 by @dependabot in #577
- Update
.gitignore
by @MGaetan89 in #579 - Bump kotlinx-serialization from 1.6.3 to 1.7.0 by @dependabot in #578
- Revert "Bump kotlinx-serialization from 1.6.3 to 1.7.0 (#578)" by @StaehliJ in #584
- Rollback commandersAct version to a stable version by @StaehliJ in #583
Full Changelog: 2.1.1...2.1.2
2.1.1
What's Changed
- Fix typos in documentation. by @Loic-Dumas in #569
- Audio main chapter always returns empty list of Player chapter by @StaehliJ in #570
- Remove lifecyle 2.8.1 by @StaehliJ in #572
Full Changelog: 2.1.0...2.1.1
2.1.0
SRGAnalytics
- Fix "ghost start" issue. Comscore will start only when the first
Activity
is created.
Player
- Fix DRM issue with new LSVS DRM streams.
- Pillarbox 2.1.0 introduce new kinds of Asset meta data that are linked to a
MediaItem
.
- Chapters : a time range that contains metadata of a Chapter, player will call
PillarboxPlayer.Listener.onChapterChanged
when player enter or exit a chapter. - Blocked time range : a time range where the player can't reach anytime, player will call
PillarboxPlayer.Listener.onBlockedTimeRangeReached
when the player jump to the end of the blocked range. - Credits (Opening and Closing) : a time range that contains credis metadata, player will call
PillarboxPlayer.Listener.onCreditChanged
when player enter or exit a chapter.
New apis
val player : PillarboxPlayer
player.getCurrentChapters()
player.getChapterAtPosition()
player.getChapterAtPosition(positionMs)
player.getCurrentChapterAsFlow()
player.getCurrentChapterAsState()
player.getCurrentCredits()
player.getCreditAtPosition()
player.getCreditAtPosition(positionMs)
player.getCurrentCreditAsFlow()
player.getCurrentCreditAsState()
Core business
SRGAssetLoader
read and fill the chapter, credits and blocked time range from theMediaComposition
.
Known bugs
- Live DRM can't be played
- Audio stream with multiple chapters can't be played
What's Changed
- Update guide to setup the GitHub repository by @MGaetan89 in #534
- Bump the androidx group with 4 updates by @dependabot in #522
- Bump android-gradle-plugin from 8.3.2 to 8.4.0 by @dependabot in #523
- Custom blocked segments by @StaehliJ in #539
- Replace usages of
MediaItemUrn
withSRGMediaItemBuilder
by @MGaetan89 in #537 - Add journalistic blocking reason by @MGaetan89 in #538
- Bump ktor from 2.3.10 to 2.3.11 by @dependabot in #542
- Bump kotlinx-coroutines from 1.8.0 to 1.8.1 by @dependabot in #541
- Bump mockk from 1.13.10 to 1.13.11 by @dependabot in #548
- Bump robolectric from 4.12.1 to 4.12.2 by @dependabot in #545
- Bump android-gradle-plugin from 8.4.0 to 8.4.1 by @dependabot in #547
- Bump kotlinx-kover from 0.7.6 to 0.8.0 by @dependabot in #546
- Bump the androidx group with 10 updates by @dependabot in #544
- Add a seek bar to the TV demo player by @MGaetan89 in #543
- Bump kotlin from 1.9.23 to 2.0.0 by @dependabot in #549
- 517 helper for media route button display by @StaehliJ in #525
- Bump com.autonomousapps.dependency-analysis from 1.31.0 to 1.32.0 by @dependabot in #554
- Simplify JVM toolchain setup by @MGaetan89 in #556
- Bump the androidx group with 5 updates by @dependabot in #560
- Bump com.tagcommander.lib:ServerSide from 5.5.3 to 5.5.4 by @dependabot in #562
- Revert toolchain changes from #556 by @MGaetan89 in #563
- Enable multi session for drm by @StaehliJ in #566
- 559 ghost start issue by @StaehliJ in #564
Full Changelog: 2.0.0...2.1.0
2.0.0
Player
- Improved system integration and background playback through custom
MediaController
andMediaSession
classes. Check the documentation for more information. - Added a new
Player.isAtLiveEdge(Long, Window)
method to know if the media is at live edge. - New way to load a media from a custom source by providing a custom
AssetLoader
implementation:
val player = PillarboxExoPlayer(
context = context,
mediaSourceFactory = PillarboxMediaSourceFactory(context).apply {
addAssetLoader(SRGAssetLoader(context)) // Provided by pillarbox-core-business to handled URNs
addAssetLoader(MyCustomAssetLoader())
},
)
- Added new methods to easily manage tracks:
val player: Player = ...
val currentTracks: Tracks = player.currentTracks
val tracks: List<Track> = currentTracks.tracks // Get all the supported tracks
val audioTracks: List<AudioTrack> = currentTracks.audioTracks // Get all the supported audio tracks
val textTracks: List<TextTrack> = currentTracks.textTracks // Get all the supported text tracks
val videoTracks: List<VideoTrack> = currentTracks.videoTracks // Get all the supported video tracks
player.selectTrack(Track) // Select a single track
player.enable<Audio|Text|Video>Track() // Enable a specific type of track
player.disable<Audio|Text|Video>Track() // Disable a specific type of track
player.setAuto<Audio|Text|Video>Track() // Restore the default track of a specific type
- Added support for blocked segments.
- Added support for chapters. You can use the following methods to access the corresponding information:
Player.getCurrentChapters(): List<Chapter> // Get all the chapters for the current media
Player.getChapterAtPosition(Long): Chapter? // Get the chapter at the provided position
Player.getCurrentChapterAsFlow(): Flow<Chapter?> // Observe the chapter currently playing as Flow
Player.getCurrentChapterAsState(): State<Chapter?> // Observe the chapter currently playing as State
- Added support for time intervals (intro/credits). You can use the following methods to access the corresponding information:
Player.getCurrentCredits(): List<Credit> // Get all the credits for the current media (opening credits, closing credits)
Player.getCreditAtPosition(Long): Credit? // Get the credit at the provided position
Player.getCurrentCreditAsFlow(): Flow<Credit?> // Observe the credit currently active as Flow
Player.getCurrentCreditAsState(): State<Credit?> // Observe the credit currently active as State
Core business
- Extract information about blocked segments, chapters and credits.
Demo
- The multi-player showcase has been improved to only have one player playing audio at a given time.
- Added a showcase to toggle repeat mode and to pause the media item when it ends.
- Added a showcase to display chapters.
- Added a showcase with a blocked segment.
Breaking changes
- The
mediaItemSource
anddataSourceFactory
arguments of theDefaultPillarbox
constructor have been removed. Please provide aMediaCompositionService
directly. TheMediaCompositionMediaItemSource
class and its related classes have been removed. PillarboxExoPlayer
is now a concrete class, whilePillarboxPlayer
has become an interface. Simply replace your usages ofPillarboxPlayer
byPillarboxExoPlayer
, andPillarboxExoPlayer
byPillarboxPlayer
:
// Pillarbox 1.0.0
val player: PillarboxExoPlayer = PillarboxPlayer(...)
// Pillarbox 2.0.0
val player: PillarboxPlayer = PillarboxExoPlayer(...)
Note
Following a change in AndroidX Media3 1.3.0, you should setup Java 8 APIs desugaring, by following this guide.
This is new requirement should be reverted in an upcoming version of AndroidX Media3 (see androidx/media#1312 (comment) for more information).
This should be done even if your min SDK version is 24+.
What's Changed
- Update README.md by @StaehliJ in #471
- Use movable content to swap players by @StaehliJ in #472
- Refactor Gradle build logic by @MGaetan89 in #474
- Refactor media loading by @StaehliJ in #475
- Update dependencies by @MGaetan89 in #481
- Update Robolectric to 4.12.1 by @MGaetan89 in #482
- Improve the multi player showcase by @MGaetan89 in #478
- Extract analytics from
CurrentMediaItemTracker
by @MGaetan89 in #483 - Don't filter out unsupported/forced tracks by @MGaetan89 in #487
- Improve media controller service by @StaehliJ in #485
- Add live indicator by @StaehliJ in #489
- Update the "Add to playlist" dialog by @MGaetan89 in #490
- Rework the main
Readme
by @MGaetan89 in #491 - Update dependencies by @MGaetan89 in #494
- Update 12h45 stream in the demo app by @waliid in #498
- Setup Dependabot by @MGaetan89 in #496
- Bump the actions group with 2 updates by @dependabot in #502
- Bump the androidx group with 6 updates by @dependabot in #504
- Improve live edge detection and provide Player extension by @StaehliJ in #505
- 451 handle chapters and blocked segments by @StaehliJ in #501
- Provide simplified tracks management by @MGaetan89 in #495
- Enable desugaring of java 8+ feature for android < 24 by @StaehliJ in #509
- Mitigate missing aspect ratio issue by @MGaetan89 in #507
- Add a showcase to customise playback settings by @MGaetan89 in #510
- 499 add chapters demo by @StaehliJ in #513
- 506 remove audio chapters by @StaehliJ in #514
- Add support for "Skip intro"/"Skip credits" by @MGaetan89 in #516
- Improve controls usability in the TV demo by @MGaetan89 in #520
- 519 simplify TimeRange management by @StaehliJ in #521
- Separate TimeRanges are it is a sealed interface and we don't really … by @StaehliJ in #524
- Make the Dependency Analysis plugin only fails for unused dependencies by @MGaetan89 in #526
- Fix urn name in the demo by @StaehliJ in #527
- Integrate Dokka by @MGaetan89 in #529
New Contributors
- @waliid made their first contribution in #498
- @dependabot made their first contribution in #502
Full Changelog: 1.0.0...2.0.0
1.0.0
Important
Letterbox will be sunset in August 2025:
- New SRG SSR products must use Pillarbox only.
- Existing SRG SSR products using Letterbox must transition to Pillarbox before this date.
This is the first official release of Pillarbox for Android platforms. Pillarbox is the modern SRG SSR media playback ecosystem, a generational leap over its predecessor Letterbox.
Tip
Should you have questions, ideas, or should you need assistance, please use our issue tracker or a dedicate discussion.
This version of Pillarbox is based on AndroidX Media3 1.3.0
New features
- Smooth seeking is a better way to seek. To take advantage of this new amazing feature have a look at SmoothProgressTrackerState.
- Core business error messages are translated in all Swiss 🇨🇭 languages (fr, de, it, rm and en).
- Support for 360° video, have a look at the Compose function SphericalSurface.
- Improve Pillarbox Demo on both mobile and Android TV.
Bug fixes
- Fix crash when decode bitmap throw an exception by @StaehliJ in #383
- Fix initial aspect ratio by @MGaetan89 in #466
What's Changed
- Update dependencies move extensions by @StaehliJ in #279
- 280 load drm token protected examples in the demo by @StaehliJ in #281
- Remove ExoPlayer.Builder from PillarboxPlayer by @StaehliJ in #285
- Display "No result" when necessary by @MGaetan89 in #284
- Improve BU selector in search view by @MGaetan89 in #286
- Run tests and linters for all modules by @MGaetan89 in #289
- Use resize endpoint for images by @MGaetan89 in #290
- Display loading when changing BU or query in the search by @MGaetan89 in #291
- Add a navigation bar in the TV demo app by @MGaetan89 in #294
- Improve navigation bar in the TV demo app by @MGaetan89 in #296
- Remove year from copyright info by @MGaetan89 in #301
- Remove "Play Suisse" example by @MGaetan89 in #300
- Create first levels in "Lists" by @MGaetan89 in #299
- Simplify navigation graph definition in "Lists" by @MGaetan89 in #305
- Integrate the remaining screens of the "Lists" section on TV by @MGaetan89 in #306
- Display images in the "Lists" section where supported by @MGaetan89 in #308
- Fix navigation in the TV demo app by @MGaetan89 in #310
- Improve BUs in the "Lists" section by @MGaetan89 in #320
- Update color schemes in the demo apps by @MGaetan89 in #321
- Align examples with
pillarbox-apple
by @MGaetan89 in #322 - Adjust the layout of "Showcases" to match "Examples" by @MGaetan89 in #325
- Adjust the layout of "Lists" to match "Examples" by @MGaetan89 in #328
- Improve the "No content" state in the search by @MGaetan89 in #329
- Update search results view by @MGaetan89 in #331
- Centralise padding values by @MGaetan89 in #332
- Move media icon type in the top left corner on TV by @MGaetan89 in #333
- Update to Detekt 1.23.3 by @MGaetan89 in #334
- Update to Gradle 8.4 by @MGaetan89 in #335
- Add search to TV demo by @MGaetan89 in #336
- Redesign the "Examples" section on TV by @MGaetan89 in #338
- Add back button in nested screen in demo by @StaehliJ in #348
- Remove Windows invalid characters from files by @StaehliJ in #350
- Add user consent documentation by @StaehliJ in #352
- Add icon for not result found in search by @StaehliJ in #354
- Remove
ImageScalingService
from the public API ofpillarbox-core-business
by @MGaetan89 in #355 - Get the list of radio channels from the IL by @MGaetan89 in #357
- Update GitHub Actions workflows by @MGaetan89 in #339
- Update date and duration format, move media type icon, update divider color by @MGaetan89 in #356
- Add merge group to
build.yml
workflow by @MGaetan89 in #360 - Add a menu to change environment in "Lists" on mobile by @MGaetan89 in #358
- Fix player controls in demo tv by @StaehliJ in #362
- Improve navigation in the TV demo app by @MGaetan89 in #353
- Add playback settings to TV demo app by @MGaetan89 in #363
- Update to AndroidX media3 1.2.0 by @StaehliJ in #364
- 359 use pillarbox icon for android tv by @StaehliJ in #367
- Improve settings menu on TV demo by @MGaetan89 in #366
- Add simple error to the player on tv by @StaehliJ in #369
- Display a loading indicator when fetching the next page by @MGaetan89 in #371
- 370 resume playback when content ends by @StaehliJ in #372
- Update dependencies by @StaehliJ in #374
- Visual improvements for the TV demo app by @MGaetan89 in #378
- Fix crash when decode bitmap throw an exception by @StaehliJ in #383
- Review project dependencies by @MGaetan89 in #382
- Remove
Modifier.handleDPadKeyEvents
frompillarbox-ui
by @MGaetan89 in #384 - Fix error in nightly workflow by @MGaetan89 in #387
- Fast seek by @StaehliJ in #386
- Add a sample to start at a given time by @StaehliJ in #392
- Update dependencies by @MGaetan89 in #394
- Fix nightly releases by @MGaetan89 in #395
- Remove "coucou" log in LeanbackPlayerFragment. by @Loic-Dumas in #397
- Reorganize
pillarbox-demo
structure by @MGaetan89 in #398 - Smooth seeking by @StaehliJ in #391
- Use
ubuntu-latest
for Android Tests and enable KVM by @MGaetan89 in #399 - Reorganize
pillarbox-demo-tv
structure and add missing examples by @MGaetan89 in #405 - Add position and duration label by @StaehliJ in #409
- Update unit tests in
pillarbox-analytics
by @MGaetan89 in #411 - 400 single showcase file by @StaehliJ in #410
- 416 use legacy uniqueid after migration commanders act v4x to v5x by @StaehliJ in #417
- Integrate Kover by @MGaetan89 in #413
- 412 update player tests with turbine by @StaehliJ in #418
- Add unit tests to
pillarbox-core-business
by @MGaetan89 in #419 - Enable Detekt on every source set by @MGaetan89 in #422
- Update CONTINUOUS_INTEGRATION.md by @StaehliJ in #423
- Add robolectric analytics tests by @StaehliJ in #431
- Add tests to
pillarbox-player
by @m...
0.8.1
0.8.0
What's Changed
- Update nightly.yml by @StaehliJ in #245
- Add a simple ToggleView. by @StaehliJ in #248
- Fix player stops when next urn item fails to load. by @StaehliJ in #251
- Cache Bitmap to avoid image reload on android 10. by @StaehliJ in #253
- Add localized error message. by @StaehliJ in #250
- Demo multiple drm stream not working on some device. by @StaehliJ in #254
- Android 14 support by @StaehliJ in #256
- 257 update commandersact v5 sdk by @StaehliJ in #258
- 255 android tv demo by @StaehliJ in #260
- 259 compose toggleable view for tv and mobile by @StaehliJ in #262
- 263 improve demo with some polish by @StaehliJ in #266
- No seek event while in pause by @StaehliJ in #268
- Send pause when no surface is connected to player by @StaehliJ in #267
Full Changelog: 0.7.0...0.8.0