Files
shaka-player/docs/tutorials/text-displayer.md
T
Álvaro Velad Galván a1cb769aa7 feat: Allow switch between UITextDisplayer and NativeTextDisplayer on runtime (#8736)
We prefer NativeTextDisplayer when using PiP and Fullscreen API of the
video element itself. Otherwise we prefer UITextDisplayer
2025-06-12 12:09:05 +02:00

71 lines
2.2 KiB
Markdown

# Configuring text displayer
### Default displayers
Shaka Player supports two implementations of {@link shaka.extern.TextDisplayer}
which can be used to render & style content subtitles.
#### NativeTextDisplayer
{@link shaka.text.NativeTextDisplayer} which uses browser's native cue
renderer. Shaka Player creates corresponding text tracks for text streams on
the video element and provides necessary data so video element can render it.
This is the default displayer when shaka UI is **not** used, we also use
NativeTextDisplayer when using PiP and Fullscreen API of the video element
itself.
#### UITextDisplayer
{@link shaka.text.UITextDisplayer} which renders subtitles inside of a DOM
container provided to shaka.
Container can be provided in 2 ways, by either a {@link shaka.Player}
constructor or a {@link shaka.Player#setVideoContainer} method. This call
is done automatically when using Shaka UI.
```js
// Take your custom video container element.
const container = document.getElementById('video_container');
// Attach container using player constructor.
const player = new shaka.Player(/* mediaElement= */ null, container);
// Alternatively, pass it using dedicated method.
player.setVideoContainer(container);
```
##### Font size scaling for readability
For improved readability the option to scale text size is provided via player
config.
```js
player.configure({
textDisplayer: {
fontScaleFactor: 1.5,
},
});
```
### Text displayer configuration
Additional configuration for the text displayer can be passed by calling:
```js
player.configure({
textDisplayer: {/*...*/}
});
```
See {@link shaka.extern.TextDisplayerConfiguration} for more details.
### Custom text displayer
If none of displayers is suitable for your needs, you can prepare your own.
To do that you need to implement {@link shaka.extern.TextDisplayer} interface
and pass your custom displayer to shaka by calling:
```js
player.configure({
textDisplayFactory: () => new CustomTextDisplayer(),
});
```
Keep in mind text displayers are used entirely for rendering subtitles related
directly to the content. If you wish to display other information, i.e. stream
metadata, you might consider using {@link shaka.ui.Overlay#setTextWatermark}
instead.