You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/09/22 04:56:31 UTC

openmeetings git commit: [OPENMEETINGS-1710] thumbnail generation is changed

Repository: openmeetings
Updated Branches:
  refs/heads/master 2fe741da7 -> d330858ea


[OPENMEETINGS-1710] thumbnail generation is changed


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/d330858e
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/d330858e
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/d330858e

Branch: refs/heads/master
Commit: d330858ea2406421142363d964519359a98b6c0a
Parents: 2fe741d
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Fri Sep 22 11:56:22 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Fri Sep 22 11:56:22 2017 +0700

----------------------------------------------------------------------
 .../core/converter/BaseConverter.java           | 30 ++++++------
 .../core/converter/FlvExplorerConverter.java    | 10 +---
 .../core/converter/InterviewConverter.java      |  2 +-
 .../core/converter/RecordingConverter.java      |  2 +-
 .../openmeetings/backup/BackupImport.java       |  3 +-
 .../openmeetings/web/app/Application.java       |  4 +-
 .../web/room/RoomPreviewResourceReference.java  | 10 ++--
 .../web/room/wb/WbWebSocketHelper.java          |  4 +-
 .../record/JpgRecordingResourceReference.java   | 51 --------------------
 .../record/PngRecordingResourceReference.java   | 51 ++++++++++++++++++++
 .../web/user/record/VideoPlayer.java            |  2 +-
 11 files changed, 82 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
index 21a3b6b..6709508 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.core.converter;
 
 import static org.apache.openmeetings.core.data.record.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
 import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsSubDir;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_FFMPEG;
@@ -42,6 +42,7 @@ import org.apache.directory.api.util.Strings;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
 import org.apache.openmeetings.db.dao.record.RecordingMetaDeltaDao;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;
@@ -348,8 +349,12 @@ public abstract class BaseConverter {
 		}
 	}
 
+	protected String getDimensions(Recording r, char delim) {
+		return String.format("%s%s%s", r.getWidth(), delim, r.getHeight());
+	}
+
 	protected String getDimensions(Recording r) {
-		return String.format("%sx%s", r.getWidth(), r.getHeight());
+		return getDimensions(r, 'x');
 	}
 
 	protected List<String> addMp4OutParams(Recording r, List<String> argv, String mp4path) {
@@ -378,21 +383,18 @@ public abstract class BaseConverter {
 		return mp4path;
 	}
 
-	protected void convertToJpg(Recording r, String mp4path, List<ConverterProcessResult> returnLog) throws IOException {
+	protected void convertToPng(BaseFileItem f, String mp4path, List<ConverterProcessResult> logs) throws IOException {
 		// Extract first Image for preview purpose
-		// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
-		// 320x240 movie.jpg
-		File jpg = r.getFile(EXTENSION_JPG);
+		// ffmpeg -i movie.mp4 -vf  "thumbnail,scale=640:-1" -frames:v 1 movie.png
+		File png = f.getFile(EXTENSION_PNG);
 		String[] argv = new String[] { //
-				getPathToFFMPEG(), "-y", //
-				"-i", mp4path, //
-				"-vcodec", "mjpeg", //
-				"-vframes", "100", "-an", //
-				"-f", "rawvideo", //
-				"-s", getDimensions(r), //
-				jpg.getCanonicalPath() };
+				getPathToFFMPEG(), "-y" //
+				, "-i", mp4path //
+				, "-vf", "thumbnail,scale=640:-1" //
+				, "-frames:v", "1" //
+				, png.getCanonicalPath() };
 
-		returnLog.add(ProcessHelper.executeScript("generate preview JPG", argv));
+		logs.add(ProcessHelper.executeScript(String.format("generate preview PNG :: ", f.getHash()), argv));
 	}
 
 	protected static Dimension getDimension(String txt) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
index c9c0f52..afd8606 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
@@ -19,7 +19,6 @@
 package org.apache.openmeetings.core.converter;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
@@ -75,14 +74,7 @@ public class FlvExplorerConverter extends BaseConverter {
 			Dimension dim = getDimension(res.getError());
 			f.setWidth(dim.width);
 			f.setHeight(dim.height);
-			File jpeg = f.getFile(EXTENSION_JPG);
-
-			args = new String[] { getPathToFFMPEG(), "-y", "-i",
-					mp4.getCanonicalPath(), "-codec:v", "mjpeg", "-vframes", "1", "-an",
-					"-f", "rawvideo", "-s", dim.width + "x" + dim.height,
-					jpeg.getCanonicalPath() };
-
-			logs.add(ProcessHelper.executeScript("previewUpload ID :: " + f.getHash(), args));
+			convertToPng(f, mp4.getCanonicalPath(), logs);
 		} catch (Exception err) {
 			log.error("[convertToFLV]", err);
 			logs.add(new ConverterProcessResult("convertToMP4", err.getMessage(), err));

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
index a07d0db..8b7628a 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
@@ -258,7 +258,7 @@ public class InterviewConverter extends BaseConverter implements IRecordingConve
 
 			String mp4path = convertToMp4(r, args, logs);
 
-			convertToJpg(r, mp4path, logs);
+			convertToPng(r, mp4path, logs);
 
 			updateDuration(r);
 			r.setStatus(Recording.Status.PROCESSED);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
index 8a9b0c9..232ff97 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
@@ -140,7 +140,7 @@ public class RecordingConverter extends BaseConverter implements IRecordingConve
 					"-i", inputScreenFullFlv, "-i", wav.getCanonicalPath()
 					), logs);
 
