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=e7f664fd446f03c8bf07c96299bb8a338e3cc455;hpb=57d6503286b114fee61b5e4725825e2490dcac29;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 e7f664fd4..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 @@ -1,10 +1,11 @@ import { HybridLoaderSettings } from '@peertube/p2p-media-loader-core' import { HlsJsEngineSettings } from '@peertube/p2p-media-loader-hlsjs' +import { logger } from '@root-helpers/logger' 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' @@ -18,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, @@ -46,13 +52,14 @@ export class HLSOptionsBuilder { if (file.fps >= 50) label += file.fps return label - }, - html5: { - hlsjsConfig: this.getHLSJSOptions(loader) } } - return { p2pMediaLoader, hlsjs } + const html5 = { + hlsjsConfig: this.getHLSJSOptions(loader) + } + + return { p2pMediaLoader, hlsjs, html5 } } // --------------------------------------------------------------------------- @@ -60,7 +67,7 @@ export class HLSOptionsBuilder { private getP2PMediaLoaderOptions (redundancyUrlManager: RedundancyUrlManager): HlsJsEngineSettings { let consumeOnly = false if ((navigator as any)?.connection?.type === 'cellular') { - console.log('We are on a cellular connection: disabling seeding.') + logger.info('We are on a cellular connection: disabling seeding.') consumeOnly = true } @@ -73,15 +80,28 @@ export class HLSOptionsBuilder { return { loader: { - trackerAnnounce, rtcConfig: getRtcConfig(), 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, @@ -90,7 +110,7 @@ export class HLSOptionsBuilder { }, segments: { swarmId: this.options.p2pMediaLoader.playlistUrl, - forwardSegmentCount: specificLiveOrVODOptions.p2pDownloadMaxPriority + forwardSegmentCount: specificLiveOrVODOptions.p2pDownloadMaxPriority ?? 20 } } } @@ -122,6 +142,7 @@ export class HLSOptionsBuilder { private getP2PMediaLoaderVODOptions (): Partial { return { requiredSegmentsPriority: 3, + skipSegmentBuilderPriority: 1, cachedSegmentExpiration: 86400000, cachedSegmentsCount: 100, @@ -157,6 +178,7 @@ export class HLSOptionsBuilder { ...base, abrEwmaDefaultEstimate: averageBandwidth * 8, // We want bit/s + backBufferLength: 90, startLevel: -1, testBandwidth: false, debug: false