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 2018/08/03 09:54:43 UTC
[openmeetings] branch master updated: [OPENMEETINGS-1142] more work
on recording conversions
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new f4dfd2e [OPENMEETINGS-1142] more work on recording conversions
f4dfd2e is described below
commit f4dfd2e18a7c8e99dd2539f0359905a6fdf63ede
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Fri Aug 3 16:52:42 2018 +0700
[OPENMEETINGS-1142] more work on recording conversions
---
.../openmeetings/core/converter/BaseConverter.java | 8 ++++---
.../core/converter/InterviewConverter.java | 28 +++++++++++++---------
.../db/dao/basic/ConfigurationDao.java | 10 ++++++++
.../installation/ImportInitvalues.java | 4 ++++
.../openmeetings/util/OpenmeetingsVariables.java | 10 ++++++++
.../openmeetings/web/user/record/VideoInfo.java | 2 +-
6 files changed, 47 insertions(+), 15 deletions(-)
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 3b5833d..0e2e676 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
@@ -32,6 +32,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_IMA
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_SOX;
import static org.apache.openmeetings.util.OpenmeetingsVariables.getAudioBitrate;
import static org.apache.openmeetings.util.OpenmeetingsVariables.getAudioRate;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.getVideoPreset;
import java.io.File;
import java.io.IOException;
@@ -379,10 +380,11 @@ public abstract class BaseConverter {
"-c:v", "h264", //
"-crf", "24",
"-pix_fmt", "yuv420p",
- "-preset", "medium",
+ "-preset", getVideoPreset(),
"-profile:v", "baseline",
- "-c:a", "libfaac",
- "-c:a", "libfdk_aac",
+ "-level", "3.0",
+ "-movflags", "faststart",
+ "-c:a", "aac",
"-ar", String.valueOf(getAudioRate()),
"-b:a", getAudioBitrate(),
"-s", getDimensions(r), //
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 9ef0c56..669ea05 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
@@ -117,10 +117,12 @@ public class InterviewConverter extends BaseConverter implements IRecordingConve
//createBlankPod(id, streamFolder, interviewCam, diff, logs, pods, parts);
PodPart.add(parts, diff);
if (!meta.isAudioOnly()) {
- parts.add(new PodPart(path));
+ parts.add(new PodPart(path, diff(meta.getRecordEnd(), meta.getRecordStart())));
}
pStart = meta.getRecordEnd();
}
+ } else {
+ log.debug("Meta FLV doesn't exist: {}", flv);
}
}
if (!parts.isEmpty()) {
@@ -140,7 +142,6 @@ public class InterviewConverter extends BaseConverter implements IRecordingConve
List<String> args = new ArrayList<>();
args.add(getPathToFFMPEG());
args.add("-y");
- args.add("-an");
StringBuilder videos = new StringBuilder();
StringBuilder concat = new StringBuilder();
for (int i = 0; i < parts.size(); ++i) {
@@ -165,6 +166,7 @@ public class InterviewConverter extends BaseConverter implements IRecordingConve
}
args.add("-filter_complex");
args.add(concat.insert(0, videos).append("concat=n=").append(parts.size()).append(":v=1:a=0").toString());
+ args.add("-an");
args.add(podX);
ProcessResult res = ProcessHelper.executeScript(String.format("Full Flv pod_%s", N), args.toArray(new String[0]), true);
logs.add(res);
@@ -206,16 +208,21 @@ public class InterviewConverter extends BaseConverter implements IRecordingConve
args.add("-i");
args.add(pods.get(i));
cols.append('[').append(i).append(":v]");
- if (i != 0 && i % w == 0) {
- cols.append("hstack=inputs=").append(w).append("[c").append(j).append("];");
+ if (i != 0 && (i + 1) % w == 0) {
+ cols.append("hstack=inputs=").append(w);
+ if (j == 0 && i == N - 1) {
+ cols.append("[v]");
+ } else {
+ cols.append("[c").append(j).append("];");
+ }
rows.append("[c").append(j).append(']');
j++;
}
if (i == N - 1) {
- if (j == 0) {
- cols.append("hstack=inputs=").append(i).append("[v]");
- } else {
+ if (j > 1) {
rows.append("vstack=inputs=").append(j).append("[v]");
+ } else {
+ rows.setLength(0);
}
}
}
@@ -254,14 +261,13 @@ public class InterviewConverter extends BaseConverter implements IRecordingConve
final String file;
final long duration;
- public PodPart(String file) {
+ public PodPart(String file, long duration) {
this.file = file;
- this.duration = 0L;
+ this.duration = duration;
}
public PodPart(long duration) {
- this.file = null;
- this.duration = duration;
+ this(null, duration);
}
public String getFile() {
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 16c40f2..7871871 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -39,6 +39,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MI
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDIO_BITRATE;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDIO_RATE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_VIDEO_PRESET;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REST_ALLOW_ORIGIN;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SIP_ENABLED;
@@ -70,6 +71,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.setRestAllowOri
import static org.apache.openmeetings.util.OpenmeetingsVariables.setRoomSettings;
import static org.apache.openmeetings.util.OpenmeetingsVariables.setSipContext;
import static org.apache.openmeetings.util.OpenmeetingsVariables.setSipEnabled;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.setVideoPreset;
import java.net.UnknownHostException;
import java.util.ArrayList;
@@ -333,6 +335,9 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
case CONFIG_MP4_AUDIO_BITRATE:
reloadAudioBitrate();
break;
+ case CONFIG_MP4_VIDEO_PRESET:
+ reloadVideoPreset();
+ break;
case CONFIG_DEFAULT_TIMEZONE:
reloadTimezone();
break;
@@ -414,6 +419,10 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
setAudioBitrate(getString(CONFIG_MP4_AUDIO_BITRATE, "32k"));
}
+ private void reloadVideoPreset() {
+ setVideoPreset(getString(CONFIG_MP4_VIDEO_PRESET, "medium"));
+ }
+
private void reloadTimezone() {
String defaultTzName = getString(CONFIG_DEFAULT_TIMEZONE, "Europe/Berlin");
@@ -469,6 +478,7 @@ public class ConfigurationDao implements IDataProviderDao<Configuration> {
reloadGaCode();
reloadAudioRate();
reloadAudioBitrate();
+ reloadVideoPreset();
reloadTimezone();
reloadRestAllowOrigin();
reloadRoomSettings();
diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 302ca2a..2200477 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -61,6 +61,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MI
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDIO_BITRATE;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDIO_RATE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_VIDEO_PRESET;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MYROOMS_ENABLED;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_FFMPEG;
@@ -347,6 +348,9 @@ public class ImportInitvalues {
"Number of chars needed in a user last name", "4.0.4");
addCfg(list, CONFIG_CHAT_SEND_ON_ENTER, String.valueOf(false), Configuration.Type.bool,
"Controls if chat message will be set on Enter (default: send on Ctrl+Enter)", "4.0.5");
+ addCfg(list, CONFIG_MP4_VIDEO_PRESET, "medium", Configuration.Type.bool,
+ "Preset (encoder optimization settings) to be used while performing mp4 conversion."
+ + "Valid values are: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow", "4.0.5");
return list;
}
public void loadConfiguration(InstallationConfig cfg) {
diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
index c59ec1f..791d6bd 100644
--- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
+++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -93,6 +93,7 @@ public class OpenmeetingsVariables {
public static final String CONFIG_REMINDER_MESSAGE = "reminder.message";
public static final String CONFIG_MP4_AUDIO_RATE = "mp4.audio.rate";
public static final String CONFIG_MP4_AUDIO_BITRATE = "mp4.audio.bitrate";
+ public static final String CONFIG_MP4_VIDEO_PRESET = "mp4.video.preset";
public static final String CONFIG_REST_ALLOW_ORIGIN = "rest.allow.origin";
public static final String CONFIG_FNAME_MIN_LENGTH = "user.fname.minimum.length";
public static final String CONFIG_LNAME_MIN_LENGTH = "user.lname.minimum.length";
@@ -136,6 +137,7 @@ public class OpenmeetingsVariables {
private static Long defaultGroup = 1L;
private static int audioRate = 22050;
private static String audioBitrate = "32k";
+ private static String videoPreset = "medium";
private static String defaultTimezone = "Europe/Berlin";
private static String restAllowOrigin = null;
private static Class<?> appClass = null;
@@ -254,6 +256,14 @@ public class OpenmeetingsVariables {
audioBitrate = bitrate;
}
+ public static String getVideoPreset() {
+ return videoPreset;
+ }
+
+ public static void setVideoPreset(String preset) {
+ videoPreset = preset;
+ }
+
public static String getDefaultTimezone() {
return defaultTimezone;
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
index ef2a75a..93e4107 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/VideoInfo.java
@@ -145,6 +145,7 @@ public class VideoInfo extends Panel {
boolean exists = false;
if (_r instanceof Recording) {
Recording r = (Recording)_r;
+ isInterview = r.isInterview();
rm.setObject(r);
exists = r.exists();
try {
@@ -153,7 +154,6 @@ public class VideoInfo extends Panel {
Room room = roomDao.get(r.getRoomId());
if (room != null) {
name = room.getName();
- isInterview = Room.Type.interview == room.getType();
}
}
roomName.setObject(name);