Limeplay - Open Source Video Player UI ComponentsLimeplay

use-playback-source

Normalizes block source props into useAsset playback state.

Installation

npx shadcn add @limeplay/use-playback-source

Requires assetFeature registered in your createMediaKit.

Usage

Use PlaybackSourceController inside a block to load exactly one source model: asset, playlist, or mediaSrc.

import { PlaybackSourceController } from "@/hooks/limeplay/use-playback-source"

export function SourceController({ src }: { src?: string }) {
  return <PlaybackSourceController mediaSrc={src} />
}

For typed assets, pass asset, playlist, getAssetId, and resolveSource through to useAsset.

import type { Asset } from "@/hooks/limeplay/use-asset"
import { PlaybackSourceController } from "@/hooks/limeplay/use-playback-source"

interface VideoAsset extends Asset {
  playbackUrl: string
  slug: string
}

export function VideoSource({ playlist }: { playlist: VideoAsset[] }) {
  return (
    <PlaybackSourceController
      getAssetId={(asset) => asset.slug}
      playlist={playlist}
      resolveSource={({ asset }) => asset.playbackUrl}
    />
  )
}

Feature Registration

use-playback-source is a controller helper, not a store feature. Register assetFeature with your media kit, then mount PlaybackSourceController inside the player tree.

lib/media.ts
"use client"

import { assetFeature } from "@/hooks/limeplay/use-asset"
import { playbackFeature } from "@/hooks/limeplay/use-playback"
import { playerFeature } from "@/hooks/limeplay/use-player"
import { playlistFeature } from "@/hooks/limeplay/use-playlist"
import { createMediaKit } from "@/components/limeplay/media-provider"

export const media = createMediaKit({
  features: [
    playerFeature(),
    playlistFeature(),
    playbackFeature(),
    assetFeature(),
  ] as const,
})
import type { UsePlaybackSourceOptions } from "@/hooks/limeplay/use-playback-source"
import { PlaybackSourceController } from "@/hooks/limeplay/use-playback-source"

export function Source<TAsset extends { src?: string }>(
  props: UsePlaybackSourceOptions<TAsset>
) {
  return <PlaybackSourceController {...props} />
}

Store

StateOwnerDescription
asset, playlist, mediaSrcUsePlaybackSourceOptionsSource inputs normalized by PlaybackSourceController.
sourceKeyUsePlaybackSourceOptionsOptional stable key used to avoid duplicate playlist loads.
playeruse-playerThe current Shaka player instance required before loading.

Actions

ActionSymbolDescription
Load sourcePlaybackSourceControllerMounts a controller that calls usePlaybackSource.
Normalize optionsusePlaybackSourceConverts one asset, a playlist, or mediaSrc into a playlist load.
Load playlistloadPlaylist from useAssetReceives normalized assets and the configured initialIndex.

Events

EventEmitted byDescription
playlistchangeuse-playlistFired after the normalized source is loaded into the queue and the active item changes.
playerreadyuse-playerThe controller waits for a player instance before calling loadPlaylist.
Noneuse-playback-sourceThe hook itself does not emit custom events.

API Reference

Prop

Type

On this page