Skip to content
Snippets Groups Projects
Commit 363f9b40 authored by dfurrer's avatar dfurrer
Browse files

OO-725: update

parent e1e7c401
No related branches found
No related tags found
No related merge requests found
......@@ -22,10 +22,12 @@ package org.olat.modules.video.managers;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import org.olat.core.commons.services.image.Size;
import org.olat.core.manager.BasicManager;
import org.olat.core.util.vfs.VFSLeaf;
import org.olat.modules.video.models.VideoQualityVersion;
import org.olat.resource.OLATResource;
/**
......@@ -76,5 +78,6 @@ public abstract class VideoManager extends BasicManager {
public abstract String getDescription(OLATResource video);
public abstract boolean optimizeVideoRessource(OLATResource video);
public abstract List<VideoQualityVersion> getQualityVersions(OLATResource video);
}
\ No newline at end of file
......@@ -8,10 +8,12 @@ import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import javax.imageio.ImageIO;
import org.apache.commons.io.FileUtils;
import org.jcodec.api.FrameGrab;
import org.jcodec.common.FileChannelWrapper;
import org.olat.core.commons.services.image.Size;
......@@ -21,6 +23,7 @@ import org.olat.core.util.vfs.VFSManager;
import org.olat.core.util.xml.XStreamHelper;
import org.olat.fileresource.FileResourceManager;
import org.olat.modules.video.models.VideoMetadata;
import org.olat.modules.video.models.VideoQualityVersion;
import org.olat.resource.OLATResource;
import org.springframework.stereotype.Service;
......@@ -162,7 +165,7 @@ public class VideoManagerImpl extends VideoManager {
}catch( Exception e){
return false;
}
//TODO: throw right exception
//TODO: throw correct exception
}
@Override
......@@ -213,15 +216,23 @@ public class VideoManagerImpl extends VideoManager {
File file = getVideoFile(video);
File videoResourceFileroot = fileResourceManager.getFileResourceRoot(video);
File optimizedFolder = new File(videoResourceFileroot, "optimizedVideoData");
File metaDataFile = new File(optimizedFolder,"optimizedVideo_metadata.xml");
optimizedFolder.mkdirs();
ArrayList<String> cmd = new ArrayList<String>();
//create Metadata
List<VideoQualityVersion> versions = getQualityVersions(video);
versions.add(new VideoQualityVersion("normal", FileUtils.byteCountToDisplaySize(file.length()), getVideoSize(video), "mp4"));
XStreamHelper.writeObject(XStreamHelper.createXStreamInstance(), metaDataFile, versions);
//start transcoding with handbrake
cmd.add("HandBrakeCLI");
cmd.add("-i "+file.getAbsolutePath());
cmd.add("-o "+optimizedFolder.getAbsolutePath()+"/optimized_"+file.getName());
cmd.add("-i"+file.getAbsolutePath());
cmd.add("-o"+optimizedFolder.getAbsolutePath()+"/optimized_"+file.getName());
cmd.add("--optimize");
cmd.add("--preset Normal");
cmd.add("--preset");
cmd.add("Normal");
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(optimizedFolder);
......@@ -230,27 +241,36 @@ public class VideoManagerImpl extends VideoManager {
pb.inheritIO();
try {
logInfo("+--------------------------HANDBRAKE STARTS TRANSCODING------------------------------------+");
Runtime.getRuntime().exec("HandBrakeCLI "+" -i "+file.getAbsolutePath()+" -o "+optimizedFolder.getAbsolutePath()+"/optimized_"+file.getName()+" --optimize"+" --preset Normal");
logInfo("+---------------------------HANDBRAKE TRANSCODING DONE-------------------------------------+");
return true;
} catch (Exception e) {
System.err.println("Unable to do videotranscoding");
return false;
}
// try {
// logInfo("+--------------------------HANDBRAKE STARTS TRANSCODING------------------------------------+");
// Process process = pb.start();
// process.waitFor();
// logInfo("+---------------------------HANDBRAKE TRANSCODING DONE-------------------------------------+");
// return true;
// } catch (Exception e) {
// return false;
// }
try {
logInfo("+--------------------------HANDBRAKE STARTS TRANSCODING------------------------------------+");
Process process = pb.start();
return true;
} catch (Exception e) {
return false;
}
}
@Override
public List<VideoQualityVersion> getQualityVersions(OLATResource video){
File videoResourceFileroot = fileResourceManager.getFileResourceRoot(video);
File optimizedFolder = new File(videoResourceFileroot, "optimizedVideoData");
File metaDataFile = new File(optimizedFolder,"optimizedVideo_metadata.xml");
List<VideoQualityVersion> versions;
if(!metaDataFile.exists()){
try {
metaDataFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
versions = new ArrayList<VideoQualityVersion>();
}else{
Object fileContent = XStreamHelper.readObject(XStreamHelper.createXStreamInstance(), metaDataFile);
versions = (List<VideoQualityVersion>) fileContent;
}
return versions;
}
}
package org.olat.modules.video.models;
import org.olat.core.commons.services.image.Size;
public class VideoQualityVersion{
// Properties
String type;
String fileSize;
Size dimension;
String format;
boolean isTransforming;
public VideoQualityVersion(String type, String fileSize, Size dimension, String format){
this.type = type;
this.fileSize = fileSize;
this.dimension = dimension;
this.format = format;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getFileSize() {
return fileSize;
}
public void setFileSize(String fileSize) {
this.fileSize = fileSize;
}
public Size getDimension() {
return dimension;
}
public void setDimension(Size dimension) {
this.dimension = dimension;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public boolean getIsTransforming() {
return isTransforming;
}
public void setIsTransforming(boolean isTranscoding) {
this.isTransforming = isTranscoding;
}
}
\ No newline at end of file
......@@ -12,10 +12,10 @@ public class TranscoderService{
private static String transcodingProvider;
private static TranscoderService service;
private ServiceLoader<Transcoder> loader;
private static ServiceLoader<Transcoder> loader;
private TranscoderService() {
loader = ServiceLoader.load(Transcoder.class);
loader = ServiceLoader.load(Transcoder.class);
}
public static synchronized TranscoderService getInstance() {
......@@ -24,4 +24,12 @@ public class TranscoderService{
}
return service;
}
// public static Transcoder getTrascoder(){
//
// for (Transcoder transcoder : loader) {
// return transcoder;
// }
//
// }
}
......@@ -19,6 +19,7 @@ import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl;
import org.olat.modules.video.managers.VideoManager;
import org.olat.modules.video.models.VideoQualityTableModel;
import org.olat.modules.video.models.VideoQualityVersion;
import org.olat.modules.video.models.VideoQualityTableModel.QualityTableCols;
import org.olat.resource.OLATResource;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -61,7 +62,14 @@ public class VideoQualityTableFormController extends FormBasicController {
Size origSize = videoManager.getVideoSize(videoResource);
FormLink viewButton = uifactory.addFormLink("view", "viewQuality", "quality.view", "qulaity.view", null, Link.LINK);
rows.add(new QualityTableRow("original", origSize.getWidth() +"x"+ origSize.getHeight(), FileUtils.byteCountToDisplaySize(videoManager.getVideoFile(videoResource).length()), "mp4",viewButton));
List<VideoQualityVersion> versions = videoManager.getQualityVersions(videoResource);
for(VideoQualityVersion version:versions){
rows.add(new QualityTableRow(version.getType(), version.getDimension().getWidth() +"x"+ version.getDimension().getHeight(), version.getFileSize(), version.getFormat(),viewButton));
}
tableModel.setObjects(rows);
tableEl = uifactory.addTableElement(getWindowControl(), "qualities", tableModel, getTranslator(), generalCont);
tableEl.setCustomizeColumns(false);
......
......@@ -182,8 +182,6 @@ public class VideoHandler extends FileHandler {
return re;
}
@Override
public MediaResource getAsMediaResource(OLATResourceable res, boolean backwardsCompatible) {
return FileResourceManager.getInstance().getAsDownloadeableMediaResource(res);
......
......@@ -1156,5 +1156,5 @@ monitored.probes=Runtime,System,Database,Memory,OpenOLAT,Release,Environment,Ind
monitoring.dependency.server=myserver
#
video.transcoding.provider=handbrake
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