
----- Context: * Each sequence is wrapped as a single MediaSource, each being played by an underlying ExoPlayer. * Repeat mode is typically implemented in Players as a seek to the next item in the playlist. ----- This CL: Repeat mode is triggered by listening for when the main input player sees a play when ready change due to the end of the media item. There is a slight delay at the end of the playback, before it repeats. Setting repeat mode on the underlying players addresses this, but means that the players will seek without waiting for the CompositionPlayer, and as such previewAudioPipeline does not get the correct signals around blocking/flushing. PreviewAudioPipeline - The seek position can validly be C.TIME_UNSET, however preview pipeline did not handle this case. CompositionPlayer getContentPosition is given (through a lambda) as a supplier to the State object, which means any comparisons between previous/new state for this value does not work. In SimpleBasePlayer, there is logic to use the positionDiscontinuityPositionUs for the position change (see getPositionInfo called from updateStateAndInformListeners), however this logic is not considered in getMediaItemTransitionReason, so a condition needed to be added for this case. ----- Tests: * Dump files clearly show the position and data is repeated. * Assertions on the reasons for transitions or position discontinuities. PiperOrigin-RevId: 653210278
Composition demo
This app is an EXPERIMENTAL demo app created to explore the potential of Composition
and CompositionPlayer
APIs. It may exhibit limited features, occasional bugs, or unexpected behaviors.
Attention: CompositionPlayer
APIs should be taken as work in progress, rather than experimental API. Please await further announcement via Release Notes for when the APIs are fully integrated.
See the demos README for instructions on how to build and run this demo.