import { ffprobePromise, getAudioStream, getVideoStreamDimensionsInfo, getVideoStreamFPS } from '@shared/ffmpeg'
import { ThumbnailType, VideoLiveEndingPayload, VideoState } from '@shared/models'
import { logger, loggerTagsFactory } from '../../../helpers/logger'
+import { peertubeTruncate } from '@server/helpers/core-utils'
+import { CONSTRAINTS_FIELDS } from '@server/initializers/constants'
const lTags = loggerTagsFactory('live', 'job')
const replaySettings = await VideoLiveReplaySettingModel.load(liveSession.replaySettingId)
+ const videoNameSuffix = ` - ${new Date(publishedAt).toLocaleString()}`
+ const truncatedVideoName = peertubeTruncate(liveVideo.name, {
+ length: CONSTRAINTS_FIELDS.VIDEOS.NAME.max - videoNameSuffix.length
+ })
+
const replayVideo = new VideoModel({
- name: `${liveVideo.name} - ${new Date(publishedAt).toLocaleString()}`,
+ name: truncatedVideoName + videoNameSuffix,
isLive: false,
state: VideoState.TO_TRANSCODE,
duration: 0,
const attributes: LiveVideoCreate = {
channelId: servers[0].store.channel.id,
privacy: VideoPrivacy.PUBLIC,
- name: 'my super live',
+ name: 'live'.repeat(30),
saveReplay: options.replay,
replaySettings: options.replaySettings,
permanentLive: options.permanent
import ffmpeg, { FfmpegCommand } from 'fluent-ffmpeg'
+import { truncate } from 'lodash'
import { buildAbsoluteFixturePath, wait } from '@shared/core-utils'
import { VideoDetails, VideoInclude, VideoPrivacy } from '@shared/models'
import { PeerTubeServer } from '../server/server'
const { data } = await server.videos.list({ token: server.accessToken, sort: '-publishedAt', include, privacyOneOf })
- return data.find(v => v.name === liveDetails.name + ' - ' + new Date(liveDetails.publishedAt).toLocaleString())
+ const videoNameSuffix = ` - ${new Date(liveDetails.publishedAt).toLocaleString()}`
+ const truncatedVideoName = truncate(liveDetails.name, {
+ length: 120 - videoNameSuffix.length
+ })
+ const toFind = truncatedVideoName + videoNameSuffix
+
+ return data.find(v => v.name === toFind)
}
export {