]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/assets/player/shared/manager-options/hls-options-builder.ts
Merge branch 'release/4.3.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / shared / manager-options / hls-options-builder.ts
index ed12f6e8b2b79dcde6fd4f01023f2bc4a2b26e7c..497a974363c769280c5e27f1a14cafd57f839e7b 100644 (file)
@@ -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<HybridLoaderSettings> {
     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