]> git.basschouten.com Git - openhab-addons.git/commitdiff
[ipcamera] Add a check to see if FFmpeg is frozen for mjpeg creation (#13896)
authorMatthew Skinner <matt@pcmus.com>
Sat, 10 Dec 2022 12:54:22 +0000 (23:54 +1100)
committerGitHub <noreply@github.com>
Sat, 10 Dec 2022 12:54:22 +0000 (13:54 +0100)
* check if ffmpegMjpeg is frozen

Signed-off-by: Matthew Skinner <matt@pcmus.com>
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/Ffmpeg.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/InstarHandler.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java

index 3b3cbacdc0bb68b60f8fa0d6b4e4fbca7b629955..d8fbaf070b0e4a2b00350db8bc4c5b928e152559 100644 (file)
@@ -131,7 +131,7 @@ public class Ffmpeg {
                     BufferedReader bufferedReader = new BufferedReader(errorStreamReader);
                     String line = null;
                     while ((line = bufferedReader.readLine()) != null) {
-                        logger.debug("{}", line);
+                        logger.trace("{}", line);
                         switch (format) {
                             case RTSP_ALARMS:
                                 if (line.contains("lavfi.")) {
@@ -172,8 +172,9 @@ public class Ffmpeg {
                                 } else if (line.contains("silence_end")) {
                                     ipCameraHandler.audioDetected();
                                 }
+                            case MJPEG:
                             case SNAPSHOT:
-                                notFrozen = true;// RTSP_ALARMS and SNAPSHOT both set this to true as there is no break.
+                                notFrozen = true;// RTSP_ALARMS, MJPEG and SNAPSHOT all set this to true, no break.
                                 break;
                         }
                     }
index bdacdc168bfdfc5517c86f3afbeb52c4af89c65e..e2de2ff546212e909dafcf2943344efdd67ea120 100644 (file)
@@ -137,6 +137,16 @@ public class InstarHandler extends ChannelDuplexHandler {
                             && content.contains("response=\"200\";")) {// new
                         ipCameraHandler.newInstarApi = true;
                         ipCameraHandler.logger.debug("Alarm server sucessfully setup for a 2k+ Instar camera");
+                        if (ipCameraHandler.cameraConfig.getFfmpegInput().isEmpty()) {
+                            ipCameraHandler.rtspUri = "rtsp://" + ipCameraHandler.cameraConfig.getIp()
+                                    + "/livestream/12";
+                        }
+                        if (ipCameraHandler.cameraConfig.getMjpegUrl().isEmpty()) {
+                            ipCameraHandler.mjpegUri = "/livestream/12?action=play&media=mjpeg";
+                        }
+                        if (ipCameraHandler.cameraConfig.getSnapshotUrl().isEmpty()) {
+                            ipCameraHandler.snapshotUri = "/snap.cgi?chn=12";
+                        }
                     } else if (requestUrl.startsWith("/param.cgi?cmd=setmdalarm&-aname=server2&-switch=on&-interval=1")
                             && content.startsWith("[Succeed]set ok")) {
                         ipCameraHandler.newInstarApi = false;
index c424388da03c3f84e3698a3d1ed6db7a966333f7..d12b6a8cfd53726441820b2a35c25dbe521752d3 100644 (file)
@@ -906,9 +906,9 @@ public class IpCameraHandler extends BaseThingHandler {
             case MJPEG:
                 if (ffmpegMjpeg == null) {
                     if (inputOptions.isEmpty()) {
-                        inputOptions = "-hide_banner -loglevel warning";
+                        inputOptions = "-hide_banner";
                     } else {
-                        inputOptions += " -hide_banner -loglevel warning";
+                        inputOptions += " -hide_banner";
                     }
                     ffmpegMjpeg = new Ffmpeg(this, format, cameraConfig.getFfmpegLocation(), inputOptions, rtspUri,
                             cameraConfig.getMjpegOptions(), "http://127.0.0.1:" + SERVLET_PORT + "/ipcamera/"
@@ -1575,6 +1575,12 @@ public class IpCameraHandler extends BaseThingHandler {
                 setupFfmpegFormat(FFmpegFormat.RTSP_ALARMS);
             }
         }
+        // check if the thread has frozen due to camera doing a soft reboot
+        localFfmpeg = ffmpegMjpeg;
+        if (localFfmpeg != null && !localFfmpeg.getIsAlive()) {
+            logger.debug("MJPEG was not being produced by FFmpeg when it should have been, restarting FFmpeg.");
+            setupFfmpegFormat(FFmpegFormat.MJPEG);
+        }
         if (openChannels.size() > 10) {
             logger.debug("There are {} open Channels being tracked.", openChannels.size());
             cleanChannels();