diff --git a/client/src/app/+videos/+video-edit/shared/video-edit.component.html b/client/src/app/+videos/+video-edit/shared/video-edit.component.html index fa816fd9e..fdd6b2311 100644 --- a/client/src/app/+videos/+video-edit/shared/video-edit.component.html +++ b/client/src/app/+videos/+video-edit/shared/video-edit.component.html @@ -45,9 +45,11 @@ - - Video descriptions are truncated by default and require manual action to expand them. - + Video descriptions are truncated by default and require manual action to expand them. + +
+ + A timestamp (00:05 for example) is automatically converted into a link to a part of the video.
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 63e9fa8c8..194991fa4 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 @@ -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: diff --git a/client/src/assets/player/shared/p2p-media-loader/segment-validator.ts b/client/src/assets/player/shared/p2p-media-loader/segment-validator.ts index 3c76d63f7..6e9bcf103 100644 --- a/client/src/assets/player/shared/p2p-media-loader/segment-validator.ts +++ b/client/src/assets/player/shared/p2p-media-loader/segment-validator.ts @@ -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) diff --git a/scripts/create-move-video-storage-job.ts b/scripts/create-move-video-storage-job.ts index 13ba3c0b7..c402115f0 100644 --- a/scripts/create-move-video-storage-job.ts +++ b/scripts/create-move-video-storage-job.ts @@ -72,6 +72,8 @@ async function run () { for (const id of ids) { const videoFull = await VideoModel.loadFull(id) + if (videoFull.isLive) continue + const files = videoFull.VideoFiles || [] const hls = videoFull.getHLSPlaylist()