diff options
author | Chocobozzz <me@florianbigard.com> | 2022-11-15 11:57:49 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2022-11-15 11:57:49 +0100 |
commit | 59a643aa5cf6775d27dfcc147b19c4537292d53c (patch) | |
tree | 74bc87e2f0f5581306c8ea9dd1f8acf05833a74a /client/src/standalone | |
parent | c2419476302b20e9fe3708d7a0a889ae18c95c1b (diff) | |
download | PeerTube-59a643aa5cf6775d27dfcc147b19c4537292d53c.tar.gz PeerTube-59a643aa5cf6775d27dfcc147b19c4537292d53c.tar.zst PeerTube-59a643aa5cf6775d27dfcc147b19c4537292d53c.zip |
Force autoplay when live starts
Using the mute
Diffstat (limited to 'client/src/standalone')
-rw-r--r-- | client/src/standalone/videos/embed.ts | 45 | ||||
-rw-r--r-- | client/src/standalone/videos/shared/player-manager-options.ts | 4 |
2 files changed, 37 insertions, 12 deletions
diff --git a/client/src/standalone/videos/embed.ts b/client/src/standalone/videos/embed.ts index 2b826b9a2..5bb3b43c2 100644 --- a/client/src/standalone/videos/embed.ts +++ b/client/src/standalone/videos/embed.ts | |||
@@ -8,7 +8,16 @@ import { PeertubePlayerManager } from '../../assets/player' | |||
8 | import { TranslationsManager } from '../../assets/player/translations-manager' | 8 | import { TranslationsManager } from '../../assets/player/translations-manager' |
9 | import { getParamString, logger, videoRequiresAuth } from '../../root-helpers' | 9 | import { getParamString, logger, videoRequiresAuth } from '../../root-helpers' |
10 | import { PeerTubeEmbedApi } from './embed-api' | 10 | import { PeerTubeEmbedApi } from './embed-api' |
11 | import { AuthHTTP, LiveManager, PeerTubePlugin, PlayerManagerOptions, PlaylistFetcher, PlaylistTracker, Translations, VideoFetcher } from './shared' | 11 | import { |
12 | AuthHTTP, | ||
13 | LiveManager, | ||
14 | PeerTubePlugin, | ||
15 | PlayerManagerOptions, | ||
16 | PlaylistFetcher, | ||
17 | PlaylistTracker, | ||
18 | Translations, | ||
19 | VideoFetcher | ||
20 | } from './shared' | ||
12 | import { PlayerHTML } from './shared/player-html' | 21 | import { PlayerHTML } from './shared/player-html' |
13 | 22 | ||
14 | export class PeerTubeEmbed { | 23 | export class PeerTubeEmbed { |
@@ -81,7 +90,7 @@ export class PeerTubeEmbed { | |||
81 | 90 | ||
82 | if (!videoId) return | 91 | if (!videoId) return |
83 | 92 | ||
84 | return this.loadVideoAndBuildPlayer(videoId) | 93 | return this.loadVideoAndBuildPlayer({ uuid: videoId, forceAutoplay: false }) |
85 | } | 94 | } |
86 | 95 | ||
87 | private async initPlaylist () { | 96 | private async initPlaylist () { |
@@ -138,7 +147,7 @@ export class PeerTubeEmbed { | |||
138 | 147 | ||
139 | this.playlistTracker.setCurrentElement(next) | 148 | this.playlistTracker.setCurrentElement(next) |
140 | 149 | ||
141 | return this.loadVideoAndBuildPlayer(next.video.uuid) | 150 | return this.loadVideoAndBuildPlayer({ uuid: next.video.uuid, forceAutoplay: false }) |
142 | } | 151 | } |
143 | 152 | ||
144 | async playPreviousPlaylistVideo () { | 153 | async playPreviousPlaylistVideo () { |
@@ -150,7 +159,7 @@ export class PeerTubeEmbed { | |||
150 | 159 | ||
151 | this.playlistTracker.setCurrentElement(previous) | 160 | this.playlistTracker.setCurrentElement(previous) |
152 | 161 | ||
153 | await this.loadVideoAndBuildPlayer(previous.video.uuid) | 162 | await this.loadVideoAndBuildPlayer({ uuid: previous.video.uuid, forceAutoplay: false }) |
154 | } | 163 | } |
155 | 164 | ||
156 | getCurrentPlaylistPosition () { | 165 | getCurrentPlaylistPosition () { |
@@ -159,17 +168,28 @@ export class PeerTubeEmbed { | |||
159 | 168 | ||
160 | // --------------------------------------------------------------------------- | 169 | // --------------------------------------------------------------------------- |
161 | 170 | ||
162 | private async loadVideoAndBuildPlayer (uuid: string) { | 171 | private async loadVideoAndBuildPlayer (options: { |
172 | uuid: string | ||
173 | forceAutoplay: boolean | ||
174 | }) { | ||
175 | const { uuid, forceAutoplay } = options | ||
176 | |||
163 | try { | 177 | try { |
164 | const { videoResponse, captionsPromise } = await this.videoFetcher.loadVideo(uuid) | 178 | const { videoResponse, captionsPromise } = await this.videoFetcher.loadVideo(uuid) |
165 | 179 | ||
166 | return this.buildVideoPlayer(videoResponse, captionsPromise) | 180 | return this.buildVideoPlayer({ videoResponse, captionsPromise, forceAutoplay }) |
167 | } catch (err) { | 181 | } catch (err) { |
168 | this.playerHTML.displayError(err.message, await this.translationsPromise) | 182 | this.playerHTML.displayError(err.message, await this.translationsPromise) |
169 | } | 183 | } |
170 | } | 184 | } |
171 | 185 | ||
172 | private async buildVideoPlayer (videoResponse: Response, captionsPromise: Promise<Response>) { | 186 | private async buildVideoPlayer (options: { |
187 | videoResponse: Response | ||
188 | captionsPromise: Promise<Response> | ||
189 | forceAutoplay: boolean | ||
190 | }) { | ||
191 | const { videoResponse, captionsPromise, forceAutoplay } = options | ||
192 | |||
173 | const alreadyHadPlayer = this.resetPlayerElement() | 193 | const alreadyHadPlayer = this.resetPlayerElement() |
174 | 194 | ||
175 | const videoInfoPromise = videoResponse.json() | 195 | const videoInfoPromise = videoResponse.json() |
@@ -201,7 +221,7 @@ export class PeerTubeEmbed { | |||
201 | 221 | ||
202 | const PlayerManager: typeof PeertubePlayerManager = PeertubePlayerManagerModule.PeertubePlayerManager | 222 | const PlayerManager: typeof PeertubePlayerManager = PeertubePlayerManagerModule.PeertubePlayerManager |
203 | 223 | ||
204 | const options = await this.playerManagerOptions.getPlayerOptions({ | 224 | const playerOptions = await this.playerManagerOptions.getPlayerOptions({ |
205 | video, | 225 | video, |
206 | captionsResponse, | 226 | captionsResponse, |
207 | alreadyHadPlayer, | 227 | alreadyHadPlayer, |
@@ -211,16 +231,17 @@ export class PeerTubeEmbed { | |||
211 | authorizationHeader: () => this.http.getHeaderTokenValue(), | 231 | authorizationHeader: () => this.http.getHeaderTokenValue(), |
212 | videoFileToken: () => videoFileToken, | 232 | videoFileToken: () => videoFileToken, |
213 | 233 | ||
214 | onVideoUpdate: (uuid: string) => this.loadVideoAndBuildPlayer(uuid), | 234 | onVideoUpdate: (uuid: string) => this.loadVideoAndBuildPlayer({ uuid, forceAutoplay: false }), |
215 | 235 | ||
216 | playlistTracker: this.playlistTracker, | 236 | playlistTracker: this.playlistTracker, |
217 | playNextPlaylistVideo: () => this.playNextPlaylistVideo(), | 237 | playNextPlaylistVideo: () => this.playNextPlaylistVideo(), |
218 | playPreviousPlaylistVideo: () => this.playPreviousPlaylistVideo(), | 238 | playPreviousPlaylistVideo: () => this.playPreviousPlaylistVideo(), |
219 | 239 | ||
220 | live | 240 | live, |
241 | forceAutoplay | ||
221 | }) | 242 | }) |
222 | 243 | ||
223 | this.player = await PlayerManager.initialize(this.playerManagerOptions.getMode(), options, (player: videojs.Player) => { | 244 | this.player = await PlayerManager.initialize(this.playerManagerOptions.getMode(), playerOptions, (player: videojs.Player) => { |
224 | this.player = player | 245 | this.player = player |
225 | }) | 246 | }) |
226 | 247 | ||
@@ -256,7 +277,7 @@ export class PeerTubeEmbed { | |||
256 | video, | 277 | video, |
257 | onPublishedVideo: () => { | 278 | onPublishedVideo: () => { |
258 | this.liveManager.stopListeningForChanges(video) | 279 | this.liveManager.stopListeningForChanges(video) |
259 | this.loadVideoAndBuildPlayer(video.uuid) | 280 | this.loadVideoAndBuildPlayer({ uuid: video.uuid, forceAutoplay: true }) |
260 | } | 281 | } |
261 | }) | 282 | }) |
262 | 283 | ||
diff --git a/client/src/standalone/videos/shared/player-manager-options.ts b/client/src/standalone/videos/shared/player-manager-options.ts index 87a84975b..9ec012369 100644 --- a/client/src/standalone/videos/shared/player-manager-options.ts +++ b/client/src/standalone/videos/shared/player-manager-options.ts | |||
@@ -155,6 +155,8 @@ export class PlayerManagerOptions { | |||
155 | captionsResponse: Response | 155 | captionsResponse: Response |
156 | live?: LiveVideo | 156 | live?: LiveVideo |
157 | 157 | ||
158 | forceAutoplay: boolean | ||
159 | |||
158 | authorizationHeader: () => string | 160 | authorizationHeader: () => string |
159 | videoFileToken: () => string | 161 | videoFileToken: () => string |
160 | 162 | ||
@@ -175,6 +177,7 @@ export class PlayerManagerOptions { | |||
175 | alreadyHadPlayer, | 177 | alreadyHadPlayer, |
176 | videoFileToken, | 178 | videoFileToken, |
177 | translations, | 179 | translations, |
180 | forceAutoplay, | ||
178 | playlistTracker, | 181 | playlistTracker, |
179 | live, | 182 | live, |
180 | authorizationHeader, | 183 | authorizationHeader, |
@@ -187,6 +190,7 @@ export class PlayerManagerOptions { | |||
187 | common: { | 190 | common: { |
188 | // Autoplay in playlist mode | 191 | // Autoplay in playlist mode |
189 | autoplay: alreadyHadPlayer ? true : this.autoplay, | 192 | autoplay: alreadyHadPlayer ? true : this.autoplay, |
193 | forceAutoplay, | ||
190 | 194 | ||
191 | controls: this.controls, | 195 | controls: this.controls, |
192 | controlBar: this.controlBar, | 196 | controlBar: this.controlBar, |