Releases: SRGSSR/pillarbox-android
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
0.7.0
0.6.0
🚧 The SRG stream tracking and analytics have not been validated yet, only ComScore is validated. So do not use this in production environment !!!
Media3 version: 1.1.1
kotlin plugin version: 1.9.0
compiler version: 1.5.1
compose bom version: 2023.08.00
New features
Player
- Support for audio and text tracks. Add helpers to better handle tracks management.
- Add
Player.getTrackSelectionParametersAsFlow
to get flow ofTrackSelectionParameters
changes. - Add
Player.getCurrentTracksAsFlow
to get flow ofTracks
changes. Tracks
extensions filter unsupported tracks.- When using Pillarbox extensions the following feature are supported:
- User accessibility settings.
- Forced subtitles
Core business
- Request
MediaComposition
in chapter only. So segment urn can be played correctly. - Disable playback start when a chapter urn contains a blocking reason or if it has at least one segment with a blocking reason.
- Allow application to query a urn with a vector as a String. By default
Vector.MOBILE
. - Add
Context.getVector
to detect vector.
Analytics
- Add permanent labels to
SRGAnalytics
. - Add user consent api.
Demo
- Improve player settings, add audio and subtitles settings.
- Subtitles are better displayed.
- Migrate to Material3
Breaking Changes
MediaCompositionDataSourceImpl
rename toDefaultMediaCompositionDataSource
.
What's Changed
- Update dependencies by @StaehliJ in #192
- 194 basic support for subtitles and audio tracks by @StaehliJ in #199
- 195 forced subtitles support by @StaehliJ in #201
- Reflet AD from AccessibilityManager settings user preference by @StaehliJ in #203
- Fix viewAspectRatio badly computed by @StaehliJ in #205
- Reset settings navigation when dismiss by @StaehliJ in #209
- Always send uptime for livestreams by @StaehliJ in #208
- Filter unsupported tracks. by @StaehliJ in #210
- 197 improve subtitles UI by @StaehliJ in #213
- 215 simplify akamai tokenizer by @StaehliJ in #216
- 212 update material 3 by @StaehliJ in #214
- 217 load mediacomposition without segments by @StaehliJ in #219
- Add vector to MediaComposition call. by @StaehliJ in #220
- 211 version catalog migration by @StaehliJ in #221
- Remove duplicate method call by @StaehliJ in #225
- Pull media3 version to 1.1.1 by @StaehliJ in #226
- Remove unnecessary glide dependency by @StaehliJ in #227
- Use kotlinx.serialization instead of Moshi by @StaehliJ in #228
- Update streams samples by @StaehliJ in #229
- Update SRG DataProvider to 0.5.0 by @StaehliJ in #231
- Migration to Ktor instead of Retrofit by @StaehliJ in #230
- 198 tracks selection analytics by @StaehliJ in #232
- Block media if at least one segment has a block reason. by @StaehliJ in #236
- 233 add user consent by @StaehliJ in #235
Full Changelog: 0.5.1...0.6.0
0.5.1
🚧 The SRG stream tracking and analytics have not been validated yet. So do not use this in production environment !!!
What's Changed
- Analytics demo application name to Pillarbox by @StaehliJ in #190
- Fix media_volume for CommandersAct by @StaehliJ in #191
Full Changelog: 0.5.0...0.5.1
0.5.0
🚧 The SRG stream tracking and analytics have not been validated yet. So do not use this in production environment !!!
Breaking changes
Initialization of SRGAnalytics
is simplified.
val config = AnalyticsConfig(
vendor = AnalyticsConfig.Vendor.SRG,
nonLocalizedApplicationName = "PillarboxDemo",
appSiteName = "pillarbox-demo-android",
sourceKey = AnalyticsConfig.SOURCE_KEY_SRG_DEBUG
)
initSRGAnalytics(config = config)
New demo feature
You can inject a urn or url directly in the demo.
What's Changed
- 167 comscore page view improvements by @StaehliJ in #168
- 169 commandersact remove bu specific tags by @StaehliJ in #170
- 171 simplify srganalytics initialization by @StaehliJ in #172
- 174 remove unused commandersact streaming label by @StaehliJ in #175
- Remove listener that we should not use by @StaehliJ in #176
- Create MediaSource in the same thread as prepareSourceInternal by @StaehliJ in #178
- Add unified streaming and bitmovin streams by @StaehliJ in #179
- 162 add UI to inject url or urn by @StaehliJ in #180
- Allow integrator to set custom MediaSession.Callback by @StaehliJ in #181
- 182 improve page view and event by @StaehliJ in #183
- Uptime is send only when time shift <= 30 seconds by @StaehliJ in #185
- 186 improve release ci by @StaehliJ in #187
- Add simple page view to lists and search by @StaehliJ in #188
Full Changelog: 0.4.1...0.5.0
0.4.1
What's Changed
- Improve Demo with Integration layer data's that allow to navigate through the SRG SSR content. #161
- Pull media3 version to 1.1.0.
Fixes
- Update media3 version fixes an issue with MediaController and add/set MediaItem with a local configuration or mediaID #160
Full Changelog: 0.4.0...0.4.1
0.4.0 - Stream tracking and analytics
This pillarbox pre release add the support for stream tracking and SRG SSR Analytics. The stream tracking can be customized and new tracking system can be added. Pillarbox is using the released Media3 library 1.0.0 !
🚧 The SRG stream tracking and analytics have not been validated yet. So do not use this in production environment !!!
New Features
- SRG SSR Analytics with standards stream analytics (CommandersAct and comscore). Read more here
- Stream tracking can be customized by implementing your own
MediaItemTracker
please read the documentation for more information about that topic Read more here. - Seek forward and seek backward increments can be set at
PillarboxPlayer
creation. (#146)
Changes
- Remove
PlayerState
it is replaced by flow extensions. Should be easier to get player state as flow. - Remove over complicated Service connections. (#143)
- The demo has been improved by adding playlist UI.
Full Changelog: 0.3.0...0.4.0