-			convertToJpg(r, mp4path, logs);
+			convertToPng(r, mp4path, logs);
 
 			updateDuration(r);
 			r.setStatus(Recording.Status.PROCESSED);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index d0210aa..c420923 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -27,6 +27,7 @@ import static org.apache.openmeetings.util.OmFileHelper.BCKP_ROOM_FILES;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
 import static org.apache.openmeetings.util.OmFileHelper.FILES_DIR;
 import static org.apache.openmeetings.util.OmFileHelper.PROFILES_DIR;
 import static org.apache.openmeetings.util.OmFileHelper.getFileName;
@@ -685,7 +686,7 @@ public class BackupImport {
 				if (!Strings.isEmpty(r.getHash()) && r.getHash().startsWith(recordingFileName)) {
 					String name = getFileName(r.getHash());
 					r.setHash(UUID.randomUUID().toString());
-					fileMap.put(String.format("%s.%s", name, EXTENSION_JPG), String.format("%s.%s", r.getHash(), EXTENSION_JPG));
+					fileMap.put(String.format("%s.%s", name, EXTENSION_JPG), String.format("%s.%s", r.getHash(), EXTENSION_PNG));
 					fileMap.put(String.format("%s.%s.%s", name, EXTENSION_FLV, EXTENSION_MP4), String.format("%s.%s", r.getHash(), EXTENSION_MP4));
 				}
 				if (Strings.isEmpty(r.getHash())) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index d95093a..9d91960 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -92,7 +92,7 @@ import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.admin.AdminWidgetDescriptor;
-import org.apache.openmeetings.web.user.record.JpgRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.PngRecordingResourceReference;
 import org.apache.openmeetings.web.user.record.Mp4RecordingResourceReference;
 import org.apache.openmeetings.web.util.GroupLogoResourceReference;
 import org.apache.openmeetings.web.util.ProfileImageResourceReference;
@@ -288,7 +288,7 @@ public class Application extends AuthenticatedWebApplication implements IApplica
 		mountPage("activate", ActivatePage.class);
 		mountPage("reset", ResetPage.class);
 		mountResource("/recordings/mp4/${id}", new Mp4RecordingResourceReference());
-		mountResource("/recordings/jpg/${id}", new JpgRecordingResourceReference()); //should be in sync with VideoPlayer
+		mountResource("/recordings/png/${id}", new PngRecordingResourceReference()); //should be in sync with VideoPlayer
 		mountResource("/room/file/${id}", new RoomResourceReference());
 		mountResource("/room/preview/${id}", new RoomPreviewResourceReference());
 		mountResource("/profile/${id}", new ProfileImageResourceReference());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPreviewResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPreviewResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPreviewResourceReference.java
index 3921d27..4405ef2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPreviewResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPreviewResourceReference.java
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room;
 
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
-import static org.apache.openmeetings.util.OmFileHelper.JPG_MIME_TYPE;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
+import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
 
 import java.io.File;
 
@@ -40,7 +40,7 @@ public class RoomPreviewResourceReference extends RoomResourceReference {
 
 	@Override
 	protected String getMimeType(FileItem r) {
-		return JPG_MIME_TYPE;
+		return PNG_MIME_TYPE;
 	}
 
 	@Override
@@ -54,11 +54,11 @@ public class RoomPreviewResourceReference extends RoomResourceReference {
 
 	@Override
 	protected File getFile(FileItem f, Attributes attr) {
-		return getFile(f, EXTENSION_JPG);
+		return getFile(f, EXTENSION_PNG);
 	}
 
 	@Override
 	protected String getFileName(FileItem f) {
-		return f.getFileName(EXTENSION_JPG);
+		return f.getFileName(EXTENSION_PNG);
 	}
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
index f725b89..6db0971 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java
@@ -27,7 +27,7 @@ import org.apache.openmeetings.util.NullStringer;
 import org.apache.openmeetings.util.ws.IClusterWsMessage;
 import org.apache.openmeetings.web.room.RoomPreviewResourceReference;
 import org.apache.openmeetings.web.room.RoomResourceReference;
-import org.apache.openmeetings.web.user.record.JpgRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.PngRecordingResourceReference;
 import org.apache.openmeetings.web.user.record.Mp4RecordingResourceReference;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -104,7 +104,7 @@ public class WbWebSocketHelper extends WebSocketHelper {
 			case Recording:
 				ref = new Mp4RecordingResourceReference();
 				file.put("_src", urlFor(ref, pp));
-				file.put("_poster", urlFor(new JpgRecordingResourceReference(), pp));
+				file.put("_poster", urlFor(new PngRecordingResourceReference(), pp));
 				break;
 			case Presentation:
 				ref = new RoomResourceReference();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/JpgRecordingResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/JpgRecordingResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/JpgRecordingResourceReference.java
deleted file mode 100644
index 5eb2acb..0000000
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/JpgRecordingResourceReference.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.record;
-
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
-import static org.apache.openmeetings.util.OmFileHelper.JPG_MIME_TYPE;
-import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
-
-import java.io.File;
-
-import org.apache.openmeetings.db.entity.record.Recording;
-import org.apache.wicket.request.resource.IResource.Attributes;
-
-public class JpgRecordingResourceReference extends RecordingResourceReference {
-	private static final long serialVersionUID = 1L;
-
-	public JpgRecordingResourceReference() {
-		super("jpg-recording-cover");
-	}
-
-	@Override
-	public String getMimeType() {
-		return JPG_MIME_TYPE;
-	}
-
-	@Override
-	protected String getFileName(Recording r) {
-		return String.format("%s%s.%s", recordingFileName, r.getId(), EXTENSION_JPG);
-	}
-
-	@Override
-	protected File getFile(Recording r, Attributes attr) {
-		return r.getFile(EXTENSION_JPG);
-	}
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/PngRecordingResourceReference.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/PngRecordingResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/PngRecordingResourceReference.java
new file mode 100644
index 0000000..181d6f6
--- /dev/null
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/PngRecordingResourceReference.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
+import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
+import static org.apache.openmeetings.util.OmFileHelper.recordingFileName;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.Recording;
+import org.apache.wicket.request.resource.IResource.Attributes;
+
+public class PngRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 1L;
+
+	public PngRecordingResourceReference() {
+		super("png-recording-cover");
+	}
+
+	@Override
+	public String getMimeType() {
+		return PNG_MIME_TYPE;
+	}
+
+	@Override
+	protected String getFileName(Recording r) {
+		return String.format("%s%s.%s", recordingFileName, r.getId(), EXTENSION_PNG);
+	}
+
+	@Override
+	protected File getFile(Recording r, Attributes attr) {
+		return r.getFile(EXTENSION_PNG);
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d330858e/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
index 6c3538d..3102264 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
@@ -36,7 +36,7 @@ public class VideoPlayer extends Panel {
 	private final WebMarkupContainer wait = new WebMarkupContainer("wait"); //FIXME not used
 	private final WebMarkupContainer container = new WebMarkupContainer("container");
 	private final Mp4RecordingResourceReference mp4RecRes = new Mp4RecordingResourceReference();
-	private final JpgRecordingResourceReference posterRecRes = new JpgRecordingResourceReference();
+	private final PngRecordingResourceReference posterRecRes = new PngRecordingResourceReference();
 	private final RoomResourceReference mp4FileRes = new RoomResourceReference();
 	private final RoomResourceReference posterFileRes = new RoomResourceReference();
 	private final Video player = new Video("player") {