})
}
-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)
const videoStream = await getVideoStreamFromFile(path)
const parsedAudio = await audio.get(path)
const resolution = await getVideoFileResolution(path)
// check video params
- if (videoStream[ 'codec_name' ] !== 'h264')
+ if (videoStream[ 'codec_name' ] !== 'h264') {
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
- if (bitRate > getMaxBitrate(resolution.videoFileResolution, fps, VIDEO_TRANSCODING_FPS))
+ }
+ if (bitRate > getMaxBitrate(resolution.videoFileResolution, fps, VIDEO_TRANSCODING_FPS)) {
return false
+ }
// check audio params (if audio stream exists)
if (parsedAudio.audioStream) {
- if (parsedAudio.audioStream[ 'codec_name' ] !== 'aac')
+ if (parsedAudio.audioStream[ 'codec_name' ] !== 'aac') {
return false
+ }
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 true
}
-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 { getVideoFileFPS, transcode, canDoQuickTranscode } from '../helpers/ffmpeg-utils'
import { ensureDir, move, remove, stat } from 'fs-extra'
import 'mocha'
import { omit } from 'lodash'
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 {
buildAbsoluteFixturePath, cleanupTests,
doubleFollow,
getMyVideos,
getVideo,
getVideosList,
- killallServers,
+ waitJobs,
root,
ServerInfo,
setAccessTokensToServers,
uploadVideo,
webtorrentAdd
} from '../../../../shared/extra-utils'
-import { extname, join } from 'path'
-import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
+import { join } from 'path'
import { VIDEO_TRANSCODING_FPS } from '../../../../server/initializers/constants'
const expect = chai.expect
it('Should accept and transcode additional extensions', async function () {
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' ]) {
const videoAttributes = {
name: fixture,
}
})
+ 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 () {
await cleanupTests(servers)
})