]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Fix resolution for portrait videos
authorChocobozzz <me@florianbigard.com>
Mon, 3 Aug 2020 14:03:52 +0000 (16:03 +0200)
committerChocobozzz <me@florianbigard.com>
Mon, 3 Aug 2020 14:03:52 +0000 (16:03 +0200)
client/src/assets/player/peertube-player-manager.ts
server/helpers/ffmpeg-utils.ts
server/lib/job-queue/handlers/video-transcoding.ts

index 7fa84e195bb88e8f88c0d11c79609cd6e8edad5f..f12fb09ae23919d6ec229ece597e37c82d916e75 100644 (file)
@@ -19,6 +19,7 @@ import './videojs-components/settings-panel'
 import './videojs-components/settings-panel-child'
 import './videojs-components/theater-button'
 import videojs from 'video.js'
+
 import { isDefaultLocale } from '../../../../shared/models/i18n/i18n'
 import { VideoFile } from '../../../../shared/models/videos'
 import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
@@ -300,7 +301,13 @@ export class PeertubePlayerManager {
     }
     const hlsjs = {
       levelLabelHandler: (level: { height: number, width: number }) => {
-        const file = p2pMediaLoaderOptions.videoFiles.find(f => f.resolution.id === level.height)
+        const resolution = Math.min(level.height || 0, level.width || 0)
+
+        const file = p2pMediaLoaderOptions.videoFiles.find(f => f.resolution.id === resolution)
+        if (!file) {
+          console.error('Cannot find video file for level %d.', level.height)
+          return level.height
+        }
 
         let label = file.resolution.label
         if (file.fps >= 50) label += file.fps
index 0cfc517751a66d94173d92ba8228004769912f7d..7bfd5d44acce0b5160a377c2fa0438fa85810bc9 100644 (file)
@@ -74,7 +74,7 @@ namespace audio {
   }
 }
 
-function computeResolutionsToTranscode (videoFileHeight: number) {
+function computeResolutionsToTranscode (videoFileResolution: number) {
   const resolutionsEnabled: number[] = []
   const configResolutions = CONFIG.TRANSCODING.RESOLUTIONS
 
@@ -90,7 +90,7 @@ function computeResolutionsToTranscode (videoFileHeight: number) {
   ]
 
   for (const resolution of resolutions) {
-    if (configResolutions[resolution + 'p'] === true && videoFileHeight > resolution) {
+    if (configResolutions[resolution + 'p'] === true && videoFileResolution > resolution) {
       resolutionsEnabled.push(resolution)
     }
   }
index ce1c419e7aaab17c64b863b11ca8ea4fc198ec07..7ebef46b442c0ebb969944c50b049eda1baf0228 100644 (file)
@@ -75,7 +75,7 @@ async function onVideoFileOptimizerSuccess (videoArg: MVideoWithFile, payload: O
   if (videoArg === undefined) return undefined
 
   // Outside the transaction (IO on disk)
-  const { videoFileResolution } = await videoArg.getMaxQualityResolution()
+  const { videoFileResolution, isPortraitMode } = await videoArg.getMaxQualityResolution()
 
   const { videoDatabase, videoPublished } = await sequelizeTypescript.transaction(async t => {
     // Maybe the video changed in database, refresh it
@@ -86,7 +86,7 @@ async function onVideoFileOptimizerSuccess (videoArg: MVideoWithFile, payload: O
     // Create transcoding jobs if there are enabled resolutions
     const resolutionsEnabled = computeResolutionsToTranscode(videoFileResolution)
     logger.info(
-      'Resolutions computed for video %s and origin file height of %d.', videoDatabase.uuid, videoFileResolution,
+      'Resolutions computed for video %s and origin file resolution of %d.', videoDatabase.uuid, videoFileResolution,
       { resolutions: resolutionsEnabled }
     )
 
@@ -104,14 +104,15 @@ async function onVideoFileOptimizerSuccess (videoArg: MVideoWithFile, payload: O
           dataInput = {
             type: 'new-resolution' as 'new-resolution',
             videoUUID: videoDatabase.uuid,
-            resolution
+            resolution,
+            isPortraitMode
           }
         } else if (CONFIG.TRANSCODING.HLS.ENABLED) {
           dataInput = {
             type: 'hls',
             videoUUID: videoDatabase.uuid,
             resolution,
-            isPortraitMode: false,
+            isPortraitMode,
             copyCodecs: false
           }
         }