use of org.olat.core.commons.services.image.Size in project openolat by klemens.
the class VideoManagerImpl method updateVideoMetadata.
@Override
public void updateVideoMetadata(OLATResource videoResource, VFSLeaf uploadVideo) {
VideoMeta meta = getVideoMetadata(videoResource);
Size dimensions = movieService.getSize(uploadVideo, VideoManagerImpl.FILETYPE_MP4);
// update video duration
long duration = movieService.getDuration(uploadVideo, VideoTranscoding.FORMAT_MP4);
if (duration != -1) {
String length = Formatter.formatTimecode(duration);
meta.setSize(uploadVideo.getSize());
meta.setWidth(dimensions.getWidth());
meta.setHeight(dimensions.getHeight());
meta.setFormat(FilenameUtils.getExtension(uploadVideo.getName()));
meta.setLength(length);
}
}
use of org.olat.core.commons.services.image.Size in project openolat by klemens.
the class VideoMetadataDAO method createVideoMetadata.
/**
* Creates and persists the video metadata.
*
* @param videoResource
* @param size
* @param filename
* @return metadata
*/
VideoMetaImpl createVideoMetadata(RepositoryEntry repoEntry, long size, String fileName) {
VideoMetaImpl videometa = new VideoMetaImpl();
OLATResource videoResource = repoEntry.getOlatResource();
videometa.setVideoResource(videoResource);
String format = FilenameUtils.getExtension(fileName);
videometa.setFormat(format);
videometa.setCreationDate(new Date());
videometa.setLastModified(new Date());
Size resolution = videoManager.getVideoResolutionFromOLATResource(videoResource);
videometa.setHeight(resolution.getHeight());
videometa.setWidth(resolution.getWidth());
videometa.setSize(size);
videometa.setLength(repoEntry.getExpenditureOfWork());
dbInstance.getCurrentEntityManager().persist(videometa);
return videometa;
}
use of org.olat.core.commons.services.image.Size in project openolat by klemens.
the class VideoTranscodingJob method updateStatus.
private boolean updateStatus(VideoTranscoding videoTranscoding, File transcodedFile, int exitCode) {
VideoManager videoManager = CoreSpringFactory.getImpl(VideoManager.class);
MovieService movieService = CoreSpringFactory.getImpl(MovieService.class);
videoTranscoding = videoManager.getVideoTranscoding(videoTranscoding.getKey());
Size videoSize = movieService.getSize(new LocalFileImpl(transcodedFile), VideoManagerImpl.FILETYPE_MP4);
if (videoSize != null) {
videoTranscoding.setWidth(videoSize.getWidth());
videoTranscoding.setHeight(videoSize.getHeight());
} else {
videoTranscoding.setWidth(0);
videoTranscoding.setHeight(0);
}
if (transcodedFile.exists()) {
videoTranscoding.setSize(transcodedFile.length());
} else {
videoTranscoding.setSize(0);
}
if (exitCode == 0) {
videoTranscoding.setStatus(VideoTranscoding.TRANSCODING_STATUS_DONE);
} else {
log.error("Exit code " + videoTranscoding + ":" + exitCode);
videoTranscoding.setStatus(VideoTranscoding.TRANSCODING_STATUS_ERROR);
}
videoTranscoding = videoManager.updateVideoTranscoding(videoTranscoding);
DBFactory.getInstance().commitAndCloseSession();
return exitCode == 0;
}
use of org.olat.core.commons.services.image.Size in project openolat by klemens.
the class VideoDisplayController method loadVideo.
/**
* Internal helper to do the actual video loading, checking for transcoded versions and captions
* @param ureq
* @param video
*/
private void loadVideo(UserRequest ureq, VFSLeaf video) {
mainVC.contextPut("title", entry.getDisplayname());
String desc = (descriptionText != null ? descriptionText : entry.getDescription());
setText(desc, "description");
String authors = entry.getAuthors();
mainVC.contextPut("authors", (StringHelper.containsNonWhitespace(authors) ? authors : null));
if (video != null) {
// get resolution of master video resource
Size masterResolution = videoManager.getVideoResolutionFromOLATResource(entry.getOlatResource());
String masterTitle = videoManager.getDisplayTitleForResolution(masterResolution.getHeight(), getTranslator());
String masterSize = " (" + Formatter.formatBytes(videoManager.getVideoMetadata(entry.getOlatResource()).getSize()) + ")";
boolean addMaster = true;
// Mapper for Video
String masterMapperId = "master-" + entry.getOlatResource().getResourceableId();
String masterUrl = registerCacheableMapper(ureq, masterMapperId, new VideoMediaMapper(videoManager.getMasterContainer(entry.getOlatResource())));
mainVC.contextPut("masterUrl", masterUrl);
// Mapper for versions specific because not in same base as the resource itself
String transcodingMapperId = "transcoding-" + entry.getOlatResource().getResourceableId();
VFSContainer transcodedContainer = videoManager.getTranscodingContainer(entry.getOlatResource());
String transcodedUrl = registerCacheableMapper(ureq, transcodingMapperId, new VideoMediaMapper(transcodedContainer));
mainVC.contextPut("transcodedUrl", transcodedUrl);
// Add transcoded versions
List<VideoTranscoding> videos = videoManager.getVideoTranscodings(entry.getOlatResource());
List<VideoTranscoding> readyToPlayVideos = new ArrayList<>();
List<String> displayTitles = new ArrayList<>();
int preferredAvailableResolution = 0;
for (VideoTranscoding videoTranscoding : videos) {
if (videoTranscoding.getStatus() == VideoTranscoding.TRANSCODING_STATUS_DONE) {
readyToPlayVideos.add(videoTranscoding);
// Check if at least one has equal height, else use master as resource
addMaster &= videoTranscoding.getHeight() < masterResolution.getHeight();
// Use the users preferred resolution or the next higher resolution
if (videoTranscoding.getResolution() >= userPreferredResolution.intValue()) {
preferredAvailableResolution = readyToPlayVideos.size() - 1;
}
// Calculate title. Standard title for standard resolution, original title if not standard resolution
String title = videoManager.getDisplayTitleForResolution(videoTranscoding.getResolution(), getTranslator());
displayTitles.add(title);
}
}
mainVC.contextPut("addMaster", addMaster);
mainVC.contextPut("masterTitle", masterTitle + masterSize);
mainVC.contextPut("videos", readyToPlayVideos);
mainVC.contextPut("displayTitles", displayTitles);
mainVC.contextPut("useSourceChooser", Boolean.valueOf(readyToPlayVideos.size() > 1));
mainVC.contextPut(GUIPREF_KEY_PREFERRED_RESOLUTION, preferredAvailableResolution);
// Check for null-value posters
VFSLeaf poster = videoManager.getPosterframe(entry.getOlatResource());
mainVC.contextPut("usePoster", Boolean.valueOf(poster != null && poster.getSize() > 0));
// Load the track from config
Map<String, String> trackfiles = new HashMap<String, String>();
Map<String, VFSLeaf> configTracks = videoManager.getAllTracks(entry.getOlatResource());
for (HashMap.Entry<String, VFSLeaf> track : configTracks.entrySet()) {
trackfiles.put(track.getKey(), track.getValue().getName());
}
mainVC.contextPut("trackfiles", trackfiles);
// Load video chapter if available
mainVC.contextPut("hasChapters", videoManager.hasChapters(entry.getOlatResource()));
// Add duration without preloading video
String duration = entry.getExpenditureOfWork();
if (!StringHelper.containsNonWhitespace(duration)) {
duration = "00:00";
}
mainVC.contextPut("duration", duration);
}
}
use of org.olat.core.commons.services.image.Size in project openolat by klemens.
the class VideoResourceEditController method doReplaceFileAndUpdateMetadata.
private int doReplaceFileAndUpdateMetadata() {
VFSLeaf video = (VFSLeaf) vfsContainer.resolve(VIDEO_RESOURCE);
File uploadFile = uploadFileEl.getUploadFile();
// VideoMetadata videoMetadata = videoManager.getMetaDataFromOLATResource(videoResource);
VideoMeta meta = videoManager.getVideoMetadata(videoResource);
if (uploadFileEl.getUploadSize() > 0 && uploadFile.exists()) {
video.delete();
VFSLeaf uploadVideo = vfsContainer.createChildLeaf(VIDEO_RESOURCE);
VFSManager.copyContent(uploadFile, uploadVideo);
// update video dimensions
Size dimensions = movieService.getSize(uploadVideo, VideoManagerImpl.FILETYPE_MP4);
// update video duration
long duration = movieService.getDuration(uploadVideo, VideoTranscoding.FORMAT_MP4);
// exchange poster
videoManager.exchangePoster(videoResource);
if (duration != -1) {
String length = Formatter.formatTimecode(duration);
entry.setExpenditureOfWork(length);
meta.setSize(uploadFile.length());
meta.setWidth(dimensions.getWidth());
meta.setHeight(dimensions.getHeight());
meta.setFormat(FilenameUtils.getExtension(uploadVideo.getName()));
meta.setLength(length);
}
}
return meta.getHeight();
}
Aggregations