stabilize MPV playback, adjust some intervals and timeouts. Make TaskProcess give more proper process state - so ProcessService wont kill process in state of starting or shutdowning
This commit is contained in:
parent
b80f8f4b29
commit
59801a6ddd
5 changed files with 53 additions and 5 deletions
|
|
@ -18,6 +18,7 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.mykola2312.mptv.task.TaskProcess;
|
import com.mykola2312.mptv.task.TaskProcess;
|
||||||
|
import com.mykola2312.mptv.task.TaskProcessState;
|
||||||
|
|
||||||
public class MPV implements TaskProcess {
|
public class MPV implements TaskProcess {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(MPV.class);
|
private static final Logger logger = LoggerFactory.getLogger(MPV.class);
|
||||||
|
|
@ -25,6 +26,8 @@ public class MPV implements TaskProcess {
|
||||||
private final String url;
|
private final String url;
|
||||||
private Process process;
|
private Process process;
|
||||||
|
|
||||||
|
private TaskProcessState state = TaskProcessState.STOPPED;
|
||||||
|
|
||||||
public MPV(String url) {
|
public MPV(String url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
@ -131,7 +134,10 @@ public class MPV implements TaskProcess {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawn() {
|
public boolean spawn() {
|
||||||
|
if (state == TaskProcessState.STARTING) return false;
|
||||||
try {
|
try {
|
||||||
|
state = TaskProcessState.STARTING;
|
||||||
|
|
||||||
process = Runtime.getRuntime().exec(new String[] {
|
process = Runtime.getRuntime().exec(new String[] {
|
||||||
"mpv", "--vo=gpu", "--ao=pulse", "--fullscreen", "--input-ipc-server=" + MPV_SOCKET_PATH, url
|
"mpv", "--vo=gpu", "--ao=pulse", "--fullscreen", "--input-ipc-server=" + MPV_SOCKET_PATH, url
|
||||||
});
|
});
|
||||||
|
|
@ -147,10 +153,19 @@ public class MPV implements TaskProcess {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return process.isAlive();
|
if (process.isAlive()) {
|
||||||
|
state = TaskProcessState.RUNNING;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
state = TaskProcessState.STOPPED;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final float PLAYBACK_TIME_DELAY = 2.5f;
|
@Override
|
||||||
|
public TaskProcessState getTaskState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean checkPlayback() {
|
private boolean checkPlayback() {
|
||||||
try {
|
try {
|
||||||
|
|
@ -182,7 +197,7 @@ public class MPV implements TaskProcess {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
boolean playbackChanged = (playbackTime - lastPlaybackTime) > PLAYBACK_TIME_DELAY;
|
boolean playbackChanged = (playbackTime - lastPlaybackTime) > 0.1;
|
||||||
|
|
||||||
lastPlaybackTime = playbackTime;
|
lastPlaybackTime = playbackTime;
|
||||||
return playbackChanged;
|
return playbackChanged;
|
||||||
|
|
@ -212,6 +227,8 @@ public class MPV implements TaskProcess {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop() {
|
public void stop() {
|
||||||
|
state = TaskProcessState.STOPPING;
|
||||||
|
|
||||||
if (reader != null) reader.running = false;
|
if (reader != null) reader.running = false;
|
||||||
if (readerThread != null) readerThread.interrupt();
|
if (readerThread != null) readerThread.interrupt();
|
||||||
if (socket != null) closeConnection();
|
if (socket != null) closeConnection();
|
||||||
|
|
@ -220,6 +237,8 @@ public class MPV implements TaskProcess {
|
||||||
readerThread = null;
|
readerThread = null;
|
||||||
socket = null;
|
socket = null;
|
||||||
process = null;
|
process = null;
|
||||||
|
|
||||||
|
state = TaskProcessState.STOPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int requestIdCounter = 0;
|
private int requestIdCounter = 0;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.mykola2312.mptv.Main;
|
import com.mykola2312.mptv.Main;
|
||||||
import com.mykola2312.mptv.task.TaskProcess;
|
import com.mykola2312.mptv.task.TaskProcess;
|
||||||
|
import com.mykola2312.mptv.task.TaskProcessState;
|
||||||
import com.mykola2312.mptv.ui.MenuAction;
|
import com.mykola2312.mptv.ui.MenuAction;
|
||||||
|
|
||||||
public class PiIR implements TaskProcess {
|
public class PiIR implements TaskProcess {
|
||||||
|
|
@ -24,6 +25,8 @@ public class PiIR implements TaskProcess {
|
||||||
private Process process = null;
|
private Process process = null;
|
||||||
private InputStream input = null;
|
private InputStream input = null;
|
||||||
|
|
||||||
|
private TaskProcessState state;
|
||||||
|
|
||||||
private class PiIRReader implements Runnable {
|
private class PiIRReader implements Runnable {
|
||||||
private final PiIR piir;
|
private final PiIR piir;
|
||||||
private final InputStream input;
|
private final InputStream input;
|
||||||
|
|
@ -118,7 +121,10 @@ public class PiIR implements TaskProcess {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawn() {
|
public boolean spawn() {
|
||||||
|
if (state == TaskProcessState.STARTING) return false;
|
||||||
try {
|
try {
|
||||||
|
state = TaskProcessState.STARTING;
|
||||||
|
|
||||||
process = Runtime.getRuntime().exec(new String[] {
|
process = Runtime.getRuntime().exec(new String[] {
|
||||||
"unbuffer", exec, "dump", "--gpio", String.valueOf(gpio)
|
"unbuffer", exec, "dump", "--gpio", String.valueOf(gpio)
|
||||||
});
|
});
|
||||||
|
|
@ -131,7 +137,17 @@ public class PiIR implements TaskProcess {
|
||||||
readerThread = new Thread(reader);
|
readerThread = new Thread(reader);
|
||||||
readerThread.start();
|
readerThread.start();
|
||||||
|
|
||||||
return isAlive();
|
if (process.isAlive()) {
|
||||||
|
state = TaskProcessState.RUNNING;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskProcessState getTaskState() {
|
||||||
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -141,6 +157,8 @@ public class PiIR implements TaskProcess {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stop() {
|
public void stop() {
|
||||||
|
state = TaskProcessState.STOPPING;
|
||||||
|
|
||||||
if (reader != null) reader.running = false;
|
if (reader != null) reader.running = false;
|
||||||
if (readerThread != null) readerThread.interrupt();
|
if (readerThread != null) readerThread.interrupt();
|
||||||
if (input != null) {
|
if (input != null) {
|
||||||
|
|
@ -154,6 +172,8 @@ public class PiIR implements TaskProcess {
|
||||||
reader = null;
|
reader = null;
|
||||||
readerThread = null;
|
readerThread = null;
|
||||||
process = null;
|
process = null;
|
||||||
|
|
||||||
|
state = TaskProcessState.STOPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleDump(PiIRDump dump) {
|
public void handleDump(PiIRDump dump) {
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public class ProcessService implements Task {
|
||||||
@Override
|
@Override
|
||||||
public void dispatch() {
|
public void dispatch() {
|
||||||
for (TaskProcess process : processes) {
|
for (TaskProcess process : processes) {
|
||||||
if (!process.isAlive()) {
|
if (process.getTaskState() == TaskProcessState.RUNNING && !process.isAlive()) {
|
||||||
logger.info("restarting process " + process.toString());
|
logger.info("restarting process " + process.toString());
|
||||||
try {
|
try {
|
||||||
process.stop();
|
process.stop();
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package com.mykola2312.mptv.task;
|
||||||
|
|
||||||
public interface TaskProcess {
|
public interface TaskProcess {
|
||||||
public boolean spawn();
|
public boolean spawn();
|
||||||
|
public TaskProcessState getTaskState();
|
||||||
public boolean isAlive();
|
public boolean isAlive();
|
||||||
public void stop();
|
public void stop();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.mykola2312.mptv.task;
|
||||||
|
|
||||||
|
public enum TaskProcessState {
|
||||||
|
STOPPED,
|
||||||
|
STARTING,
|
||||||
|
RUNNING,
|
||||||
|
STOPPING
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue