X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fassets%2Fplayer%2Fshared%2Fmanager-options%2Fhls-options-builder.ts;h=497a974363c769280c5e27f1a14cafd57f839e7b;hb=2f061e065ab43cc0b73595b619639a92952aeeba;hp=ed12f6e8b2b79dcde6fd4f01023f2bc4a2b26e7c;hpb=42b40636991b97fe818007fab19091764fc5db73;p=github%2FChocobozzz%2FPeerTube.git 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 ed12f6e8b..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' import { getAverageBandwidthInStore } from '../../peertube-player-local-storage' import { P2PMediaLoader, P2PMediaLoaderPluginOptions } from '../../types' import { PeertubePlayerManagerOptions } from '../../types/manager-options' -import { getRtcConfig } from '../common' +import { getRtcConfig, isSameOrigin } from '../common' import { RedundancyUrlManager } from '../p2p-media-loader/redundancy-url-manager' import { segmentUrlBuilderFactory } from '../p2p-media-loader/segment-url-builder' import { segmentValidatorFactory } from '../p2p-media-loader/segment-validator' @@ -19,15 +19,20 @@ export class HLSOptionsBuilder { } - getPluginOptions () { + async getPluginOptions () { const commonOptions = this.options.common const redundancyUrlManager = new RedundancyUrlManager(this.options.p2pMediaLoader.redundancyBaseUrls) - const p2pMediaLoaderConfig = this.getP2PMediaLoaderOptions(redundancyUrlManager) + const p2pMediaLoaderConfig = await this.options.pluginsManager.runHook( + 'filter:internal.player.p2p-media-loader.options.result', + this.getP2PMediaLoaderOptions(redundancyUrlManager) + ) const loader = new this.p2pMediaLoaderModule.Engine(p2pMediaLoaderConfig).createLoaderClass() as P2PMediaLoader const p2pMediaLoader: P2PMediaLoaderPluginOptions = { + requiresAuth: commonOptions.requiresAuth, + redundancyUrlManager, type: 'application/x-mpegURL', startTime: commonOptions.startTime, @@ -81,8 +86,22 @@ export class HLSOptionsBuilder { simultaneousHttpDownloads: 1, httpFailedSegmentTimeout: 1000, - segmentValidator: segmentValidatorFactory(this.options.p2pMediaLoader.segmentsSha256Url, this.options.common.isLive), - segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager, 1), + xhrSetup: (xhr, url) => { + if (!this.options.common.requiresAuth) return + if (!isSameOrigin(this.options.common.serverUrl, url)) return + + xhr.setRequestHeader('Authorization', this.options.common.authorizationHeader()) + }, + + segmentValidator: segmentValidatorFactory({ + segmentsSha256Url: this.options.p2pMediaLoader.segmentsSha256Url, + isLive: this.options.common.isLive, + authorizationHeader: this.options.common.authorizationHeader, + requiresAuth: this.options.common.requiresAuth, + serverUrl: this.options.common.serverUrl + }), + + segmentUrlBuilder: segmentUrlBuilderFactory(redundancyUrlManager), useP2P: this.options.common.p2pEnabled, consumeOnly, @@ -123,6 +142,7 @@ export class HLSOptionsBuilder { private getP2PMediaLoaderVODOptions (): Partial { return { requiredSegmentsPriority: 3, + skipSegmentBuilderPriority: 1, cachedSegmentExpiration: 86400000, cachedSegmentsCount: 100, @@ -158,6 +178,7 @@ export class HLSOptionsBuilder { ...base, abrEwmaDefaultEstimate: averageBandwidth * 8, // We want bit/s + backBufferLength: 90, startLevel: -1, testBandwidth: false, debug: false