]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Fix live buffering with small latency
authorChocobozzz <me@florianbigard.com>
Tue, 7 Mar 2023 10:47:42 +0000 (11:47 +0100)
committerChocobozzz <me@florianbigard.com>
Tue, 7 Mar 2023 10:47:42 +0000 (11:47 +0100)
client/src/assets/player/shared/manager-options/hls-options-builder.ts
client/src/assets/player/shared/p2p-media-loader/segment-validator.ts

index 63e9fa8c8c3173ff613d5aa4edb4190a45ae8135..194991fa4796d6e9e37652a88d15e6376c73ef28 100644 (file)
@@ -96,7 +96,6 @@ export class HLSOptionsBuilder {
 
         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
@@ -129,7 +128,7 @@ export class HLSOptionsBuilder {
           ...base,
 
           useP2P: false,
-          httpDownloadProbability: 1
+          requiredSegmentsPriority: 10
         }
 
       case LiveVideoLatencyMode.HIGH_LATENCY:
index 3c76d63f78293b9a31408e50b8ee1433ffb08c2e..6e9bcf1039d174e615705865567116cddfd9e172 100644 (file)
@@ -7,24 +7,20 @@ import { isSameOrigin } from '../common'
 
 type SegmentsJSON = { [filename: string]: string | { [byterange: string]: string } }
 
-const maxRetries = 3
+const maxRetries = 10
 
 function segmentValidatorFactory (options: {
   serverUrl: string
   segmentsSha256Url: string
-  isLive: boolean
   authorizationHeader: () => string
   requiresAuth: boolean
 }) {
-  const { serverUrl, segmentsSha256Url, isLive, authorizationHeader, requiresAuth } = options
+  const { serverUrl, segmentsSha256Url, authorizationHeader, requiresAuth } = options
 
   let segmentsJSON = fetchSha256Segments({ serverUrl, segmentsSha256Url, authorizationHeader, requiresAuth })
   const regex = /bytes=(\d+)-(\d+)/
 
   return async function segmentValidator (segment: Segment, _method: string, _peerId: string, retry = 1) {
-    // Wait for hash generation from the server
-    if (isLive) await wait(1000)
-
     const filename = basename(removeQueryParams(segment.url))
 
     const segmentValue = (await segmentsJSON)[filename]
@@ -36,7 +32,7 @@ function segmentValidatorFactory (options: {
     if (!segmentValue) {
       logger.info(`Refetching sha segments for ${filename}`)
 
-      await wait(1000)
+      await wait(500)
 
       segmentsJSON = fetchSha256Segments({ serverUrl, segmentsSha256Url, authorizationHeader, requiresAuth })
       await segmentValidator(segment, _method, _peerId, retry + 1)