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'
const loader = new this.p2pMediaLoaderModule.Engine(p2pMediaLoaderConfig).createLoaderClass() as P2PMediaLoader
const p2pMediaLoader: P2PMediaLoaderPluginOptions = {
+ requiresAuth: commonOptions.requiresAuth,
+ videoFileToken: commonOptions.videoFileToken,
+
redundancyUrlManager,
type: 'application/x-mpegURL',
startTime: commonOptions.startTime,
simultaneousHttpDownloads: 1,
httpFailedSegmentTimeout: 1000,
- segmentValidator: segmentValidatorFactory(this.options.p2pMediaLoader.segmentsSha256Url, this.options.common.isLive),
+ 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,