From: Matthew Skinner Date: Wed, 13 Jan 2021 21:11:46 +0000 (+1100) Subject: [ipcamera] Fix for Instar and HLS. (#9766) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=ec1a91c6d7354ca217341daf49b804307431f12f;p=openhab-addons.git [ipcamera] Fix for Instar and HLS. (#9766) Signed-off-by: Matthew Skinner --- diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/Ffmpeg.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/Ffmpeg.java index c006d5b5cc..bc5c960179 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/Ffmpeg.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/Ffmpeg.java @@ -51,7 +51,6 @@ public class Ffmpeg { private List commandArrayList = new ArrayList(); private IpCameraFfmpegThread ipCameraFfmpegThread = new IpCameraFfmpegThread(); private int keepAlive = 8; - private boolean running = false; private String password; public Ffmpeg(IpCameraHandler handle, FFmpegFormat format, String ffmpegLocation, String inputArguments, @@ -85,10 +84,14 @@ public class Ffmpeg { } public void checkKeepAlive() { - if (keepAlive <= -1) { - return; - } else if (--keepAlive == 0) { + if (keepAlive == 1) { stopConverting(); + } else if (keepAlive <= -1 && !getIsAlive()) { + logger.warn("HLS stream was not running, restarting it now."); + startConverting(); + } + if (keepAlive > 0) { + keepAlive--; } } @@ -172,7 +175,6 @@ public class Ffmpeg { ipCameraFfmpegThread = new IpCameraFfmpegThread(); logger.debug("Starting ffmpeg with this command now:{}", ffmpegCommand.replaceAll(password, "********")); ipCameraFfmpegThread.start(); - running = true; if (format.equals(FFmpegFormat.HLS)) { ipCameraHandler.setChannelState(CHANNEL_START_STREAM, OnOffType.ON); } @@ -183,7 +185,11 @@ public class Ffmpeg { } public boolean getIsAlive() { - return running; + Process localProcess = process; + if (localProcess != null) { + return localProcess.isAlive(); + } + return false; } public void stopConverting() { @@ -192,18 +198,10 @@ public class Ffmpeg { Process localProcess = process; if (localProcess != null) { localProcess.destroyForcibly(); - running = false; } if (format.equals(FFmpegFormat.HLS)) { - if (keepAlive == -1) { - logger.warn("HLS stopped when Stream should be running non stop, restarting HLS now."); - startConverting(); - return; - } else { - ipCameraHandler.setChannelState(CHANNEL_START_STREAM, OnOffType.OFF); - } + ipCameraHandler.setChannelState(CHANNEL_START_STREAM, OnOffType.OFF); } - keepAlive = 8; } } } diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/InstarHandler.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/InstarHandler.java index f8562dd1ec..9cf6c0d9d2 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/InstarHandler.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/InstarHandler.java @@ -123,18 +123,6 @@ public class InstarHandler extends ChannelDuplexHandler { // This handles the commands that come from the Openhab event bus. public void handleCommand(ChannelUID channelUID, Command command) { if (command instanceof RefreshType) { - switch (channelUID.getId()) { - case CHANNEL_MOTION_ALARM: - if (ipCameraHandler.cameraConfig.getServerPort() > 0) { - ipCameraHandler.logger.info("Setting up the Alarm Server settings in the camera now"); - ipCameraHandler.sendHttpGET( - "/param.cgi?cmd=setmdalarm&-aname=server2&-switch=on&-interval=1&cmd=setalarmserverattr&-as_index=3&-as_server=" - + ipCameraHandler.hostIp + "&-as_port=" - + ipCameraHandler.cameraConfig.getServerPort() - + "&-as_path=/instar&-as_queryattr1=&-as_queryval1=&-as_queryattr2=&-as_queryval2=&-as_queryattr3=&-as_queryval3=&-as_activequery=1&-as_auth=0&-as_query1=0&-as_query2=0&-as_query3=0"); - return; - } - } return; } // end of "REFRESH" switch (channelUID.getId()) { diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java index f0ab97e553..ea43387e15 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java @@ -692,6 +692,13 @@ public class IpCameraHandler extends BaseThingHandler { } catch (Exception e) { cameraConfigError("Exception when starting server. Try changing the Server Port to another number."); } + if (thing.getThingTypeUID().getId().equals(INSTAR_THING)) { + logger.debug("Setting up the Alarm Server settings in the camera now"); + sendHttpGET( + "/param.cgi?cmd=setmdalarm&-aname=server2&-switch=on&-interval=1&cmd=setalarmserverattr&-as_index=3&-as_server=" + + hostIp + "&-as_port=" + cameraConfig.getServerPort() + + "&-as_path=/instar&-as_queryattr1=&-as_queryval1=&-as_queryattr2=&-as_queryval2=&-as_queryattr3=&-as_queryval3=&-as_activequery=1&-as_auth=0&-as_query1=0&-as_query2=0&-as_query3=0"); + } } }