For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
StatusSupportDiscussionsLog inSign Up
Docs HomeAPI ReferenceVideo on DemandAI FeaturesLive StreamingVideo PlayerVideo DataCloud PlayoutRecipes
Docs HomeAPI ReferenceVideo on DemandAI FeaturesLive StreamingVideo PlayerVideo DataCloud PlayoutRecipes
  • Player SDKs
    • Introduction
  • Web player
    • Install the FastPix web player
    • Play uploaded videos
    • Handle playback errors
  • Android player
    • Install FastPix Android player
    • Set up the player
    • Play uploaded videos
    • Handle playback errors
      • Enable secure video playback
      • Use custom domain
      • Switch audio tracks
      • Switch subtitle tracks
      • Add seek preview thumbnails
      • Enable fullscreen mode
      • Monitor video data
  • iOS player
    • Install FastPix iOS player
    • Play uploaded videos
    • Handle playback errors
  • Flutter player
    • Install FastPix Flutter player
    • Play uploaded videos
    • Handle playback errors
LogoLogo
StatusSupportDiscussionsLog inSign Up
On this page
  • Enable seek preview
  • Fallback modes
  • Listen for preview events
  • Connect to a SeekBar
  • Fetch preview bitmaps directly
Android playerAdvanced features

Add seek preview thumbnails

Was this page helpful?
Previous

Enable fullscreen mode

Next
Built with

Learn how to show spritesheet-based thumbnail previews during seek bar scrubbing in the FastPix Android Player.

Seek preview shows thumbnail previews while the user scrubs the seek bar. The SDK resolves spritesheets automatically for FastPix streams using the URL pattern https://images.fastpix.com/{playbackId}/spritesheet.json.

Enable seek preview

Configure seek preview when building the player:

1val seekPreviewConfig = SeekPreviewConfig.Builder()
2 .setEnabled(true)
3 .setFallbackMode(PreviewFallbackMode.TIMESTAMP) // or NONE
4 .setEnablePreload(true)
5 .setPreloadRadius(1)
6 .setCacheEnabled(true)
7 .build()
8
9val player = FastPixPlayer.Builder(context)
10 .setSeekPreviewConfig(seekPreviewConfig)
11 .build()

Fallback modes

If the spritesheet doesn’t exist, or the media is not a FastPix stream, the SDK falls back:

  • TIMESTAMP: Shows a time label (for example, "02:30"). SpritesheetMetadata.bitmap may be null.
  • NONE: Shows nothing.

Listen for preview events

1player.setSeekPreviewListener(object : SeekPreviewListenerAdapter() {
2 override fun onSpritesheetInitialized() {
3 // Spritesheet metadata is available and preview can be used
4 }
5 override fun onSpritesheetFailed(error: Throwable) {
6 // Spritesheet unavailable; fallback may still work depending on config
7 }
8 override fun onPreviewShow() {
9 // Show your preview container
10 }
11 override fun onPreviewHide() {
12 // Hide your preview container
13 }
14 override fun onSpritesheetLoaded(metadata: SpritesheetMetadata) {
15 // metadata.bitmap: bitmap for current position (can be null in timestamp fallback)
16 // metadata.timestampMs: current seek timestamp (ms)
17 // Additional fields: rows, columns, frameWidth, frameHeight, frameCount,
18 // durationMs, intervalMs (distance between frames)
19 }
20})

Connect to a SeekBar

Wire the preview to your SeekBar’s touch events:

1seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
2 override fun onStartTrackingTouch(seekBar: SeekBar) {
3 player.showPreview()
4 }
5 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
6 if (fromUser) {
7 player.loadPreview(progress.toLong()) // progress in ms
8 }
9 }
10 override fun onStopTrackingTouch(seekBar: SeekBar) {
11 player.hidePreview()
12 player.seekTo(seekBar.progress.toLong())
13 }
14})

Fetch preview bitmaps directly

If you’re building a custom preview UI, you can request bitmaps directly from a coroutine:

1val bmp = player.getPreviewBitmap(timeMs = 30_000)
2val label = player.formatTimestamp(timeMs = 30_000)