]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/core-utils/videos/bitrate.ts
Merge branch 'release/4.0.0' into develop
[github/Chocobozzz/PeerTube.git] / shared / core-utils / videos / bitrate.ts
index 3d4e479066618d454feae5e3a0cace5dbc35afe4..30d22df095da6aa2ae367b2b854ad2c11f1af8f3 100644 (file)
@@ -1,11 +1,24 @@
-import { VideoResolution } from "@shared/models"
+import { VideoResolution } from '@shared/models'
 
 type BitPerPixel = { [ id in VideoResolution ]: number }
 
 // https://bitmovin.com/video-bitrate-streaming-hls-dash/
 
+const minLimitBitPerPixel: BitPerPixel = {
+  [VideoResolution.H_NOVIDEO]: 0,
+  [VideoResolution.H_144P]: 0.02,
+  [VideoResolution.H_240P]: 0.02,
+  [VideoResolution.H_360P]: 0.02,
+  [VideoResolution.H_480P]: 0.02,
+  [VideoResolution.H_720P]: 0.02,
+  [VideoResolution.H_1080P]: 0.02,
+  [VideoResolution.H_1440P]: 0.02,
+  [VideoResolution.H_4K]: 0.02
+}
+
 const averageBitPerPixel: BitPerPixel = {
   [VideoResolution.H_NOVIDEO]: 0,
+  [VideoResolution.H_144P]: 0.19,
   [VideoResolution.H_240P]: 0.17,
   [VideoResolution.H_360P]: 0.15,
   [VideoResolution.H_480P]: 0.12,
@@ -17,6 +30,7 @@ const averageBitPerPixel: BitPerPixel = {
 
 const maxBitPerPixel: BitPerPixel = {
   [VideoResolution.H_NOVIDEO]: 0,
+  [VideoResolution.H_144P]: 0.32,
   [VideoResolution.H_240P]: 0.29,
   [VideoResolution.H_360P]: 0.26,
   [VideoResolution.H_480P]: 0.22,
@@ -48,11 +62,23 @@ function getMaxBitrate (options: {
   return targetBitrate
 }
 
+function getMinLimitBitrate (options: {
+  resolution: VideoResolution
+  ratio: number
+  fps: number
+}) {
+  const minLimitBitrate = calculateBitrate({ ...options, bitPerPixel: minLimitBitPerPixel })
+  if (!minLimitBitrate) return 10 * 1000
+
+  return minLimitBitrate
+}
+
 // ---------------------------------------------------------------------------
 
 export {
   getAverageBitrate,
-  getMaxBitrate
+  getMaxBitrate,
+  getMinLimitBitrate
 }
 
 // ---------------------------------------------------------------------------
@@ -73,12 +99,13 @@ function calculateBitrate (options: {
     VideoResolution.H_480P,
     VideoResolution.H_360P,
     VideoResolution.H_240P,
+    VideoResolution.H_144P,
     VideoResolution.H_NOVIDEO
   ]
 
   for (const toTestResolution of resolutionsOrder) {
     if (toTestResolution <= resolution) {
-      return resolution * resolution * ratio * fps * bitPerPixel[toTestResolution]
+      return Math.floor(resolution * resolution * ratio * fps * bitPerPixel[toTestResolution])
     }
   }