diff options
author | Chocobozzz <me@florianbigard.com> | 2021-03-11 09:51:08 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2021-03-24 18:18:40 +0100 |
commit | ae71acca14e9420646ca7655e64eb9adc13e3006 (patch) | |
tree | 97e1e4bd94ecfbabc9b99fa5670b72440db82890 /server/helpers | |
parent | db8b2f56c014a3fa207501f74e0bb5088ea41719 (diff) | |
download | PeerTube-ae71acca14e9420646ca7655e64eb9adc13e3006.tar.gz PeerTube-ae71acca14e9420646ca7655e64eb9adc13e3006.tar.zst PeerTube-ae71acca14e9420646ca7655e64eb9adc13e3006.zip |
Check ffmepg version on startup
Diffstat (limited to 'server/helpers')
-rw-r--r-- | server/helpers/core-utils.ts | 14 | ||||
-rw-r--r-- | server/helpers/ffmpeg-utils.ts | 21 |
2 files changed, 33 insertions, 2 deletions
diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts index 7ba7d865a..ceb6a341d 100644 --- a/server/helpers/core-utils.ts +++ b/server/helpers/core-utils.ts | |||
@@ -251,6 +251,16 @@ function promisify2<T, U, A> (func: (arg1: T, arg2: U, cb: (err: any, result: A) | |||
251 | } | 251 | } |
252 | } | 252 | } |
253 | 253 | ||
254 | function parseSemVersion (s: string) { | ||
255 | const parsed = s.match(/^v?(\d+)\.(\d+)\.(\d+)$/i) | ||
256 | |||
257 | return { | ||
258 | major: parseInt(parsed[1]), | ||
259 | minor: parseInt(parsed[2]), | ||
260 | patch: parseInt(parsed[3]) | ||
261 | } | ||
262 | } | ||
263 | |||
254 | const randomBytesPromise = promisify1<number, Buffer>(randomBytes) | 264 | const randomBytesPromise = promisify1<number, Buffer>(randomBytes) |
255 | const createPrivateKey = promisify1<number, { key: string }>(pem.createPrivateKey) | 265 | const createPrivateKey = promisify1<number, { key: string }>(pem.createPrivateKey) |
256 | const getPublicKey = promisify1<string, { publicKey: string }>(pem.getPublicKey) | 266 | const getPublicKey = promisify1<string, { publicKey: string }>(pem.getPublicKey) |
@@ -288,5 +298,7 @@ export { | |||
288 | getPublicKey, | 298 | getPublicKey, |
289 | execPromise2, | 299 | execPromise2, |
290 | execPromise, | 300 | execPromise, |
291 | pipelinePromise | 301 | pipelinePromise, |
302 | |||
303 | parseSemVersion | ||
292 | } | 304 | } |
diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts index 620025966..69cd397b9 100644 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts | |||
@@ -5,7 +5,7 @@ import { dirname, join } from 'path' | |||
5 | import { FFMPEG_NICE, VIDEO_LIVE } from '@server/initializers/constants' | 5 | import { FFMPEG_NICE, VIDEO_LIVE } from '@server/initializers/constants' |
6 | import { AvailableEncoders, EncoderOptionsBuilder, EncoderProfile, VideoResolution } from '../../shared/models/videos' | 6 | import { AvailableEncoders, EncoderOptionsBuilder, EncoderProfile, VideoResolution } from '../../shared/models/videos' |
7 | import { CONFIG } from '../initializers/config' | 7 | import { CONFIG } from '../initializers/config' |
8 | import { promisify0 } from './core-utils' | 8 | import { execPromise, promisify0 } from './core-utils' |
9 | import { computeFPS, getAudioStream, getVideoFileFPS } from './ffprobe-utils' | 9 | import { computeFPS, getAudioStream, getVideoFileFPS } from './ffprobe-utils' |
10 | import { processImage } from './image-utils' | 10 | import { processImage } from './image-utils' |
11 | import { logger } from './logger' | 11 | import { logger } from './logger' |
@@ -649,6 +649,24 @@ function getFFmpeg (input: string, type: 'live' | 'vod') { | |||
649 | return command | 649 | return command |
650 | } | 650 | } |
651 | 651 | ||
652 | function getFFmpegVersion () { | ||
653 | return new Promise<string>((res, rej) => { | ||
654 | (ffmpeg() as any)._getFfmpegPath((err, ffmpegPath) => { | ||
655 | if (err) return rej(err) | ||
656 | if (!ffmpegPath) return rej(new Error('Could not find ffmpeg path')) | ||
657 | |||
658 | return execPromise(`${ffmpegPath} -version`) | ||
659 | .then(stdout => { | ||
660 | const parsed = stdout.match(/ffmpeg version .(\d+\.\d+\.\d+)/) | ||
661 | if (!parsed || !parsed[1]) return rej(new Error(`Could not find ffmpeg version in ${stdout}`)) | ||
662 | |||
663 | return res(parsed[1]) | ||
664 | }) | ||
665 | .catch(err => rej(err)) | ||
666 | }) | ||
667 | }) | ||
668 | } | ||
669 | |||
652 | async function runCommand (options: { | 670 | async function runCommand (options: { |
653 | command: ffmpeg.FfmpegCommand | 671 | command: ffmpeg.FfmpegCommand |
654 | silent?: boolean // false | 672 | silent?: boolean // false |
@@ -695,6 +713,7 @@ export { | |||
695 | TranscodeOptionsType, | 713 | TranscodeOptionsType, |
696 | transcode, | 714 | transcode, |
697 | runCommand, | 715 | runCommand, |
716 | getFFmpegVersion, | ||
698 | 717 | ||
699 | resetSupportedEncoders, | 718 | resetSupportedEncoders, |
700 | 719 | ||