Skip to content
Snippets Groups Projects
Commit 626bc4f6 authored by fkiefer's avatar fkiefer
Browse files

OO-2361 disable transcoding on base of VideoModule Setting, only lesser...

OO-2361 disable transcoding on base of VideoModule Setting, only lesser resolution, update Metadata XML on resource change
parent ebfad7d6
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -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) {
......
......@@ -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;
}
......
......@@ -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);
......
......@@ -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());
......
......@@ -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);
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment