diff options
Diffstat (limited to 'client/src/assets/player')
-rw-r--r-- | client/src/assets/player/peertube-player-manager.ts | 26 | ||||
-rw-r--r-- | client/src/assets/player/webtorrent/webtorrent-plugin.ts | 7 |
2 files changed, 19 insertions, 14 deletions
diff --git a/client/src/assets/player/peertube-player-manager.ts b/client/src/assets/player/peertube-player-manager.ts index 15b2f420b..8e0a9109f 100644 --- a/client/src/assets/player/peertube-player-manager.ts +++ b/client/src/assets/player/peertube-player-manager.ts | |||
@@ -35,7 +35,7 @@ import { | |||
35 | VideoJSPluginOptions | 35 | VideoJSPluginOptions |
36 | } from './peertube-videojs-typings' | 36 | } from './peertube-videojs-typings' |
37 | import { TranslationsManager } from './translations-manager' | 37 | import { TranslationsManager } from './translations-manager' |
38 | import { buildVideoOrPlaylistEmbed, buildVideoLink, copyToClipboard, getRtcConfig, isIOS, isSafari } from './utils' | 38 | import { buildVideoOrPlaylistEmbed, buildVideoLink, copyToClipboard, getRtcConfig, isSafari, isIOS } from './utils' |
39 | 39 | ||
40 | // Change 'Playback Rate' to 'Speed' (smaller for our settings menu) | 40 | // Change 'Playback Rate' to 'Speed' (smaller for our settings menu) |
41 | (videojs.getComponent('PlaybackRateMenuButton') as any).prototype.controlText_ = 'Speed' | 41 | (videojs.getComponent('PlaybackRateMenuButton') as any).prototype.controlText_ = 'Speed' |
@@ -117,6 +117,8 @@ export class PeertubePlayerManager { | |||
117 | private static playerElementClassName: string | 117 | private static playerElementClassName: string |
118 | private static onPlayerChange: (player: videojs.Player) => void | 118 | private static onPlayerChange: (player: videojs.Player) => void |
119 | 119 | ||
120 | private static alreadyPlayed = false | ||
121 | |||
120 | static async initialize (mode: PlayerMode, options: PeertubePlayerManagerOptions, onPlayerChange: (player: videojs.Player) => void) { | 122 | static async initialize (mode: PlayerMode, options: PeertubePlayerManagerOptions, onPlayerChange: (player: videojs.Player) => void) { |
121 | let p2pMediaLoader: any | 123 | let p2pMediaLoader: any |
122 | 124 | ||
@@ -152,6 +154,10 @@ export class PeertubePlayerManager { | |||
152 | alreadyFallback = true | 154 | alreadyFallback = true |
153 | }) | 155 | }) |
154 | 156 | ||
157 | player.one('play', () => { | ||
158 | PeertubePlayerManager.alreadyPlayed = true | ||
159 | }) | ||
160 | |||
155 | self.addContextMenu(mode, player, options.common.embedUrl) | 161 | self.addContextMenu(mode, player, options.common.embedUrl) |
156 | 162 | ||
157 | player.bezels() | 163 | player.bezels() |
@@ -202,6 +208,7 @@ export class PeertubePlayerManager { | |||
202 | p2pMediaLoaderModule?: any | 208 | p2pMediaLoaderModule?: any |
203 | ): videojs.PlayerOptions { | 209 | ): videojs.PlayerOptions { |
204 | const commonOptions = options.common | 210 | const commonOptions = options.common |
211 | const isHLS = mode === 'p2p-media-loader' | ||
205 | 212 | ||
206 | let autoplay = this.getAutoPlayValue(commonOptions.autoplay) | 213 | let autoplay = this.getAutoPlayValue(commonOptions.autoplay) |
207 | let html5 = {} | 214 | let html5 = {} |
@@ -227,7 +234,7 @@ export class PeertubePlayerManager { | |||
227 | PeertubePlayerManager.addHotkeysOptions(plugins) | 234 | PeertubePlayerManager.addHotkeysOptions(plugins) |
228 | } | 235 | } |
229 | 236 | ||
230 | if (mode === 'p2p-media-loader') { | 237 | if (isHLS) { |
231 | const { hlsjs } = PeertubePlayerManager.addP2PMediaLoaderOptions(plugins, options, p2pMediaLoaderModule) | 238 | const { hlsjs } = PeertubePlayerManager.addP2PMediaLoaderOptions(plugins, options, p2pMediaLoaderModule) |
232 | 239 | ||
233 | html5 = hlsjs.html5 | 240 | html5 = hlsjs.html5 |
@@ -579,12 +586,15 @@ export class PeertubePlayerManager { | |||
579 | private static getAutoPlayValue (autoplay: any) { | 586 | private static getAutoPlayValue (autoplay: any) { |
580 | if (autoplay !== true) return autoplay | 587 | if (autoplay !== true) return autoplay |
581 | 588 | ||
582 | // Giving up with iOS | 589 | // We have issues with autoplay and Safari with webtorrent |
583 | if (isIOS()) return false | 590 | if (isIOS()) { |
584 | 591 | // On first play, disable autoplay to avoid issues | |
585 | // We have issues with autoplay and Safari. | 592 | // But if the player already played videos, we can safely autoplay next ones |
586 | // any that tries to play using auto mute seems to work | 593 | return PeertubePlayerManager.alreadyPlayed ? 'play' : false |
587 | if (isSafari()) return 'any' | 594 | } else if (isSafari()) { |
595 | // Issues with Safari and webtorrent on first play | ||
596 | return PeertubePlayerManager.alreadyPlayed ? 'play' : false | ||
597 | } | ||
588 | 598 | ||
589 | return 'play' | 599 | return 'play' |
590 | } | 600 | } |
diff --git a/client/src/assets/player/webtorrent/webtorrent-plugin.ts b/client/src/assets/player/webtorrent/webtorrent-plugin.ts index 5c8aca1f8..782c91cbd 100644 --- a/client/src/assets/player/webtorrent/webtorrent-plugin.ts +++ b/client/src/assets/player/webtorrent/webtorrent-plugin.ts | |||
@@ -74,7 +74,7 @@ class WebTorrentPlugin extends Plugin { | |||
74 | this.startTime = timeToInt(options.startTime) | 74 | this.startTime = timeToInt(options.startTime) |
75 | 75 | ||
76 | // Disable auto play on iOS | 76 | // Disable auto play on iOS |
77 | this.autoplay = options.autoplay && isIOS() === false | 77 | this.autoplay = options.autoplay |
78 | this.playerRefusedP2P = !getStoredP2PEnabled() | 78 | this.playerRefusedP2P = !getStoredP2PEnabled() |
79 | 79 | ||
80 | this.videoFiles = options.videoFiles | 80 | this.videoFiles = options.videoFiles |
@@ -329,11 +329,6 @@ class WebTorrentPlugin extends Plugin { | |||
329 | private tryToPlay (done?: (err?: Error) => void) { | 329 | private tryToPlay (done?: (err?: Error) => void) { |
330 | if (!done) done = function () { /* empty */ } | 330 | if (!done) done = function () { /* empty */ } |
331 | 331 | ||
332 | // Try in mute mode because we have issues with Safari | ||
333 | if (isSafari() && this.player.muted() === false) { | ||
334 | this.player.muted(true) | ||
335 | } | ||
336 | |||
337 | const playPromise = this.player.play() | 332 | const playPromise = this.player.play() |
338 | if (playPromise !== undefined) { | 333 | if (playPromise !== undefined) { |
339 | return playPromise.then(() => done()) | 334 | return playPromise.then(() => done()) |