fixed formatting, added test case
This commit is contained in:
parent
5ba49f268d
commit
7ed2c1a46f
|
@ -173,7 +173,7 @@ function transcode (options: TranscodeOptions) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function canDoQuickTranscode (path: string) {
|
async function canDoQuickTranscode (path: string): Promise<boolean> {
|
||||||
// NOTE: This could be optimized by running ffprobe only once (but it runs fast anyway)
|
// NOTE: This could be optimized by running ffprobe only once (but it runs fast anyway)
|
||||||
const videoStream = await getVideoStreamFromFile(path)
|
const videoStream = await getVideoStreamFromFile(path)
|
||||||
const parsedAudio = await audio.get(path)
|
const parsedAudio = await audio.get(path)
|
||||||
|
@ -182,20 +182,25 @@ async function canDoQuickTranscode (path: string) {
|
||||||
const resolution = await getVideoFileResolution(path)
|
const resolution = await getVideoFileResolution(path)
|
||||||
|
|
||||||
// check video params
|
// check video params
|
||||||
if (videoStream[ 'codec_name' ] !== 'h264')
|
if (videoStream[ 'codec_name' ] !== 'h264') {
|
||||||
return false
|
return false
|
||||||
if (fps < VIDEO_TRANSCODING_FPS.MIN || fps > VIDEO_TRANSCODING_FPS.MAX)
|
}
|
||||||
|
if (fps < VIDEO_TRANSCODING_FPS.MIN || fps > VIDEO_TRANSCODING_FPS.MAX) {
|
||||||
return false
|
return false
|
||||||
if (bitRate > getMaxBitrate(resolution.videoFileResolution, fps, VIDEO_TRANSCODING_FPS))
|
}
|
||||||
|
if (bitRate > getMaxBitrate(resolution.videoFileResolution, fps, VIDEO_TRANSCODING_FPS)) {
|
||||||
return false
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// check audio params (if audio stream exists)
|
// check audio params (if audio stream exists)
|
||||||
if (parsedAudio.audioStream) {
|
if (parsedAudio.audioStream) {
|
||||||
if (parsedAudio.audioStream[ 'codec_name' ] !== 'aac')
|
if (parsedAudio.audioStream[ 'codec_name' ] !== 'aac') {
|
||||||
return false
|
return false
|
||||||
|
}
|
||||||
const maxAudioBitrate = audio.bitrate[ 'aac' ](parsedAudio.audioStream[ 'bit_rate' ])
|
const maxAudioBitrate = audio.bitrate[ 'aac' ](parsedAudio.audioStream[ 'bit_rate' ])
|
||||||
if (maxAudioBitrate != -1 && parsedAudio.audioStream[ 'bit_rate' ] > maxAudioBitrate)
|
if (maxAudioBitrate !== -1 && parsedAudio.audioStream[ 'bit_rate' ] > maxAudioBitrate) {
|
||||||
return false
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { HLS_STREAMING_PLAYLIST_DIRECTORY, P2P_MEDIA_LOADER_PEER_VERSION, WEBSERVER, VIDEO_TRANSCODING_FPS } from '../initializers/constants'
|
import { HLS_STREAMING_PLAYLIST_DIRECTORY, P2P_MEDIA_LOADER_PEER_VERSION, WEBSERVER } from '../initializers/constants'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import { getVideoFileFPS, transcode, canDoQuickTranscode } from '../helpers/ffmpeg-utils'
|
import { getVideoFileFPS, transcode, canDoQuickTranscode } from '../helpers/ffmpeg-utils'
|
||||||
import { ensureDir, move, remove, stat } from 'fs-extra'
|
import { ensureDir, move, remove, stat } from 'fs-extra'
|
||||||
|
|
|
@ -4,7 +4,7 @@ import * as chai from 'chai'
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import { omit } from 'lodash'
|
import { omit } from 'lodash'
|
||||||
import { getMaxBitrate, VideoDetails, VideoResolution, VideoState } from '../../../../shared/models/videos'
|
import { getMaxBitrate, VideoDetails, VideoResolution, VideoState } from '../../../../shared/models/videos'
|
||||||
import { audio, getVideoFileBitrate, getVideoFileFPS, getVideoFileResolution } from '../../../helpers/ffmpeg-utils'
|
import { audio, getVideoFileBitrate, getVideoFileFPS, getVideoFileResolution, canDoQuickTranscode } from '../../../helpers/ffmpeg-utils'
|
||||||
import {
|
import {
|
||||||
buildAbsoluteFixturePath, cleanupTests,
|
buildAbsoluteFixturePath, cleanupTests,
|
||||||
doubleFollow,
|
doubleFollow,
|
||||||
|
@ -13,15 +13,14 @@ import {
|
||||||
getMyVideos,
|
getMyVideos,
|
||||||
getVideo,
|
getVideo,
|
||||||
getVideosList,
|
getVideosList,
|
||||||
killallServers,
|
waitJobs,
|
||||||
root,
|
root,
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
uploadVideo,
|
uploadVideo,
|
||||||
webtorrentAdd
|
webtorrentAdd
|
||||||
} from '../../../../shared/extra-utils'
|
} from '../../../../shared/extra-utils'
|
||||||
import { extname, join } from 'path'
|
import { join } from 'path'
|
||||||
import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
|
|
||||||
import { VIDEO_TRANSCODING_FPS } from '../../../../server/initializers/constants'
|
import { VIDEO_TRANSCODING_FPS } from '../../../../server/initializers/constants'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
@ -324,6 +323,15 @@ describe('Test video transcoding', function () {
|
||||||
it('Should accept and transcode additional extensions', async function () {
|
it('Should accept and transcode additional extensions', async function () {
|
||||||
this.timeout(300000)
|
this.timeout(300000)
|
||||||
|
|
||||||
|
let tempFixturePath: string
|
||||||
|
|
||||||
|
{
|
||||||
|
tempFixturePath = await generateHighBitrateVideo()
|
||||||
|
|
||||||
|
const bitrate = await getVideoFileBitrate(tempFixturePath)
|
||||||
|
expect(bitrate).to.be.above(getMaxBitrate(VideoResolution.H_1080P, 60, VIDEO_TRANSCODING_FPS))
|
||||||
|
}
|
||||||
|
|
||||||
for (const fixture of [ 'video_short.mkv', 'video_short.avi' ]) {
|
for (const fixture of [ 'video_short.mkv', 'video_short.avi' ]) {
|
||||||
const videoAttributes = {
|
const videoAttributes = {
|
||||||
name: fixture,
|
name: fixture,
|
||||||
|
@ -349,6 +357,13 @@ describe('Test video transcoding', function () {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should correctly detect if quick transcode is possible', async function () {
|
||||||
|
this.timeout(10000)
|
||||||
|
|
||||||
|
expect(await canDoQuickTranscode(buildAbsoluteFixturePath('video_short.mp4'))).to.be.true
|
||||||
|
expect(await canDoQuickTranscode(buildAbsoluteFixturePath('video_short.webm'))).to.be.false
|
||||||
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
await cleanupTests(servers)
|
await cleanupTests(servers)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue