X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Finitializers%2Fconstants.ts;h=0b4b412731a5456e21d4f37fde7cd84333eccf2e;hb=e9cb361cf51d11ef603128fb6715c103becf5123;hp=fde87d9f8a65b7a2d783d007639e08873b29dfa9;hpb=0f8d00e3144060270d7fe603865fccaf18649c47;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts index fde87d9f8..0b4b41273 100644 --- a/server/initializers/constants.ts +++ b/server/initializers/constants.ts @@ -24,7 +24,7 @@ import { CONFIG, registerConfigChangedHandler } from './config' // --------------------------------------------------------------------------- -const LAST_MIGRATION_VERSION = 550 +const LAST_MIGRATION_VERSION = 570 // --------------------------------------------------------------------------- @@ -85,7 +85,7 @@ const SORTABLE_COLUMNS = { USER_NOTIFICATIONS: [ 'createdAt', 'read' ], - VIDEO_PLAYLISTS: [ 'displayName', 'createdAt', 'updatedAt' ], + VIDEO_PLAYLISTS: [ 'name', 'displayName', 'createdAt', 'updatedAt' ], PLUGINS: [ 'name', 'createdAt', 'updatedAt' ], @@ -179,6 +179,12 @@ const REPEAT_JOBS: { [ id: string ]: EveryRepeatOptions | CronRepeatOptions } = cron: randomInt(1, 20) + ' * * * *' // Between 1-20 minutes past the hour } } +const JOB_PRIORITY = { + TRANSCODING: { + OPTIMIZER: 10, + NEW_RESOLUTION: 100 + } +} const BROADCAST_CONCURRENCY = 10 // How many requests in parallel we do in activitypub-http-broadcast job const CRAWL_REQUEST_CONCURRENCY = 1 // How many requests in parallel to fetch remote data (likes, shares...) @@ -194,7 +200,8 @@ const SCHEDULER_INTERVALS_MS = { checkPlugins: CONFIG.PLUGINS.INDEX.CHECK_LATEST_VERSIONS_INTERVAL, autoFollowIndexInstances: 60000 * 60 * 24, // 1 day removeOldViews: 60000 * 60 * 24, // 1 day - removeOldHistory: 60000 * 60 * 24 // 1 day + removeOldHistory: 60000 * 60 * 24, // 1 day + updateInboxStats: 1000 * 60// 1 minute } // --------------------------------------------------------------------------- @@ -257,7 +264,7 @@ const CONSTRAINTS_FIELDS = { DESCRIPTION: { min: 3, max: 10000 }, // Length SUPPORT: { min: 3, max: 1000 }, // Length IMAGE: { - EXTNAME: [ '.jpg', '.jpeg' ], + EXTNAME: [ '.png', '.jpg', '.jpeg', '.webp' ], FILE_SIZE: { max: 2 * 1024 * 1024 // 2MB } @@ -267,8 +274,6 @@ const CONSTRAINTS_FIELDS = { DURATION: { min: 0 }, // Number TAGS: { min: 0, max: 5 }, // Number of total tags TAG: { min: 2, max: 30 }, // Length - THUMBNAIL: { min: 2, max: 30 }, - THUMBNAIL_DATA: { min: 0, max: 20000 }, // Bytes VIEWS: { min: 0 }, LIKES: { min: 0 }, DISLIKES: { min: 0 }, @@ -291,7 +296,7 @@ const CONSTRAINTS_FIELDS = { PRIVATE_KEY: { min: 10, max: 5000 }, // Length URL: { min: 3, max: 2000 }, // Length AVATAR: { - EXTNAME: [ '.png', '.jpeg', '.jpg' ], + EXTNAME: [ '.png', '.jpeg', '.jpg', '.gif', '.webp' ], FILE_SIZE: { max: 2 * 1024 * 1024 // 2MB } @@ -336,6 +341,17 @@ const VIDEO_TRANSCODING_FPS: VideoTranscodingFPS = { KEEP_ORIGIN_FPS_RESOLUTION_MIN: 720 // We keep the original FPS on high resolutions (720 minimum) } +const VIDEO_TRANSCODING_ENCODERS = { + VIDEO: [ 'libx264' ], + + // Try the first one, if not available try the second one etc + AUDIO: [ + // we favor VBR, if a good AAC encoder is available + 'libfdk_aac', + 'aac' + ] +} + const DEFAULT_AUDIO_RESOLUTION = VideoResolution.H_480P const VIDEO_RATE_TYPES: { [ id: string ]: VideoRateType } = { @@ -344,8 +360,11 @@ const VIDEO_RATE_TYPES: { [ id: string ]: VideoRateType } = { } const FFMPEG_NICE: { [ id: string ]: number } = { - THUMBNAIL: 2, // 2 just for don't blocking servers - TRANSCODING: 15 + // parent process defaults to niceness = 0 + // reminder: lower = higher priority, max value is 19, lowest is -20 + THUMBNAIL: 2, // low value in order to avoid blocking server + LIVE: 9, // prioritize over VOD + VOD: 15 } const VIDEO_CATEGORIES = { @@ -623,7 +642,8 @@ const VIDEO_LIVE = { 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, + REPLAY_DIRECTORY: 'replay', + EDGE_LIVE_DELAY_SEGMENTS_NOTIFICATION: 4, RTMP: { CHUNK_SIZE: 60000, GOP_CACHE: true, @@ -728,6 +748,7 @@ if (isTestInstance() === true) { ACTIVITY_PUB.VIDEO_PLAYLIST_REFRESH_INTERVAL = 10 * 1000 // 10 seconds CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max = 100 * 1024 // 100KB + CONSTRAINTS_FIELDS.VIDEOS.IMAGE.FILE_SIZE.max = 400 * 1024 // 400KB SCHEDULER_INTERVALS_MS.actorFollowScores = 1000 SCHEDULER_INTERVALS_MS.removeOldJobs = 10000 @@ -735,6 +756,7 @@ if (isTestInstance() === true) { SCHEDULER_INTERVALS_MS.removeOldViews = 5000 SCHEDULER_INTERVALS_MS.updateVideos = 5000 SCHEDULER_INTERVALS_MS.autoFollowIndexInstances = 5000 + SCHEDULER_INTERVALS_MS.updateInboxStats = 5000 REPEAT_JOBS['videos-views'] = { every: 5000 } REDUNDANCY.VIDEOS.RANDOMIZED_FACTOR = 1 @@ -804,6 +826,7 @@ export { ACTOR_FOLLOW_SCORE, PREVIEWS_SIZE, REMOTE_SCHEME, + VIDEO_TRANSCODING_ENCODERS, FOLLOW_STATES, DEFAULT_USER_THEME_NAME, SERVER_ACTOR_NAME, @@ -833,6 +856,7 @@ export { VIDEO_STATES, QUEUE_CONCURRENCY, VIDEO_RATE_TYPES, + JOB_PRIORITY, VIDEO_TRANSCODING_FPS, FFMPEG_NICE, ABUSE_STATES,