use of org.jcodec.common.FileChannelWrapper in project openolat by klemens.
the class VideoManagerImpl method getFrame.
/**
* write the the given frame at frameNumber in the frame leaf
* @param videoResource videoresource
* @param frameNumber the frameNumber at which the frame should be taken from
* @param frame the VFSLeaf to write the picked image to
*/
@Override
public boolean getFrame(OLATResource videoResource, int frameNumber, VFSLeaf frame) {
File videoFile = ((LocalFileImpl) getMasterVideoFile(videoResource)).getBasefile();
try (RandomAccessFile randomAccessFile = new RandomAccessFile(videoFile, "r")) {
FileChannel ch = randomAccessFile.getChannel();
FileChannelWrapper in = new FileChannelWrapper(ch);
FrameGrab frameGrab = new FrameGrab(in).seekToFrameSloppy(frameNumber);
OutputStream frameOutputStream = frame.getOutputStream(false);
BufferedImage bufImg = frameGrab.getFrame();
ImageIO.write(bufImg, "JPG", frameOutputStream);
// close everything to prevent resource leaks
frameOutputStream.close();
in.close();
ch.close();
return true;
} catch (Exception | AssertionError e) {
log.error("Could not get frame::" + frameNumber + " for video::" + videoFile.getAbsolutePath(), e);
return false;
}
}
use of org.jcodec.common.FileChannelWrapper in project openolat by klemens.
the class MovieServiceImpl method getFrameCount.
@Override
public long getFrameCount(VFSLeaf media, String suffix) {
File file = null;
if (media instanceof VFSCPNamedItem) {
media = ((VFSCPNamedItem) media).getDelegate();
}
if (media instanceof LocalFileImpl) {
file = ((LocalFileImpl) media).getBasefile();
}
if (file == null) {
return -1;
}
if (extensions.contains(suffix)) {
try (RandomAccessFile accessFile = new RandomAccessFile(file, "r")) {
FileChannel ch = accessFile.getChannel();
FileChannelWrapper in = new FileChannelWrapper(ch);
MP4Demuxer demuxer1 = new MP4Demuxer(in);
return demuxer1.getVideoTrack().getFrameCount();
} catch (Exception | AssertionError e) {
log.error("Cannot extract num. of frames of: " + media, e);
}
}
return -1;
}
Aggregations