diff options
author | Chocobozzz <florian.bigard@gmail.com> | 2017-10-02 12:20:26 +0200 |
---|---|---|
committer | Chocobozzz <florian.bigard@gmail.com> | 2017-10-03 15:31:26 +0200 |
commit | 40298b02546e8225dd21bf6048fe7f224aefc32a (patch) | |
tree | 0a0b981dbeb2af47810adff6553a0df995a03734 /server/helpers | |
parent | f0adb2701c1cf404ff63095f71e542bfe6d025ae (diff) | |
download | PeerTube-40298b02546e8225dd21bf6048fe7f224aefc32a.tar.gz PeerTube-40298b02546e8225dd21bf6048fe7f224aefc32a.tar.zst PeerTube-40298b02546e8225dd21bf6048fe7f224aefc32a.zip |
Implement video transcoding on server side
Diffstat (limited to 'server/helpers')
-rw-r--r-- | server/helpers/core-utils.ts | 8 | ||||
-rw-r--r-- | server/helpers/utils.ts | 27 |
2 files changed, 31 insertions, 4 deletions
diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts index 2ec7e6515..3118dc500 100644 --- a/server/helpers/core-utils.ts +++ b/server/helpers/core-utils.ts | |||
@@ -11,7 +11,9 @@ import { | |||
11 | rename, | 11 | rename, |
12 | unlink, | 12 | unlink, |
13 | writeFile, | 13 | writeFile, |
14 | access | 14 | access, |
15 | stat, | ||
16 | Stats | ||
15 | } from 'fs' | 17 | } from 'fs' |
16 | import * as mkdirp from 'mkdirp' | 18 | import * as mkdirp from 'mkdirp' |
17 | import * as bcrypt from 'bcrypt' | 19 | import * as bcrypt from 'bcrypt' |
@@ -92,6 +94,7 @@ const bcryptGenSaltPromise = promisify1<number, string>(bcrypt.genSalt) | |||
92 | const bcryptHashPromise = promisify2<any, string|number, string>(bcrypt.hash) | 94 | const bcryptHashPromise = promisify2<any, string|number, string>(bcrypt.hash) |
93 | const createTorrentPromise = promisify2<string, any, any>(createTorrent) | 95 | const createTorrentPromise = promisify2<string, any, any>(createTorrent) |
94 | const rimrafPromise = promisify1WithVoid<string>(rimraf) | 96 | const rimrafPromise = promisify1WithVoid<string>(rimraf) |
97 | const statPromise = promisify1<string, Stats>(stat) | ||
95 | 98 | ||
96 | // --------------------------------------------------------------------------- | 99 | // --------------------------------------------------------------------------- |
97 | 100 | ||
@@ -115,5 +118,6 @@ export { | |||
115 | bcryptGenSaltPromise, | 118 | bcryptGenSaltPromise, |
116 | bcryptHashPromise, | 119 | bcryptHashPromise, |
117 | createTorrentPromise, | 120 | createTorrentPromise, |
118 | rimrafPromise | 121 | rimrafPromise, |
122 | statPromise | ||
119 | } | 123 | } |
diff --git a/server/helpers/utils.ts b/server/helpers/utils.ts index ce07ceff9..b74442ab0 100644 --- a/server/helpers/utils.ts +++ b/server/helpers/utils.ts | |||
@@ -4,6 +4,7 @@ import * as Promise from 'bluebird' | |||
4 | import { pseudoRandomBytesPromise } from './core-utils' | 4 | import { pseudoRandomBytesPromise } from './core-utils' |
5 | import { CONFIG, database as db } from '../initializers' | 5 | import { CONFIG, database as db } from '../initializers' |
6 | import { ResultList } from '../../shared' | 6 | import { ResultList } from '../../shared' |
7 | import { VideoResolution } from '../../shared/models/videos/video-resolution.enum' | ||
7 | 8 | ||
8 | function badRequest (req: express.Request, res: express.Response, next: express.NextFunction) { | 9 | function badRequest (req: express.Request, res: express.Response, next: express.NextFunction) { |
9 | res.type('json').status(400).end() | 10 | res.type('json').status(400).end() |
@@ -13,11 +14,11 @@ function generateRandomString (size: number) { | |||
13 | return pseudoRandomBytesPromise(size).then(raw => raw.toString('hex')) | 14 | return pseudoRandomBytesPromise(size).then(raw => raw.toString('hex')) |
14 | } | 15 | } |
15 | 16 | ||
16 | interface FormatableToJSON { | 17 | interface FormattableToJSON { |
17 | toFormattedJSON () | 18 | toFormattedJSON () |
18 | } | 19 | } |
19 | 20 | ||
20 | function getFormattedObjects<U, T extends FormatableToJSON> (objects: T[], objectsTotal: number) { | 21 | function getFormattedObjects<U, T extends FormattableToJSON> (objects: T[], objectsTotal: number) { |
21 | const formattedObjects: U[] = [] | 22 | const formattedObjects: U[] = [] |
22 | 23 | ||
23 | objects.forEach(object => { | 24 | objects.forEach(object => { |
@@ -47,6 +48,27 @@ function isSignupAllowed () { | |||
47 | }) | 48 | }) |
48 | } | 49 | } |
49 | 50 | ||
51 | function computeResolutionsToTranscode (videoFileHeight: number) { | ||
52 | const resolutionsEnabled: number[] = [] | ||
53 | const configResolutions = CONFIG.TRANSCODING.RESOLUTIONS | ||
54 | |||
55 | const resolutions = [ | ||
56 | VideoResolution.H_240P, | ||
57 | VideoResolution.H_360P, | ||
58 | VideoResolution.H_480P, | ||
59 | VideoResolution.H_720P, | ||
60 | VideoResolution.H_1080P | ||
61 | ] | ||
62 | |||
63 | for (const resolution of resolutions) { | ||
64 | if (configResolutions[resolution.toString()] === true && videoFileHeight >= resolution) { | ||
65 | resolutionsEnabled.push(resolution) | ||
66 | } | ||
67 | } | ||
68 | |||
69 | return resolutionsEnabled | ||
70 | } | ||
71 | |||
50 | type SortType = { sortModel: any, sortValue: string } | 72 | type SortType = { sortModel: any, sortValue: string } |
51 | 73 | ||
52 | // --------------------------------------------------------------------------- | 74 | // --------------------------------------------------------------------------- |
@@ -56,5 +78,6 @@ export { | |||
56 | generateRandomString, | 78 | generateRandomString, |
57 | getFormattedObjects, | 79 | getFormattedObjects, |
58 | isSignupAllowed, | 80 | isSignupAllowed, |
81 | computeResolutionsToTranscode, | ||
59 | SortType | 82 | SortType |
60 | } | 83 | } |