diff --git a/src/main/java/org/olat/modules/video/VideoManager.java b/src/main/java/org/olat/modules/video/VideoManager.java index c144865fde4173d57a783a1fd49a48e4d26248a7..affe3a378ecbd033c2ab93c81ba4dccdca0ce621 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 c73b6b6e3b0f56ad281f5565f734162657d997a9..d9e82d0cf57ea23ff1975a2511d4c09651d68649 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 1dc8a89091151237f80205b58b848829ea0e87c4..bd81b47ea37a0aa7228240118a97455f7fb24cac 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 0065d7007c48703023250f14e1ae2ffe0819e7a1..780b7421d7c11f2b3902b73fdd6394e3794e96ee 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 299dd49ac28d2d7972a87757c820897b33418045..e0a95042d37f627b3bbece6828c1dcd0171ac743 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 1d4edda4201b464b858418e67005494ac0d463e6..40c6284bd44153a606b258e43886622e00a912f4 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); } } }