Skip to content
FrameworkStyle

AudioTrackRadioGroup

A menu radio group for selecting an audio track

Creates radio items from the player audio track state and selects the enabled track.

Anatomy

<AudioTrackRadioGroup
  renderItem={(props, item) => (
    <Menu.RadioItem {...props}>
      {item.label}
      <Menu.ItemIndicator checked={item.checked} />
    </Menu.RadioItem>
  )}
/>

Behavior

The group is available when the configured media exposes more than one audio track. Labels use the track label, then language, then kind. Pass formatTrack to customize the visible labels.

AudioTrackRadioGroup uses useAudioTrackOptions to own selection and generate each item. Its required renderItem callback renders the Menu.RadioItem root and receives item state containing the translated label and current checked value. It returns null when the audio track feature is not configured.

Styling

Attribute Values Description
data-audio-track string Current audio track value.
data-disabled Present / absent Present when audio track selection is disabled.
data-hidden Present / absent Present when multiple audio tracks are unavailable.
data-availability "available" / "unavailable" Whether multiple audio tracks are available.

Unavailable groups receive the native hidden attribute.

Accessibility

The group uses the menu radio group pattern.

The component receives an accessible label from the label prop or defaults to Audio. Override it with aria-label or aria-labelledby.

Examples

Basic usage

import { AudioTrackRadioGroup, Container, createPlayer, Menu } from '@videojs/react';
import { HlsJsVideo } from '@videojs/react/media/hlsjs-video';
import { videoFeatures } from '@videojs/react/video';
import type { ReactNode } from 'react';

const { Player } = createPlayer({ features: videoFeatures });
const src = 'https://stream.mux.com/s41JYeqIpBMBzE4OzxDyGR2yrp2hD1CQ6gJN9SlVGDQ.m3u8';

function AudioMenu(): ReactNode {
  return (
    <Menu.Root side="top" align="end">
      <Menu.Trigger className="settings-trigger" render={<button type="button" />}>
        Audio
      </Menu.Trigger>
      <Menu.Content className="menu">
        <AudioTrackRadioGroup
          className="menu-group"
          renderItem={(props, item) => (
            <Menu.RadioItem {...props} className="menu-item">
              {item.label}
              <Menu.ItemIndicator checked={item.checked} forceMount className="menu-indicator">

              </Menu.ItemIndicator>
            </Menu.RadioItem>
          )}
        />
      </Menu.Content>
    </Menu.Root>
  );
}

export default function BasicUsage() {
  return (
    <Player>
      <Container className="media-container">
        <HlsJsVideo src={src} autoPlay crossOrigin="anonymous" muted playsInline loop />
        <div className="menu-bar">
          <AudioMenu />
        </div>
      </Container>
    </Player>
  );
}

API Reference

Props

PropTypeDefaultDetails
disabledbooleanfalse
formatTrackText) | functionformatTrackLabel
labelText | string | Text) | function''

State

State is accessible via the render, className, and style props.

PropertyTypeDetails
valuestring
optionsAudioTrackRadioGroupOption[]
disabledboolean
hiddenboolean
availability'available' | 'unavailable'
labelText | string

Data attributes

AttributeTypeDetails
data-audio-trackstring
data-disabled
data-hidden
data-availability'available' | 'unavailable'