2018-07-10 17:47:56 +02:00
# PeerTube Embed API
PeerTube lets you embed videos and programmatically control their playback. This documentation covers how to interact with the PeerTube Embed API.
## Playground
2020-05-06 11:54:33 +02:00
Any PeerTube embed URL (ie `https://my-instance.example.com/videos/embed/52a10666-3a18-4e73-93da-e8d3c12c305a` ) can be viewed as an embedding playground which
allows you to test various aspects of PeerTube embeds. Simply replace `/embed` with `/test-embed` and visit the URL in a browser.
2018-07-10 17:47:56 +02:00
For instance, the playground URL for the above embed URL is `https://my-instance.example.com/videos/test-embed/52a10666-3a18-4e73-93da-e8d3c12c305a` .
## Quick Start
2020-02-28 14:01:17 +01:00
Given an existing PeerTube embed `<iframe>` **with API enabled** (`https://my-instance.example.com/videos/embed/52a10666-3a18-4e73-93da-e8d3c12c305a?api=1`),
one can use the PeerTube Embed API to control it by first including the library. You can include it via Yarn with:
2018-07-10 17:47:56 +02:00
```
yarn add @peertube/embed -api
```
Now just use the `PeerTubePlayer` class exported by the module:
```typescript
import { PeerTubePlayer } from '@peertube/embed-api'
2019-12-17 16:17:22 +01:00
...
```
Or use the minified build from NPM CDN in your HTML file:
```
2020-04-08 14:44:25 +02:00
< script src = "https://unpkg.com/@peertube/embed-api/build/player.min.js" > < / script >
2019-12-17 16:17:22 +01:00
< script >
const PeerTubePlayer = window['PeerTubePlayer']
...
< / script >
```
Then you can instantiate the player:
```typescript
2018-07-10 17:47:56 +02:00
let player = new PeerTubePlayer(document.querySelector('iframe'))
await player.ready // wait for the player to be ready
// now you can use it!
player.play()
player.seek(32)
2020-03-25 13:32:29 +01:00
player.pause()
2018-07-10 17:47:56 +02:00
```
# Methods
## `play() : Promise<void>`
Starts playback, or resumes playback if it is paused.
## `pause() : Promise<void>`
Pauses playback.
## `seek(positionInSeconds : number)`
Seek to the given position, as specified in seconds into the video.
## `addEventListener(eventName : string, handler : Function)`
Add a listener for a specific event. See below for the available events.
## `getResolutions() : Promise<PeerTubeResolution[]>`
Get the available resolutions. A `PeerTubeResolution` looks like:
```json
{
"id": 3,
"label": "720p",
2019-12-17 16:17:22 +01:00
"height": "720",
2018-07-10 17:47:56 +02:00
"active": true
}
```
`active` is true if the resolution is the currently selected resolution.
## `setResolution(resolutionId : number): Promise<void>`
Change the current resolution. Pass `-1` for automatic resolution (when available).
Otherwise, `resolutionId` should be the ID of an object returned by `getResolutions()`
## `getPlaybackRates() : Promise<number[]>`
Get the available playback rates, where `1` represents normal speed, `0.5` is half speed, `2` is double speed, etc.
## `getPlaybackRates() : Promise<number>`
Get the current playback rate. See `getPlaybackRates()` for more information.
2020-05-06 11:54:33 +02:00
## `setPlaybackRate(rate: number) : Promise<void>`
2018-07-10 17:47:56 +02:00
Set the current playback rate. The passed rate should be a value as returned by `getPlaybackRates()` .
2020-05-06 11:54:33 +02:00
## `setVolume(factor: number) : Promise<void>`
2018-07-10 17:47:56 +02:00
Set the playback volume. Value should be between `0` and `1` .
## `getVolume(): Promise<number>`
Get the playback volume. Returns a value between `0` and `1` .
2019-12-17 16:17:22 +01:00
2020-05-06 11:54:33 +02:00
## `setCaption(id: string) : Promise<void>`
Update current caption using the caption id.
## `getCaptions(): Promise<{ id: string, label: string, src: string, mode: 'disabled' | 'showing' }>`
Get video captions.
2018-07-10 17:47:56 +02:00
# Events
You can subscribe to events by using `addEventListener()` . See above for details.
## Event `playbackStatusUpdate`
2020-05-06 11:54:33 +02:00
Fired every half second to provide the current status of playback.
2020-04-08 14:51:44 +02:00
The parameter of the callback will resemble:
2018-07-10 17:47:56 +02:00
```json
{
"position": 22.3,
"volume": 0.9,
2020-04-08 14:51:44 +02:00
"duration": "171.37499",
2018-07-10 17:47:56 +02:00
"playbackState": "playing"
}
```
2020-04-14 09:02:44 +02:00
`duration` field and `ended` `playbackState` are available in PeerTube >= 2.2.
2020-04-08 14:39:31 +02:00
The `volume` field contains the volume from `0` (silent) to `1` (full volume).
The `playbackState` can be `unstarted` , `playing` , `paused` or `ended` . More states may be added later.
2018-07-10 17:47:56 +02:00
## Event `playbackStatusChange`
2020-03-20 15:04:02 +01:00
Fired when playback transitions between states, such as `paused` and `playing` . More states may be added later.
2018-07-10 17:47:56 +02:00
## Event `resolutionUpdate`
2019-12-17 15:19:42 +01:00
Fired when the available resolutions have changed, or when the currently selected resolution has changed. Listener should call `getResolutions()` to get the updated information.
## Event `volumeChange`
Fired when the player volume changed.