VRChat gives a world a video player that plays. Keeping everyone on the same moment, catching up
players who join later and giving people a way to queue links is left to the world. This package
does all of it: a synced player, any number of screens and a control panel.

![The default panel: title, progress, transport buttons, volume, the link field and the queue](/assets/video/panel.jpg)

Everyone sees the same frame. Late joiners land where the room is, paused if the room is paused.
Pause, seek, loop and skip are synced, and volume belongs to each player. Links queue up with who
added them, a playlist takes over when the queue is empty, and a lock keeps the controls with the
instance owner and the people you name.

Code talks to the player the same way the panel does:

```csharp
public class Cinema : UdoniteBehaviour
{
    public VideoPlayer player;
    public VRCUrl trailer;

    public override void Interact()
    {
        player.PlayUrl(trailer);
    }
}
```

## What is here

| | |
|---|---|
| `VideoPlayer` | The synced player: play, queue, pause, seek, skip, lock, and every value a UI shows |
| `VideoScreen` | Puts the picture on any renderer, letterboxed to its shape |
| `VideoPlaylist` | Links and titles that play when the queue is empty |
| `VideoButton`, `VideoLabel`, `VideoSlider`, `VideoLinkField`, `VideoShowWhen`, `VideoQueueRow` | The parts the default panel is made of, for a UI of your own |
| `VideoPart` | The base class for writing a part of your own |
| **Udonite > Video** | One menu item, Create Video Player; more screens, AudioLink and YouTube titles are buttons on the Inspector |

Start with [Getting started](/docs/video/getting-started). [Your own UI](/docs/video/your-own-ui)
covers replacing the panel, and [Watching together](/docs/video/sync) covers what players see
and what to do when a video will not play.
