Skip to content

KitePlayer 0.0.22

Choose a tag to compare

@yuroyami yuroyami released this 04 Sep 20:55
· 998 commits to main since this release

Audio gains an equaliser, balance, ReplayGain and a loudness meter. The queue is editable while it plays. Seeks are twice as fast.

Usage

/** Phones and desktop, native video view. */
implementation("io.github.yuroyami:kiteplayer-mobile:0.0.22")

/** Compose. Includes the stack above. */
implementation("io.github.yuroyami:kiteplayer-compose-ui:0.0.22")

Convenience coordinates

kiteplayer-compose-ui contains everything. Pick one of these only when you want less.

Coordinate Use it when
kiteplayer-mobile Native views, no Compose.
kiteplayer-core Engine only. You bring the decoders and the output.
kiteplayer-compose, kiteplayer-phone Never in new code. Deprecated old combined coordinates.

Every coordinate

kiteplayer-compose-ui
├── kiteplayer-compose-interop
│   └── kiteplayer-mobile
│       ├── kiteplayer-core
│       │   └── kiteplayer-rt        native targets only
│       ├── kiteplayer-ffmpeg        KiteFFmpeg 0.2.0
│       │   └── kiteplayer-subtitles
│       ├── kiteplayer-output
│       └── kiteplayer-view
└── kiteplayer-compose-video

Changelog

  • Audio: ten band equaliser, stereo balance, ReplayGain, volume up to 2.0 through a limiter, a loudness meter (LoudnessMeter, AudioAnalysis.measureLoudness), the Android audio session id.
  • Queue: edit it while it plays (addToQueue, removeFromQueue, moveInQueue, clearQueue), shuffle, chapter navigation, markers, a sleep timer with a fade, memento() and restore() for resume.
  • setVideoEnabled(false) parks video decoding without reopening. Two players in one process are tested.
  • Subtitles: a secondary track at the top, SubtitleStyleOverride with a background box, player.subtitleCues.
  • kiteplayer-ffmpeg: encode a captured frame to PNG or JPEG, Thumbnails, Waveforms, typed filter chains.
  • Android view: secure flag, picture in picture parameters, screen reader text, display rate matching. PlayerEvent.FramePresented behind PlayerConfig.frameEvents.
  • Diagnostics: KiteLog.installStructured, URIs redacted by default, five new PlaybackStats numbers.
  • Breaking: AudioConfig, PlayerConfig and PlaybackStats gained fields. Positional copy() calls need a recompile.
  • Desktop: Compose controls drawn over the native video view get no clicks on macOS. Use KiteRenderPath.ComposeCanvas, or keep controls beside the video.
  • Fixed: seeks about twice as fast; a CoreAudio zero frame request no longer replays audio; subtitle cue lookup is a binary search.

Dependencies

  • Kotlin 2.4.10, Compose Multiplatform 1.12.0-rc01
  • Android Gradle Plugin 9.2.1, Gradle 9.6.0, JDK 21
  • Android min SDK 26
  • KiteFFmpeg 0.2.0, up from 0.1.0, with FFmpeg n8.1.2 and dav1d 1.5.4 inside