diff options
Diffstat (limited to 'client/src/assets/player/shared/manager-options/hls-options-builder.ts')
-rw-r--r-- | client/src/assets/player/shared/manager-options/hls-options-builder.ts | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/client/src/assets/player/shared/manager-options/hls-options-builder.ts b/client/src/assets/player/shared/manager-options/hls-options-builder.ts index a572febc2..497a97436 100644 --- a/client/src/assets/player/shared/manager-options/hls-options-builder.ts +++ b/client/src/assets/player/shared/manager-options/hls-options-builder.ts | |||
@@ -5,7 +5,7 @@ import { LiveVideoLatencyMode } from '@shared/models' | |||
5 | import { getAverageBandwidthInStore } from '../../peertube-player-local-storage' | 5 | import { getAverageBandwidthInStore } from '../../peertube-player-local-storage' |
6 | import { P2PMediaLoader, P2PMediaLoaderPluginOptions } from '../../types' | 6 | import { P2PMediaLoader, P2PMediaLoaderPluginOptions } from '../../types' |
7 | import { PeertubePlayerManagerOptions } from '../../types/manager-options' | 7 | import { PeertubePlayerManagerOptions } from '../../types/manager-options' |
8 | import { getRtcConfig } from '../common' | 8 | import { getRtcConfig, isSameOrigin } from '../common' |
9 | import { RedundancyUrlManager } from '../p2p-media-loader/redundancy-url-manager' | 9 | import { RedundancyUrlManager } from '../p2p-media-loader/redundancy-url-manager' |
10 | import { segmentUrlBuilderFactory } from '../p2p-media-loader/segment-url-builder' | 10 | import { segmentUrlBuilderFactory } from '../p2p-media-loader/segment-url-builder' |
11 | import { segmentValidatorFactory } from '../p2p-media-loader/segment-validator' | 11 | import { segmentValidatorFactory } from '../p2p-media-loader/segment-validator' |
@@ -19,15 +19,20 @@ export class HLSOptionsBuilder { | |||
19 | 19 | ||
20 | } | 20 | } |
21 | 21 | ||
22 | getPluginOptions () { | 22 | async getPluginOptions () { |
23 | const commonOptions = this.options.common | 23 | const commonOptions = this.options.common |
24 | 24 | ||
25 | const redundancyUrlManager = new RedundancyUrlManager(this.options.p2pMediaLoader.redundancyBaseUrls) | 25 | const redundancyUrlManager = new RedundancyUrlManager(this.options.p2pMediaLoader.redundancyBaseUrls) |
26 | 26 | ||
27 | const p2pMediaLoaderConfig = this.getP2PMediaLoaderOptions(redundancyUrlManager) | 27 | const p2pMediaLoaderConfig = await this.options.pluginsManager.runHook( |
28 | 'filter:internal.player.p2p-media-loader.options.result', | ||
29 | this.getP2PMediaLoaderOptions(redundancyUrlManager) | ||
30 | ) | ||
28 | const loader = new this.p2pMediaLoaderModule.Engine(p2pMediaLoaderConfig).createLoaderClass() as P2PMediaLoader | 31 | const loader = new this.p2pMediaLoaderModule.Engine(p2pMediaLoaderConfig).createLoaderClass() as P2PMediaLoader |
29 | 32 | ||
30 | const p2pMediaLoader: P2PMediaLoaderPluginOptions = { | 33 | const p2pMediaLoader: P2PMediaLoaderPluginOptions = { |
34 | requiresAuth: commonOptions.requiresAuth, | ||
35 | |||
31 | redundancyUrlManager, | 36 | redundancyUrlManager, |
32 | type: 'application/x-mpegURL', | 37 | type: 'application/x-mpegURL', |
33 | startTime: commonOptions.startTime, | 38 | startTime: commonOptions.startTime, |
@@ -81,7 +86,21 @@ export class HLSOptionsBuilder { | |||
81 | simultaneousHttpDownloads: 1, | 86 | simultaneousHttpDownloads: 1, |
82 | httpFailedSegmentTimeout: 1000, | 87 | httpFailedSegmentTimeout: 1000, |
83 | 88 | ||
84 | segmentValidator: segmentValidatorFactory(this.options.p2pMediaLoader.segmentsSha256Url, this.options.common.isLive), | 89 | xhrSetup: (xhr, url) => { |
90 | if (!this.options.common.requiresAuth) return | ||
91 | if (!isSameOrigin(this.options.common.serverUrl, url)) return | ||
92 | |||
93 | xhr.setRequestHeader('Authorization', this.options.common.authorizationHeader()) | ||
94 | }, | ||
95 | |||
96 | segmentValidator: segmentValidatorFactory({ | ||
97 | segmentsSha256Url: this.options.p2pMediaLoader.segmentsSha256Url, | ||
98 | isLive: this.options.common.isLive, | ||
99 | authorizationHeader: this.options.common.authorizationHeader, | ||
100 | requiresAuth: this.options.common.requiresAuth, | ||
101 | serverUrl: this.options.common.serverUrl | ||
102 | }), | ||
103 | |||
85 | segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager), | 104 | segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager), |
86 | 105 | ||
87 | useP2P: this.options.common.p2pEnabled, | 106 | useP2P: this.options.common.p2pEnabled, |