]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - support/doc/api/embeds.md
Channel sync (#5135)
[github/Chocobozzz/PeerTube.git] / support / doc / api / embeds.md
CommitLineData
99941732
WL
1# PeerTube Embed API
2
3PeerTube lets you embed videos and programmatically control their playback. This documentation covers how to interact with the PeerTube Embed API.
4
5## Playground
6
1151f521
C
7Any PeerTube embed URL (ie `https://my-instance.example.com/videos/embed/52a10666-3a18-4e73-93da-e8d3c12c305a`) can be viewed as an embedding playground which
8allows you to test various aspects of PeerTube embeds. Simply replace `/embed` with `/test-embed` and visit the URL in a browser.
99941732
WL
9For instance, the playground URL for the above embed URL is `https://my-instance.example.com/videos/test-embed/52a10666-3a18-4e73-93da-e8d3c12c305a`.
10
11## Quick Start
12
9a207a71
C
13Given an existing PeerTube embed `<iframe>` **with API enabled** (`https://my-instance.example.com/videos/embed/52a10666-3a18-4e73-93da-e8d3c12c305a?api=1`),
14one can use the PeerTube Embed API to control it by first including the library. You can include it via Yarn with:
99941732
WL
15
16```
17yarn add @peertube/embed-api
18```
19
20Now just use the `PeerTubePlayer` class exported by the module:
21
22```typescript
23import { PeerTubePlayer } from '@peertube/embed-api'
24
03d641a0
C
25...
26```
27
28Or use the minified build from NPM CDN in your HTML file:
29
30```
afd1a6ed 31<script src="https://unpkg.com/@peertube/embed-api/build/player.min.js"></script>
03d641a0
C
32
33<script>
34 const PeerTubePlayer = window['PeerTubePlayer']
35
36 ...
37</script>
38```
39
40Then you can instantiate the player:
41
42```typescript
99941732
WL
43let player = new PeerTubePlayer(document.querySelector('iframe'))
44await player.ready // wait for the player to be ready
45
46// now you can use it!
47player.play()
48player.seek(32)
b2b0ce8a 49player.pause()
99941732
WL
50```
51
60f013e1
C
52# URL parameters
53
54You can customize PeerTube player by specifying URL query parameters.
55For example `https://my-instance.example.com/videos/embed/52a10666-3a18-4e73-93da-e8d3c12c305a??start=1s&stop=18s&loop=1&autoplay=1&muted=1&warningTitle=0&controlBar=0&peertubeLink=0&p2p=0`
56
57## start
58
59Start the video at a specific time.
60Value must be raw seconds or a duration (`3m4s`)
61
62## stop
63
64Stop the video at a specific time.
65Value must be raw seconds or a duration (`54s`)
66
67## controls
68
69Mimics video HTML element `controls` attribute, meaning that all controls (including big play button, control bar, etc.) will be removed.
70It can be useful if you want to have a full control of the PeerTube player.
71
72Value must be `0` or `1`.
73
74## controlBar
75
76Hide control bar when the video is played.
77
78Value must be `0` or `1`.
79
80## peertubeLink
81
4c8336af 82Hide PeerTube instance link in control bar.
60f013e1
C
83
84Value must be `0` or `1`.
85
86## muted
87
88Mute the video by default.
89
90Value must be `0` or `1`.
91
92## loop
93
94Automatically start again the video when it ends.
95
96Value must be `0` or `1`.
97
98## subtitle
99
100Auto select a subtitle by default.
101
102Value must be a valid subtitle ISO code (`fr`, `en`, etc.).
103
4c8336af
C
104## autoplay
105
106Try to automatically play the video.
107Most web browsers disable video autoplay if the user did not interact with the video. You can try to bypass this limitation by muting the video
108
109Value must be `0` or `1`.
110
111## title
112
113Hide embed title.
114
115Value must be `0` or `1`.
116
117## warningTitle
118
119Hide P2P warning title.
120
121Value must be `0` or `1`.
122
123## p2p
124
125Disable P2P.
126
127Value must be `0` or `1`.
128
129## bigPlayBackgroundColor
130
131Customize big play button background color.
132
133Value must be a valid color (`red` or `rgba(100, 100, 100, 0.5)`).
134
135## foregroundColor
136
137Customize embed font color.
138
139Value must be a valid color (`red` or `rgba(100, 100, 100, 0.5)`).
140
141## mode
142
143Force a specific player engine.
144
145Value must be a valid mode (`webtorrent` or `p2p-media-loader`).
146
147## api
148
149Enable embed JavaScript API (see methods below).
150
151Value must be `0` or `1`.
152
60f013e1 153
99941732
WL
154# Methods
155
156## `play() : Promise<void>`
157
158Starts playback, or resumes playback if it is paused.
159
160## `pause() : Promise<void>`
161
162Pauses playback.
163
164## `seek(positionInSeconds : number)`
165
166Seek to the given position, as specified in seconds into the video.
167
168## `addEventListener(eventName : string, handler : Function)`
169
170Add a listener for a specific event. See below for the available events.
171
172## `getResolutions() : Promise<PeerTubeResolution[]>`
173
174Get the available resolutions. A `PeerTubeResolution` looks like:
175
176```json
177{
178 "id": 3,
179 "label": "720p",
03d641a0 180 "height": "720",
99941732
WL
181 "active": true
182}
183```
184
185`active` is true if the resolution is the currently selected resolution.
186
187## `setResolution(resolutionId : number): Promise<void>`
188
189Change the current resolution. Pass `-1` for automatic resolution (when available).
190Otherwise, `resolutionId` should be the ID of an object returned by `getResolutions()`
191
192## `getPlaybackRates() : Promise<number[]>`
193
194Get the available playback rates, where `1` represents normal speed, `0.5` is half speed, `2` is double speed, etc.
195
196## `getPlaybackRates() : Promise<number>`
197
198Get the current playback rate. See `getPlaybackRates()` for more information.
199
1151f521 200## `setPlaybackRate(rate: number) : Promise<void>`
99941732
WL
201
202Set the current playback rate. The passed rate should be a value as returned by `getPlaybackRates()`.
203
1151f521 204## `setVolume(factor: number) : Promise<void>`
99941732
WL
205
206Set the playback volume. Value should be between `0` and `1`.
207
208## `getVolume(): Promise<number>`
209
210Get the playback volume. Returns a value between `0` and `1`.
03d641a0 211
1151f521
C
212## `setCaption(id: string) : Promise<void>`
213
214Update current caption using the caption id.
215
216## `getCaptions(): Promise<{ id: string, label: string, src: string, mode: 'disabled' | 'showing' }>`
217
218Get video captions.
219
9054a8b6
C
220## `playNextVideo(): Promise<void>`
221
222Play next video in playlist.
223
224## `playPreviousVideo(): Promise<void>`
225
226Play previous video in playlist.
227
228## `getCurrentPosition(): Promise<void>`
229
230Get current position in playlist (starts from 1).
231
99941732
WL
232# Events
233
234You can subscribe to events by using `addEventListener()`. See above for details.
235
99941732
WL
236## Event `playbackStatusUpdate`
237
1151f521 238Fired every half second to provide the current status of playback.
6ccdf9d5 239The parameter of the callback will resemble:
99941732
WL
240
241```json
242{
243 "position": 22.3,
244 "volume": 0.9,
6ccdf9d5 245 "duration": "171.37499",
99941732
WL
246 "playbackState": "playing"
247}
248```
249
624a0221
C
250`duration` field and `ended` `playbackState` are available in PeerTube >= 2.2.
251
96aae68c
C
252The `volume` field contains the volume from `0` (silent) to `1` (full volume).
253The `playbackState` can be `unstarted`, `playing`, `paused` or `ended`. More states may be added later.
99941732
WL
254
255## Event `playbackStatusChange`
256
5ab994fe 257Fired when playback transitions between states, such as `paused` and `playing`. More states may be added later.
99941732
WL
258
259## Event `resolutionUpdate`
260
478924a0
C
261Fired when the available resolutions have changed, or when the currently selected resolution has changed. Listener should call `getResolutions()` to get the updated information.
262
263## Event `volumeChange`
264
265Fired when the player volume changed.