From 626bc4f6e99eea3ce1a8add697eda302ceac260b Mon Sep 17 00:00:00 2001 From: fkiefer <none@none> Date: Wed, 16 Nov 2016 16:17:26 +0100 Subject: [PATCH] OO-2361 disable transcoding on base of VideoModule Setting, only lesser resolution, update Metadata XML on resource change --- .../org/olat/modules/video/VideoManager.java | 8 +++++++ .../video/manager/VideoManagerImpl.java | 21 +++++++++++++++++++ .../olat/modules/video/ui/TranscodingRow.java | 4 ++-- .../ui/VideoAdminTranscodingController.java | 15 ++++++++++++- .../ui/VideoQualityTableFormController.java | 20 ++++++++++-------- .../video/ui/VideoResourceEditController.java | 13 +++++++----- 6 files changed, 64 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/olat/modules/video/VideoManager.java b/src/main/java/org/olat/modules/video/VideoManager.java index c144865fde4..affe3a378ec 100644 --- a/src/main/java/org/olat/modules/video/VideoManager.java +++ b/src/main/java/org/olat/modules/video/VideoManager.java @@ -297,4 +297,12 @@ public interface VideoManager { * @return the video duration */ public abstract long getVideoDuration(OLATResource videoResource); + + /** + * Gets the meta data from olat resource. + * + * @param OLATResource videoResource the video resource + * @return the metadata from videoResource + */ + public abstract VideoMetadata getMetaDataFromOLATResource(OLATResource videoResource); } \ No newline at end of file diff --git a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java index c73b6b6e3b0..d9e82d0cf57 100644 --- a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java +++ b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java @@ -551,6 +551,27 @@ public class VideoManagerImpl implements VideoManager { return true; } + + @Override + public VideoMetadata getMetaDataFromOLATResource (OLATResource videoResource){ + VFSContainer masterContainer = getMasterContainer(videoResource); + VFSLeaf targetFile = (VFSLeaf) masterContainer.resolve(FILENAME_VIDEO_MP4); + + // 1) generate Metadata file + VideoMetadata metaData = new VideoMetadataImpl(); + // calculate video size + Size videoSize = movieService.getSize(targetFile, FILETYPE_MP4); + if (videoSize != null) { + metaData.setWidth(videoSize.getWidth()); + metaData.setHeight(videoSize.getHeight()); + } else { + metaData.setWidth(800); + metaData.setHeight(600); + } + // 2) update XML file + writeVideoMetadataFile(metaData, videoResource); + return metaData; + } @Override public boolean importFromExportArchive(RepositoryEntry repoEntry, VFSLeaf exportArchive) { diff --git a/src/main/java/org/olat/modules/video/ui/TranscodingRow.java b/src/main/java/org/olat/modules/video/ui/TranscodingRow.java index 1dc8a890911..bd81b47ea37 100644 --- a/src/main/java/org/olat/modules/video/ui/TranscodingRow.java +++ b/src/main/java/org/olat/modules/video/ui/TranscodingRow.java @@ -32,13 +32,13 @@ public class TranscodingRow { private int numberTranscodings; private boolean allTranscoded; - public TranscodingRow(int resolution, int numberTranscodings, int sumVideos) { + public TranscodingRow(int resolution, int numberTranscodings, int sumVideos, boolean mayTranscode) { super(); this.resolution = resolution; this.numberTranscodings = numberTranscodings; this.sumVideos = sumVideos; this.missingTranscodings = sumVideos - numberTranscodings; - this.allTranscoded = numberTranscodings != sumVideos; + this.allTranscoded = numberTranscodings < sumVideos && mayTranscode; } diff --git a/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java b/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java index 0065d7007c4..780b7421d7c 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java @@ -42,6 +42,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.modules.video.VideoManager; import org.olat.modules.video.VideoMetadata; +import org.olat.modules.video.VideoModule; import org.olat.modules.video.VideoTranscoding; import org.olat.modules.video.ui.TranscodingTableModel.TranscodingCols; import org.olat.resource.OLATResource; @@ -68,6 +69,8 @@ public class VideoAdminTranscodingController extends FormBasicController { private OLATResourceManager olatresourceManager; @Autowired private VideoManager videoManager; + @Autowired + private VideoModule videoModule; public VideoAdminTranscodingController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl, "transcoding_admin"); @@ -101,6 +104,16 @@ public class VideoAdminTranscodingController extends FormBasicController { setChecks(); } + private boolean mayTranscode(int resolution){ + int[] transcodingRes = videoModule.getTranscodingResolutions(); + for (int i = 0; i < transcodingRes.length; i++) { + if (resolution == transcodingRes[i] && videoModule.isTranscodingEnabled()){ + return Boolean.TRUE; + } + } + return Boolean.FALSE; + } + private void loadTable(){ //Hardcoded same as VideoAdminSetController int[] resolution = {2160, 1080, 720, 480, 360, 240}; @@ -111,7 +124,7 @@ public class VideoAdminTranscodingController extends FormBasicController { VideoMetadata videoMetadata = videoManager.readVideoMetadataFile(videoResource); if (videoMetadata != null && videoMetadata.getHeight() >= resolution[i]) counter++; } - resolutions.add(new TranscodingRow(resolution[i], sizeOfTranscodings, counter)); + resolutions.add(new TranscodingRow(resolution[i], sizeOfTranscodings, counter, mayTranscode(resolution[i]))); } if (resolutions != null) tableModel.setObjects(resolutions); transcodingTable.reset(true, true, true); diff --git a/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java b/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java index 299dd49ac28..e0a95042d37 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoQualityTableFormController.java @@ -135,15 +135,17 @@ public class VideoQualityTableFormController extends FormBasicController { } List<Integer> missingResolutions = videoManager.getMissingTranscodings(videoResource); if (videoModule.isTranscodingEnabled()) { - for(Integer missingRes: missingResolutions){ - String title = videoManager.getDisplayTitleForResolution(missingRes, getTranslator()); - FormLink transcodeLink = uifactory.addFormLink("res_" + count++, "startTranscoding", "quality.transcode", "quality.transcode", flc, Link.LINK); - transcodeLink.setUserObject(missingRes); - transcodeLink.setIconLeftCSS("o_icon o_icon_refresh o_icon-fw"); - - FormLink previewMissingLink= uifactory.addFormLink("res_" + count++, "viewQuality", title, title, flc, Link.LINK + Link.NONTRANSLATED); - previewMissingLink.setEnabled(false); - rows.add(new QualityTableRow(previewMissingLink, missingRes.toString(), "-", "mp4", transcodeLink)); + for(Integer missingRes : missingResolutions){ + if (missingRes <= videoMetadata.getHeight()) { + String title = videoManager.getDisplayTitleForResolution(missingRes, getTranslator()); + FormLink transcodeLink = uifactory.addFormLink("res_" + count++, "startTranscoding", "quality.transcode", "quality.transcode", flc, Link.LINK); + transcodeLink.setUserObject(missingRes); + transcodeLink.setIconLeftCSS("o_icon o_icon_refresh o_icon-fw"); + + FormLink previewMissingLink= uifactory.addFormLink("res_" + count++, "viewQuality", title, title, flc, Link.LINK + Link.NONTRANSLATED); + previewMissingLink.setEnabled(false); + rows.add(new QualityTableRow(previewMissingLink, missingRes.toString(), "-", "mp4", transcodeLink)); + } } } rows.sort(new VideoComparator()); diff --git a/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java b/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java index 1d4edda4201..40c6284bd44 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoResourceEditController.java @@ -116,7 +116,7 @@ public class VideoResourceEditController extends FormBasicController { VFSLeaf uploadVideo = vfsContainer.createChildLeaf(VIDEO_RESOURCE); VFSManager.copyContent(uploadFile, uploadVideo); // update video duration - long duration = movieService.getDuration(uploadVideo, "mp4"); + long duration = movieService.getDuration(uploadVideo, VideoTranscoding.FORMAT_MP4); if (duration != -1) { entry.setExpenditureOfWork(Formatter.formatTimecode(duration)); } @@ -132,12 +132,15 @@ public class VideoResourceEditController extends FormBasicController { private void queueCreateTranscoding() { List<Integer> missingResolutions = videoManager.getMissingTranscodings(videoResource); - VideoMetadata videoMetadata = videoManager.readVideoMetadataFile(videoResource); - + VideoMetadata videoMetadata = videoManager.getMetaDataFromOLATResource(videoResource); + int height = videoMetadata.getHeight(); if (videoModule.isTranscodingEnabled()) { + // 1) setup transcoding job for original file size + videoManager.createTranscoding(videoResource, height, VideoTranscoding.FORMAT_MP4); + // 2) setup transcoding jobs for all configured sizes below the original size for (Integer missingRes : missingResolutions) { - if(videoMetadata.getHeight() >= missingRes){ - videoManager.createTranscoding(videoResource, missingRes, "mp4"); + if(height > missingRes){ + videoManager.createTranscoding(videoResource, missingRes, VideoTranscoding.FORMAT_MP4); } } } -- GitLab