let segmentsJSON = fetchSha256Segments(segmentsSha256Url)
const regex = /bytes=(\d+)-(\d+)/
- return async function segmentValidator (segment: Segment, retry = 1) {
+ return async function segmentValidator (segment: Segment, _method: string, _peerId: string, retry = 1) {
// Wait for hash generation from the server
if (isLive) await wait(1000)
await wait(1000)
segmentsJSON = fetchSha256Segments(segmentsSha256Url)
- await segmentValidator(segment, retry + 1)
+ await segmentValidator(segment, _method, _peerId, retry + 1)
return
}
CLEANUP_DELAY: 1000 * 60 * 5, // 5 minutes
SEGMENT_TIME_SECONDS: 4, // 4 seconds
SEGMENTS_LIST_SIZE: 15, // 15 maximum segments in live playlist
+ EDGE_LIVE_DELAY_SEGMENTS_NOTIFICATION: 3,
RTMP: {
CHUNK_SIZE: 60000,
GOP_CACHE: true,
VIDEO_LIVE.CLEANUP_DELAY = 5000
VIDEO_LIVE.SEGMENT_TIME_SECONDS = 2
+ VIDEO_LIVE.EDGE_LIVE_DELAY_SEGMENTS_NOTIFICATION = 1
}
updateWebserverUrls()
await video.save()
videoLive.Video = video
- await federateVideoIfNeeded(video, false)
+ setTimeout(() => {
+ federateVideoIfNeeded(video, false)
+ .catch(err => logger.error('Cannot federate live video %s.', video.url, { err }))
+
+ PeerTubeSocket.Instance.sendVideoLiveNewState(video)
+ }, VIDEO_LIVE.SEGMENT_TIME_SECONDS * 1000 * VIDEO_LIVE.EDGE_LIVE_DELAY_SEGMENTS_NOTIFICATION)
- PeerTubeSocket.Instance.sendVideoLiveNewState(video)
} catch (err) {
- logger.error('Cannot federate video %d.', videoLive.videoId, { err })
+ logger.error('Cannot save/federate live video %d.', videoLive.videoId, { err })
} finally {
masterWatcher.close()
.catch(err => logger.error('Cannot close master watcher of %s.', outPath, { err }))