]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
fixed formatting, added test case
authorFelix Ableitner <me@nutomic.com>
Sat, 4 May 2019 01:18:32 +0000 (03:18 +0200)
committerFelix Ableitner <me@nutomic.com>
Sat, 4 May 2019 11:06:43 +0000 (13:06 +0200)
server/helpers/ffmpeg-utils.ts
server/lib/video-transcoding.ts
server/tests/api/videos/video-transcoder.ts

index 13bb2e894b9d25cb640350f08c22e44a473f107c..af92d1ba9337c67b8da57b86476e68e94842fa1c 100644 (file)
@@ -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)
   const videoStream = await getVideoStreamFromFile(path)
   const parsedAudio = await audio.get(path)
   // 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)
@@ -182,22 +182,27 @@ async function canDoQuickTranscode (path: string) {
   const resolution = await getVideoFileResolution(path)
 
   // check video params
   const resolution = await getVideoFileResolution(path)
 
   // 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)
   if (parsedAudio.audioStream) {
 
     // check audio params (if audio stream exists)
   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
 }
 
index 05afb44d1bcf76cecbf533f16ffd98d11fddbaed..81aa7a4c425c1cad162c8f94927a4d8ffa72db8b 100644 (file)
@@ -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 { getVideoFileFPS, transcode, canDoQuickTranscode } from '../helpers/ffmpeg-utils'
 import { ensureDir, move, remove, stat } from 'fs-extra'
 import { join } from 'path'
 import { getVideoFileFPS, transcode, canDoQuickTranscode } from '../helpers/ffmpeg-utils'
 import { ensureDir, move, remove, stat } from 'fs-extra'
index 3cd43e99bdf4dc6bd23ab21ba30fb9478df87068..4923759da704f8d3b1d32c52a2e893f3c9c8993a 100644 (file)
@@ -4,7 +4,7 @@ import * as chai from 'chai'
 import 'mocha'
 import { omit } from 'lodash'
 import { getMaxBitrate, VideoDetails, VideoResolution, VideoState } from '../../../../shared/models/videos'
 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,
 import {
   buildAbsoluteFixturePath, cleanupTests,
   doubleFollow,
@@ -13,15 +13,14 @@ import {
   getMyVideos,
   getVideo,
   getVideosList,
   getMyVideos,
   getVideo,
   getVideosList,
-  killallServers,
+  waitJobs,
   root,
   ServerInfo,
   setAccessTokensToServers,
   uploadVideo,
   webtorrentAdd
 } from '../../../../shared/extra-utils'
   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
 import { VIDEO_TRANSCODING_FPS } from '../../../../server/initializers/constants'
 
 const expect = chai.expect
@@ -324,6 +323,15 @@ describe('Test video transcoding', function () {
   it('Should accept and transcode additional extensions', async function () {
     this.timeout(300000)
 
   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,
     for (const fixture of [ 'video_short.mkv', 'video_short.avi' ]) {
       const videoAttributes = {
         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 () {
     await cleanupTests(servers)
   })
   after(async function () {
     await cleanupTests(servers)
   })