Search in sources :

Example 31 with Size

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);
    }
}
Also used : VideoMeta(org.olat.modules.video.VideoMeta) Size(org.olat.core.commons.services.image.Size)

Example 32 with Size

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;
}
Also used : Size(org.olat.core.commons.services.image.Size) VideoMetaImpl(org.olat.modules.video.model.VideoMetaImpl) OLATResource(org.olat.resource.OLATResource) Date(java.util.Date)

Example 33 with Size

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;
}
Also used : MovieService(org.olat.core.commons.services.video.MovieService) Size(org.olat.core.commons.services.image.Size) LocalFileImpl(org.olat.core.util.vfs.LocalFileImpl) VideoManager(org.olat.modules.video.VideoManager)

Example 34 with Size

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);
    }
}
Also used : VFSLeaf(org.olat.core.util.vfs.VFSLeaf) HashMap(java.util.HashMap) Size(org.olat.core.commons.services.image.Size) VFSContainer(org.olat.core.util.vfs.VFSContainer) VideoTranscoding(org.olat.modules.video.VideoTranscoding) ArrayList(java.util.ArrayList) VideoMediaMapper(org.olat.modules.video.manager.VideoMediaMapper)

Example 35 with Size

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();
}
Also used : VFSLeaf(org.olat.core.util.vfs.VFSLeaf) VideoMeta(org.olat.modules.video.VideoMeta) Size(org.olat.core.commons.services.image.Size) File(java.io.File)

Aggregations

Size (org.olat.core.commons.services.image.Size)76 File (java.io.File)24 IOException (java.io.IOException)22 LocalFileImpl (org.olat.core.util.vfs.LocalFileImpl)22 VFSLeaf (org.olat.core.util.vfs.VFSLeaf)20 VFSContainer (org.olat.core.util.vfs.VFSContainer)14 FileInputStream (java.io.FileInputStream)12 InputStream (java.io.InputStream)12 ImageInputStream (javax.imageio.stream.ImageInputStream)12 MemoryCacheImageInputStream (javax.imageio.stream.MemoryCacheImageInputStream)12 BufferedImage (java.awt.image.BufferedImage)10 ImageReader (javax.imageio.ImageReader)8 CannotGenerateThumbnailException (org.olat.core.commons.services.thumbnail.CannotGenerateThumbnailException)8 FinalSize (org.olat.core.commons.services.thumbnail.FinalSize)7 CMMException (java.awt.color.CMMException)6 ArrayList (java.util.ArrayList)6 VideoMeta (org.olat.modules.video.VideoMeta)5 RandomAccessFile (java.io.RandomAccessFile)4 Date (java.util.Date)4 List (java.util.List)4