]> git.basschouten.com Git - openhab-addons.git/commitdiff
[ipcamera] Fix warnings and improve logging (#15703)
authorKai Kreuzer <kai@openhab.org>
Tue, 17 Oct 2023 14:03:25 +0000 (16:03 +0200)
committerGitHub <noreply@github.com>
Tue, 17 Oct 2023 14:03:25 +0000 (16:03 +0200)
Signed-off-by: Kai Kreuzer <kai@openhab.org>
13 files changed:
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/ReolinkHandler.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraGroupHandler.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifDiscovery.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/rtsp/NettyRtspHandler.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/rtsp/RtspConnection.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/servlet/CameraServlet.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/servlet/IpCameraServlet.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/servlet/OpenStreams.java
bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/servlet/StreamOutput.java

index 48c3b4813be216d81b757dd5cfe3d24541b66c67..52b12d8909d63f7502e80906cbf5a464f3422abb 100644 (file)
@@ -39,7 +39,6 @@ import org.slf4j.LoggerFactory;
 /**
  * The {@link Ffmpeg} class is responsible for handling multiple ffmpeg conversions which are used for many tasks
  *
- *
  * @author Matthew Skinner - Initial contribution
  */
 
@@ -82,7 +81,7 @@ public class Ffmpeg {
     public void setKeepAlive(int numberOfEightSeconds) {
         // We poll every 8 seconds due to mjpeg stream requirement.
         if (keepAlive == -1 && numberOfEightSeconds > 1) {
-            return;// When set to -1 this will not auto turn off stream.
+            return; // When set to -1 this will not auto turn off stream.
         }
         keepAlive = numberOfEightSeconds;
     }
@@ -90,7 +89,7 @@ public class Ffmpeg {
     public void checkKeepAlive() {
         if (keepAlive == 1) {
             stopConverting();
-        } else if (keepAlive <= -1 && !getIsAlive()) {
+        } else if (keepAlive <= -1 && !isAlive()) {
             logger.warn("HLS stream was not running, restarting it now.");
             startConverting();
         }
@@ -124,65 +123,63 @@ public class Ffmpeg {
         public void run() {
             try {
                 process = Runtime.getRuntime().exec(commandArrayList.toArray(new String[commandArrayList.size()]));
-                Process localProcess = process;
-                if (localProcess != null) {
-                    InputStream errorStream = localProcess.getErrorStream();
-                    InputStreamReader errorStreamReader = new InputStreamReader(errorStream);
-                    BufferedReader bufferedReader = new BufferedReader(errorStreamReader);
-                    String line = null;
-                    while ((line = bufferedReader.readLine()) != null) {
-                        logger.trace("{}", line);
-                        switch (format) {
-                            case RTSP_ALARMS:
-                                if (line.contains("lavfi.")) {
-                                    // When the number of pixels that change are below the noise floor we need to look
-                                    // across frames to confirm it is motion and not noise.
-                                    if (countOfMotions < 10) {// Stop increasing otherwise it takes too long to go OFF
-                                        countOfMotions++;
+
+                InputStream errorStream = process.getErrorStream();
+                InputStreamReader errorStreamReader = new InputStreamReader(errorStream);
+                BufferedReader bufferedReader = new BufferedReader(errorStreamReader);
+                String line = null;
+                while ((line = bufferedReader.readLine()) != null) {
+                    logger.trace("{}", line);
+                    switch (format) {
+                        case RTSP_ALARMS:
+                            if (line.contains("lavfi.")) {
+                                // When the number of pixels that change are below the noise floor we need to look
+                                // across frames to confirm it is motion and not noise.
+                                if (countOfMotions < 10) { // Stop increasing otherwise it takes too long to go OFF
+                                    countOfMotions++;
+                                }
+                                if (countOfMotions > 9) {
+                                    ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
+                                } else if (countOfMotions > 4 && ipCameraHandler.motionThreshold.intValue() > 10) {
+                                    ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
+                                } else if (countOfMotions > 3 && ipCameraHandler.motionThreshold.intValue() > 15) {
+                                    ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
+                                } else if (countOfMotions > 2 && ipCameraHandler.motionThreshold.intValue() > 30) {
+                                    ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
+                                } else if (countOfMotions > 0 && ipCameraHandler.motionThreshold.intValue() > 89) {
+                                    ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
+                                    countOfMotions = 4; // Used to debounce the Alarm.
+                                }
+                            } else if (line.contains("speed=")) {
+                                if (countOfMotions > 0) {
+                                    if (ipCameraHandler.motionThreshold.intValue() > 89) {
+                                        countOfMotions--;
                                     }
-                                    if (countOfMotions > 9) {
-                                        ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
-                                    } else if (countOfMotions > 4 && ipCameraHandler.motionThreshold.intValue() > 10) {
-                                        ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
-                                    } else if (countOfMotions > 3 && ipCameraHandler.motionThreshold.intValue() > 15) {
-                                        ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
-                                    } else if (countOfMotions > 2 && ipCameraHandler.motionThreshold.intValue() > 30) {
-                                        ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
-                                    } else if (countOfMotions > 0 && ipCameraHandler.motionThreshold.intValue() > 89) {
-                                        ipCameraHandler.motionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
-                                        countOfMotions = 4;// Used to debounce the Alarm.
+                                    if (ipCameraHandler.motionThreshold.intValue() > 10) {
+                                        countOfMotions -= 2;
+                                    } else {
+                                        countOfMotions -= 4;
                                     }
-                                } else if (line.contains("speed=")) {
-                                    if (countOfMotions > 0) {
-                                        if (ipCameraHandler.motionThreshold.intValue() > 89) {
-                                            countOfMotions--;
-                                        }
-                                        if (ipCameraHandler.motionThreshold.intValue() > 10) {
-                                            countOfMotions -= 2;
-                                        } else {
-                                            countOfMotions -= 4;
-                                        }
-                                        if (countOfMotions <= 0) {
-                                            ipCameraHandler.noMotionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
-                                            countOfMotions = 0;
-                                        }
+                                    if (countOfMotions <= 0) {
+                                        ipCameraHandler.noMotionDetected(CHANNEL_FFMPEG_MOTION_ALARM);
+                                        countOfMotions = 0;
                                     }
-                                } else if (line.contains("silence_start")) {
-                                    ipCameraHandler.noAudioDetected();
-                                } else if (line.contains("silence_end")) {
-                                    ipCameraHandler.audioDetected();
                                 }
-                            case MJPEG:
-                            case SNAPSHOT:
-                                notFrozen = true;// RTSP_ALARMS, MJPEG and SNAPSHOT all set this to true, no break.
-                                break;
-                            default:
-                                break;
-                        }
+                            } else if (line.contains("silence_start")) {
+                                ipCameraHandler.noAudioDetected();
+                            } else if (line.contains("silence_end")) {
+                                ipCameraHandler.audioDetected();
+                            }
+                        case MJPEG:
+                        case SNAPSHOT:
+                            notFrozen = true; // RTSP_ALARMS, MJPEG and SNAPSHOT all set this to true, no break.
+                            break;
+                        default:
+                            break;
                     }
                 }
             } catch (IOException e) {
-                logger.warn("An IO error occured trying to start FFmpeg:{}", e.getMessage());
+                logger.warn("An IO error occurred trying to start FFmpeg: {}", e.getMessage());
             } finally {
                 switch (format) {
                     case GIF:
@@ -202,10 +199,10 @@ public class Ffmpeg {
         if (!ipCameraFfmpegThread.isAlive()) {
             ipCameraFfmpegThread = new IpCameraFfmpegThread();
             if (!password.isEmpty()) {
-                logger.debug("Starting ffmpeg with this command now:{}",
+                logger.debug("Starting ffmpeg with this command now: {}",
                         ffmpegCommand.replaceAll(password, "********"));
             } else {
-                logger.debug("Starting ffmpeg with this command now:{}", ffmpegCommand);
+                logger.debug("Starting ffmpeg with this command now: {}", ffmpegCommand);
             }
             ipCameraFfmpegThread.start();
             if (format.equals(FFmpegFormat.HLS)) {
@@ -217,7 +214,7 @@ public class Ffmpeg {
         }
     }
 
-    public boolean getIsAlive() {
+    public boolean isAlive() {
         Process localProcess = process;
         if (localProcess != null) {
             if (localProcess.isAlive() && notFrozen) {
@@ -230,7 +227,7 @@ public class Ffmpeg {
 
     public void stopConverting() {
         if (ipCameraFfmpegThread.isAlive()) {
-            logger.debug("Stopping ffmpeg {} now when keepalive is:{}", format, keepAlive);
+            logger.debug("Stopping ffmpeg {} now when keepalive is: {}", format, keepAlive);
             Process localProcess = process;
             if (localProcess != null) {
                 localProcess.destroyForcibly();
index 3dffcf72572d9110e50f22258f7d1e8d56125b98..2f582481f69174322840636c61df6f3e66294903 100644 (file)
@@ -120,12 +120,10 @@ public class ReolinkHandler extends ChannelDuplexHandler {
                         ipCameraHandler.logger.debug("The GetAiStateResponse could not be parsed");
                         return;
                     }
-                    if (aiResponse[0].value.dog_cat != null) {
-                        if (aiResponse[0].value.dog_cat.alarm_state == 1) {
-                            ipCameraHandler.setChannelState(CHANNEL_ANIMAL_ALARM, OnOffType.ON);
-                        } else {
-                            ipCameraHandler.setChannelState(CHANNEL_ANIMAL_ALARM, OnOffType.OFF);
-                        }
+                    if (aiResponse[0].value.dog_cat.alarm_state == 1) {
+                        ipCameraHandler.setChannelState(CHANNEL_ANIMAL_ALARM, OnOffType.ON);
+                    } else {
+                        ipCameraHandler.setChannelState(CHANNEL_ANIMAL_ALARM, OnOffType.OFF);
                     }
                     if (aiResponse[0].value.face.alarm_state == 1) {
                         ipCameraHandler.setChannelState(CHANNEL_FACE_DETECTED, OnOffType.ON);
index b56abd9e7efa4f63efb8c3b5457aef553228e6e9..fed48688493364befef20e70cc4309e9d9a8bbbd 100644 (file)
@@ -50,7 +50,6 @@ import org.slf4j.LoggerFactory;
  *
  * @author Matthew Skinner - Initial contribution
  */
-
 @NonNullByDefault
 public class IpCameraGroupHandler extends BaseThingHandler {
     private final Logger logger = LoggerFactory.getLogger(getClass());
index 4af99acb981222e7cccee1aa033711c4e5d2d22c..cab6e79c895c499497a2bd3628b66286c58e2b48 100644 (file)
@@ -123,7 +123,6 @@ import io.netty.util.concurrent.GlobalEventExecutor;
  *
  * @author Matthew Skinner - Initial contribution
  */
-
 @NonNullByDefault
 public class IpCameraHandler extends BaseThingHandler {
     public final Logger logger = LoggerFactory.getLogger(getClass());
@@ -245,7 +244,7 @@ public class IpCameraHandler extends BaseThingHandler {
                                         mjpegContentType = contentType;
                                         CameraServlet localServlet = servlet;
                                         if (localServlet != null) {
-                                            logger.debug("Setting Content-Type to:{}", contentType);
+                                            logger.debug("Setting Content-Type to: {}", contentType);
                                             localServlet.openStreams.updateContentType(contentType, boundary);
                                         }
                                     }
@@ -384,7 +383,7 @@ public class IpCameraHandler extends BaseThingHandler {
                             return; // don't auto close this as it is for the alarms.
                         }
                     }
-                    logger.debug("Closing an idle channel for camera:{}", cameraConfig.getIp());
+                    logger.debug("Closing an idle channel for camera: {}", cameraConfig.getIp());
                     ctx.close();
                 }
             }
@@ -511,15 +510,15 @@ public class IpCameraHandler extends BaseThingHandler {
     }
 
     private void checkCameraConnection() {
-        if (snapshotPolling) {// Currently polling a real URL for snapshots, so camera must be online.
+        if (snapshotPolling) { // Currently polling a real URL for snapshots, so camera must be online.
             return;
-        } else if (ffmpegSnapshotGeneration) {// Use RTSP stream creating snapshots to know camera is online.
+        } else if (ffmpegSnapshotGeneration) { // Use RTSP stream creating snapshots to know camera is online.
             Ffmpeg localSnapshot = ffmpegSnapshot;
-            if (localSnapshot != null && !localSnapshot.getIsAlive()) {
-                cameraCommunicationError("FFmpeg Snapshots Stopped: Check your camera can be reached.");
+            if (localSnapshot != null && !localSnapshot.isAlive()) {
+                cameraCommunicationError("FFmpeg Snapshots Stopped: Check that your camera can be reached.");
                 return;
             }
-            return;// ffmpeg snapshot stream is still alive
+            return; // ffmpeg snapshot stream is still alive
         }
 
         // if ONVIF cam also use connection state which is updated by regular messages to camera
@@ -614,7 +613,7 @@ public class IpCameraHandler extends BaseThingHandler {
 
         if (!basicAuth.isEmpty()) {
             if (useDigestAuth) {
-                logger.warn("Camera at IP:{} had both Basic and Digest set to be used", cameraConfig.getIp());
+                logger.warn("Camera at IP: {} had both Basic and Digest set to be used", cameraConfig.getIp());
                 setBasicAuth(false);
             } else {
                 request.headers().set("Authorization", "Basic " + basicAuth);
@@ -755,7 +754,7 @@ public class IpCameraHandler extends BaseThingHandler {
                     channelTrackingMap.remove(channelTracking.getRequestUrl());
                 }
                 if (channelTracking.getChannel().equals(channel)) {
-                    logger.debug("Open channel to camera is used for URL:{}", channelTracking.getRequestUrl());
+                    logger.debug("Open channel to camera is used for URL: {}", channelTracking.getRequestUrl());
                     oldChannel = false;
                 }
             }
@@ -882,17 +881,14 @@ public class IpCameraHandler extends BaseThingHandler {
                 ffmpegRecord = new Ffmpeg(this, format, cameraConfig.getFfmpegLocation(), inputOptions, rtspUri,
                         cameraConfig.getMp4OutOptions(), cameraConfig.getFfmpegOutput() + mp4Filename + ".mp4",
                         cameraConfig.getUser(), cameraConfig.getPassword());
-                Ffmpeg localRecord = ffmpegRecord;
-                if (localRecord != null) {
-                    localRecord.startConverting();
-                    if (mp4History.isEmpty()) {
-                        mp4History = mp4Filename;
-                    } else if (!"ipcamera".equals(mp4Filename)) {
-                        mp4History = mp4Filename + "," + mp4History;
-                        if (mp4HistoryLength > 49) {
-                            int endIndex = mp4History.lastIndexOf(",");
-                            mp4History = mp4History.substring(0, endIndex);
-                        }
+                ffmpegRecord.startConverting();
+                if (mp4History.isEmpty()) {
+                    mp4History = mp4Filename;
+                } else if (!"ipcamera".equals(mp4Filename)) {
+                    mp4History = mp4Filename + "," + mp4History;
+                    if (mp4HistoryLength > 49) {
+                        int endIndex = mp4History.lastIndexOf(",");
+                        mp4History = mp4History.substring(0, endIndex);
                     }
                 }
                 setChannelState(CHANNEL_MP4_HISTORY, new StringType(mp4History));
@@ -930,10 +926,7 @@ public class IpCameraHandler extends BaseThingHandler {
                 }
                 ffmpegRtspHelper = new Ffmpeg(this, format, cameraConfig.getFfmpegLocation(), inputOptions, input,
                         filterOptions, "-f null -", cameraConfig.getUser(), cameraConfig.getPassword());
-                localAlarms = ffmpegRtspHelper;
-                if (localAlarms != null) {
-                    localAlarms.startConverting();
-                }
+                ffmpegRtspHelper.startConverting();
                 break;
             case MJPEG:
                 if (ffmpegMjpeg == null) {
@@ -1429,7 +1422,7 @@ public class IpCameraHandler extends BaseThingHandler {
                 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
                         "Camera refused connection on ONVIF ports.");
             }
-            logger.debug("About to connect to the IP Camera using the ONVIF PORT at IP:{}:{}", cameraConfig.getIp(),
+            logger.debug("About to connect to the IP Camera using the ONVIF PORT at IP: {}:{}", cameraConfig.getIp(),
                     cameraConfig.getOnvifPort());
             onvifCamera.connect(thing.getThingTypeUID().getId().equals(ONVIF_THING));
             return;
@@ -1448,7 +1441,7 @@ public class IpCameraHandler extends BaseThingHandler {
     }
 
     public void cameraConfigError(String reason) {
-        // wont try to reconnect again due to a config error being the cause.
+        // won't try to reconnect again due to a config error being the cause.
         updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, reason);
         dispose();
     }
@@ -1456,7 +1449,7 @@ public class IpCameraHandler extends BaseThingHandler {
     public void cameraCommunicationError(String reason) {
         // will try to reconnect again as camera may be rebooting.
         updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, reason);
-        if (isOnline) {// if already offline dont try reconnecting in 6 seconds, we want 30sec wait.
+        if (isOnline) { // if already offline dont try reconnecting in 6 seconds, we want 30sec wait.
             resetAndRetryConnecting();
         }
     }
@@ -1640,13 +1633,13 @@ public class IpCameraHandler extends BaseThingHandler {
         }
         if (ffmpegMotionAlarmEnabled || ffmpegAudioAlarmEnabled) {
             localFfmpeg = ffmpegRtspHelper;
-            if (localFfmpeg == null || !localFfmpeg.getIsAlive()) {
+            if (localFfmpeg == null || !localFfmpeg.isAlive()) {
                 setupFfmpegFormat(FFmpegFormat.RTSP_ALARMS);
             }
         }
         // check if the thread has frozen due to camera doing a soft reboot
         localFfmpeg = ffmpegMjpeg;
-        if (localFfmpeg != null && !localFfmpeg.getIsAlive()) {
+        if (localFfmpeg != null && !localFfmpeg.isAlive()) {
             logger.debug("MJPEG was not being produced by FFmpeg when it should have been, restarting FFmpeg.");
             setupFfmpegFormat(FFmpegFormat.MJPEG);
         }
@@ -1871,7 +1864,7 @@ public class IpCameraHandler extends BaseThingHandler {
             localFfmpeg.stopConverting();
             ffmpegSnapshot = null;
         }
-        if (!thing.getThingTypeUID().getId().equals(GENERIC_THING)) {// generic cameras do not have ONVIF support
+        if (!thing.getThingTypeUID().getId().equals(GENERIC_THING)) { // generic cameras do not have ONVIF support
             onvifCamera.disconnect();
         }
         openChannels.close();
index a3f49a9ebb5ff2eadf59f7bd6daa85567d39b9a8..f4d124a6320583978268eaf38a84941f4794eb2c 100644 (file)
@@ -28,7 +28,6 @@ import io.netty.util.ReferenceCountUtil;
 /**
  * The {@link OnvifCodec} is used by Netty to decode Onvif traffic into message Strings.
  *
- *
  * @author Matthew Skinner - Initial contribution
  */
 @NonNullByDefault
@@ -66,11 +65,11 @@ public class OnvifCodec extends ChannelDuplexHandler {
         }
         if (evt instanceof IdleStateEvent) {
             IdleStateEvent e = (IdleStateEvent) evt;
-            logger.trace("IdleStateEvent received {}", e.state());
+            logger.trace("IdleStateEvent received: {}", e.state());
             onvifConnection.setIsConnected(false);
             ctx.close();
         } else {
-            logger.trace("Other ONVIF netty channel event occured {}", evt);
+            logger.trace("Other ONVIF netty channel event occurred: {}", evt);
         }
     }
 
index 70b830ab394b2f70b3e301f0753050d0d0ce94d7..bbc5bec9d1098f0b33b30f1048b039207c6bfce6 100644 (file)
@@ -67,8 +67,6 @@ import io.netty.handler.timeout.IdleStateHandler;
 /**
  * The {@link OnvifConnection} This is a basic Netty implementation for connecting and communicating to ONVIF cameras.
  *
- *
- *
  * @author Matthew Skinner - Initial contribution
  */
 
@@ -146,7 +144,7 @@ public class OnvifConnection {
     private Float tiltRangeMax = 1.0f;
     private Float zoomMin = 0.0f;
     private Float zoomMax = 1.0f;
-    // These hold the PTZ values for updating Openhabs controls in 0-100 range
+    // These hold the PTZ values for updating openHABs controls in 0-100 range
     private Float currentPanPercentage = 0.0f;
     private Float currentTiltPercentage = 0.0f;
     private Float currentZoomPercentage = 0.0f;
@@ -308,7 +306,7 @@ public class OnvifConnection {
     }
 
     public void processReply(String message) {
-        logger.trace("Onvif reply is:{}", message);
+        logger.trace("ONVIF reply is: {}", message);
         if (message.contains("PullMessagesResponse")) {
             eventRecieved(message);
         } else if (message.contains("RenewResponse")) {
@@ -317,7 +315,7 @@ public class OnvifConnection {
             setIsConnected(true);
             sendOnvifRequest(RequestType.GetCapabilities, deviceXAddr);
             parseDateAndTime(message);
-            logger.debug("Openhabs UTC dateTime is:{}", getUTCdateTime());
+            logger.debug("openHAB UTC dateTime is: {}", getUTCdateTime());
         } else if (message.contains("GetCapabilitiesResponse")) {// 2nd to be sent.
             parseXAddr(message);
             sendOnvifRequest(RequestType.GetProfiles, mediaXAddr);
@@ -358,7 +356,7 @@ public class OnvifConnection {
             logger.debug("ptzNodeToken={}", ptzNodeToken);
             sendPTZRequest(RequestType.GetConfigurations);
         } else if (message.contains("GetDeviceInformationResponse")) {
-            logger.debug("GetDeviceInformationResponse recieved");
+            logger.debug("GetDeviceInformationResponse received");
         } else if (message.contains("GetSnapshotUriResponse")) {
             snapshotUri = removeIPfromUrl(Helper.fetchXML(message, ":MediaUri", ":Uri"));
             logger.debug("GetSnapshotUri:{}", snapshotUri);
@@ -387,7 +385,7 @@ public class OnvifConnection {
             index = url.indexOf("/", index + 2);
         }
         if (index == -1) {
-            logger.debug("We hit an issue parsing url:{}", url);
+            logger.debug("We hit an issue parsing url: {}", url);
             return "";
         }
         return url.substring(index);
@@ -399,7 +397,7 @@ public class OnvifConnection {
         if (startIndex != -1 && endIndex != -1) {
             return url.substring(startIndex, endIndex);
         }
-        logger.debug("We hit an issue extracting IP:PORT from url:{}", url);
+        logger.debug("We hit an issue extracting IP:PORT from url: {}", url);
         return "";
     }
 
@@ -421,17 +419,17 @@ public class OnvifConnection {
         String temp = Helper.fetchXML(message, "<tt:Device", "tt:XAddr");
         if (!temp.isEmpty()) {
             deviceXAddr = temp;
-            logger.debug("deviceXAddr:{}", deviceXAddr);
+            logger.debug("deviceXAddr: {}", deviceXAddr);
         }
         temp = Helper.fetchXML(message, "<tt:Events", "tt:XAddr");
         if (!temp.isEmpty()) {
             subscriptionXAddr = eventXAddr = temp;
-            logger.debug("eventsXAddr:{}", eventXAddr);
+            logger.debug("eventsXAddr: {}", eventXAddr);
         }
         temp = Helper.fetchXML(message, "<tt:Media", "tt:XAddr");
         if (!temp.isEmpty()) {
             mediaXAddr = temp;
-            logger.debug("mediaXAddr:{}", mediaXAddr);
+            logger.debug("mediaXAddr: {}", mediaXAddr);
         }
 
         ptzXAddr = Helper.fetchXML(message, "<tt:PTZ", "tt:XAddr");
@@ -453,7 +451,7 @@ public class OnvifConnection {
             }
             ipCameraHandler.removeChannels(removeChannels);
         } else {
-            logger.debug("ptzXAddr:{}", ptzXAddr);
+            logger.debug("ptzXAddr: {}", ptzXAddr);
         }
     }
 
@@ -464,7 +462,7 @@ public class OnvifConnection {
         String day = Helper.fetchXML(message, "UTCDateTime", "Day>");
         String month = Helper.fetchXML(message, "UTCDateTime", "Month>");
         String year = Helper.fetchXML(message, "UTCDateTime", "Year>");
-        logger.debug("Cameras  UTC dateTime is:{}-{}-{}T{}:{}:{}", year, month, day, hour, minute, second);
+        logger.debug("Camera  UTC dateTime is: {}-{}-{}T{}:{}:{}", year, month, day, hour, minute, second);
     }
 
     private String getUTCdateTime() {
@@ -497,7 +495,7 @@ public class OnvifConnection {
     }
 
     public void sendOnvifRequest(RequestType requestType, String xAddr) {
-        logger.trace("Sending ONVIF request:{}", requestType);
+        logger.trace("Sending ONVIF request: {}", requestType);
         String security = "";
         String extraEnvelope = "";
         String headerTo = "";
@@ -565,7 +563,7 @@ public class OnvifConnection {
             bootstrap = localBootstap;
         }
         if (!mainEventLoopGroup.isShuttingDown()) {
-            bootstrap.connect(new InetSocketAddress(ipAddress, onvifPort)).addListener(new ChannelFutureListener() {
+            localBootstap.connect(new InetSocketAddress(ipAddress, onvifPort)).addListener(new ChannelFutureListener() {
 
                 @Override
                 public void operationComplete(@Nullable ChannelFuture future) {
@@ -576,15 +574,16 @@ public class OnvifConnection {
                         connectError = false;
                         Channel ch = future.channel();
                         ch.writeAndFlush(request);
-                    } else { // an error occured
+                    } else { // an error occurred
                         if (future.isDone() && !future.isCancelled()) {
                             Throwable cause = future.cause();
+                            String msg = cause.getMessage();
                             logger.trace("connect failed - cause {}", cause.getMessage());
                             if (cause instanceof ConnectTimeoutException) {
                                 logger.debug("Camera is not reachable on IP {}", ipAddress);
                                 connectError = true;
-                            } else if ((cause instanceof ConnectException)
-                                    && cause.getMessage().contains("Connection refused")) {
+                            } else if ((cause instanceof ConnectException) && msg != null
+                                    && msg.contains("Connection refused")) {
                                 logger.debug("Camera ONVIF port {} is refused.", onvifPort);
                                 refusedError = true;
                             }
@@ -616,7 +615,7 @@ public class OnvifConnection {
         } else {// 192.168.1.1
             ipAddress = url;
             deviceXAddr = "http://" + ipAddress + "/onvif/device_service";
-            logger.debug("No Onvif Port found when parsing:{}", url);
+            logger.debug("No ONVIF Port found when parsing: {}", url);
             return;
         }
         deviceXAddr = "http://" + ipAddress + ":" + onvifPort + "/onvif/device_service";
@@ -644,7 +643,7 @@ public class OnvifConnection {
         }
         String dataName = Helper.fetchXML(eventMessage, "tt:Data", "Name=\"");
         String dataValue = Helper.fetchXML(eventMessage, "tt:Data", "Value=\"");
-        logger.debug("Onvif Event Topic:{}, Data:{}, Value:{}", topic, dataName, dataValue);
+        logger.debug("ONVIF Event Topic: {}, Data: {}, Value: {}", topic, dataName, dataValue);
         switch (topic) {
             case "RuleEngine/CellMotionDetector/Motion":
                 if ("true".equals(dataValue)) {
@@ -767,7 +766,7 @@ public class OnvifConnection {
                 }
                 break;
             default:
-                logger.debug("Please report this camera has an un-implemented ONVIF event. Topic:{}", topic);
+                logger.debug("Please report this camera has an un-implemented ONVIF event. Topic: {}", topic);
         }
         sendOnvifRequest(RequestType.Renew, subscriptionXAddr);
     }
@@ -833,7 +832,7 @@ public class OnvifConnection {
             if (startLookingFromIndex >= 0) {
                 temp = Helper.fetchXML(message.substring(startLookingFromIndex), heading, key);
                 if (!temp.isEmpty()) {
-                    logger.trace("String was found:{}", temp);
+                    logger.trace("String was found: {}", temp);
                     results.add(temp);
                 } else {
                     return results;// key string must not exist so stop looking.
@@ -879,7 +878,7 @@ public class OnvifConnection {
             currentPanCamValue = Float.parseFloat(result.substring(beginIndex + 3, endIndex));
             currentPanPercentage = (((panRangeMin - currentPanCamValue) * -1) / ((panRangeMin - panRangeMax) * -1))
                     * 100;
-            logger.debug("Pan is updating to:{} and the cam value is {}", Math.round(currentPanPercentage),
+            logger.debug("Pan is updating to: {} and the cam value is {}", Math.round(currentPanPercentage),
                     currentPanCamValue);
         } else {
             logger.warn(
@@ -893,7 +892,7 @@ public class OnvifConnection {
             currentTiltCamValue = Float.parseFloat(result.substring(beginIndex + 3, endIndex));
             currentTiltPercentage = (((tiltRangeMin - currentTiltCamValue) * -1) / ((tiltRangeMin - tiltRangeMax) * -1))
                     * 100;
-            logger.debug("Tilt is updating to:{} and the cam value is {}", Math.round(currentTiltPercentage),
+            logger.debug("Tilt is updating to: {} and the cam value is {}", Math.round(currentTiltPercentage),
                     currentTiltCamValue);
         } else {
             return;
@@ -904,7 +903,7 @@ public class OnvifConnection {
         if (beginIndex >= 0 && endIndex >= 0) {
             currentZoomCamValue = Float.parseFloat(result.substring(beginIndex + 3, endIndex));
             currentZoomPercentage = (((zoomMin - currentZoomCamValue) * -1) / ((zoomMin - zoomMax) * -1)) * 100;
-            logger.debug("Zoom is updating to:{} and the cam value is {}", Math.round(currentZoomPercentage),
+            logger.debug("Zoom is updating to: {} and the cam value is {}", Math.round(currentZoomPercentage),
                     currentZoomCamValue);
         } else {
             return;
@@ -974,7 +973,7 @@ public class OnvifConnection {
             } catch (InterruptedException e) {
                 logger.warn("ONVIF was not cleanly shutdown, due to being interrupted");
             } finally {
-                logger.debug("Eventloop is shutdown:{}", mainEventLoopGroup.isShutdown());
+                logger.debug("Eventloop is shutdown: {}", mainEventLoopGroup.isShutdown());
                 bootstrap = null;
                 threadPool.shutdown();
             }
index 7dbaf9242605a0c9eaccada466402d8c02d14fd8..b98238b14cc182f01ea0cbe4529159e2aab32666 100644 (file)
@@ -61,7 +61,6 @@ import io.netty.util.concurrent.GlobalEventExecutor;
  *
  * @author Matthew Skinner - Initial contribution
  */
-
 @NonNullByDefault
 @io.netty.channel.ChannelHandler.Sharable
 public class OnvifDiscovery {
@@ -110,7 +109,7 @@ public class OnvifDiscovery {
         String temp = url;
         BigDecimal onvifPort = new BigDecimal(80);
 
-        logger.info("Camera found at xAddr:{}", url);
+        logger.info("Camera found at xAddr: {}", url);
         int endIndex = temp.indexOf(" ");// Some xAddr have two urls with a space in between.
         if (endIndex > 0) {
             temp = temp.substring(0, endIndex);// Use only the first url from now on.
@@ -139,7 +138,7 @@ public class OnvifDiscovery {
     void processCameraReplys() {
         for (DatagramPacket packet : listOfReplys) {
             String xml = packet.content().toString(CharsetUtil.UTF_8);
-            logger.trace("Device replied to discovery with:{}", xml);
+            logger.trace("Device replied to discovery with: {}", xml);
             String xAddr = Helper.fetchXML(xml, "", "d:XAddrs>");// Foscam <wsdd:XAddrs> and all other brands <d:XAddrs>
             if (!xAddr.isEmpty()) {
                 searchReply(xAddr, xml);
@@ -150,7 +149,7 @@ public class OnvifDiscovery {
                 } catch (IOException e) {
                     brand = "onvif";
                 }
-                logger.info("Possible {} camera found at:{}", brand, packet.sender().getHostString());
+                logger.debug("Possible {} camera found at: {}", brand, packet.sender().getHostString());
                 if ("reolink".equals(brand)) {
                     ipCameraDiscoveryService.newCameraFound(brand, packet.sender().getHostString(), 8000);
                 } else {
@@ -200,7 +199,7 @@ public class OnvifDiscovery {
                 response += temp;
             }
             reply.close();
-            logger.trace("Cameras Login page is:{}", response);
+            logger.trace("Cameras Login page is: {}", response);
             brand = checkForBrand(response);
         } catch (MalformedURLException e) {
         } finally {
index 40b1b893bb9484658a4cd6ee2fe8675da5aa934a..59632d4f11e637e11a2c7e4e835c6d27b1e669cc 100644 (file)
@@ -22,7 +22,6 @@ import io.netty.handler.codec.http.LastHttpContent;
 /**
  * The {@link NettyRtspHandler} is used to decode RTSP traffic into message Strings.
  *
- *
  * @author Matthew Skinner - Initial contribution
  */
 @NonNullByDefault
index e08c091e8dc339e0778a18983e7549066a31d9fa..e21f50de4dc4912b24e7b2878b419b2c3c05bee2 100644 (file)
@@ -43,7 +43,6 @@ import io.netty.handler.timeout.IdleStateHandler;
  * The {@link RtspConnection} is a WIP and not currently used, but will talk directly to RTSP and collect information
  * about the camera and streams.
  *
- *
  * @author Matthew Skinner - Initial contribution
  */
 @NonNullByDefault
index cfe098586458eeae7afbd8d2a8f187d297e89699..973f9a930b694cb86f5869ed7dee756224ac5012 100644 (file)
@@ -109,7 +109,7 @@ public class CameraServlet extends IpCameraServlet {
                 Ffmpeg localFfmpeg = handler.ffmpegHLS;
                 if (localFfmpeg == null) {
                     handler.setupFfmpegFormat(FFmpegFormat.HLS);
-                } else if (!localFfmpeg.getIsAlive()) {
+                } else if (!localFfmpeg.isAlive()) {
                     localFfmpeg.startConverting();
                 } else {
                     localFfmpeg.setKeepAlive(8);
index ef6f86faaa5ba106904fe4dc92a8ea23eb947f3c..3532814cb33555942d21dfd32970310b7f1dc733 100644 (file)
@@ -63,7 +63,7 @@ public abstract class IpCameraServlet extends HttpServlet {
             httpService.registerServlet("/ipcamera/" + handler.getThing().getUID().getId(), this, initParameters,
                     httpService.createDefaultHttpContext());
         } catch (Exception e) {
-            logger.warn("Registering servlet failed:{}", e.getMessage());
+            logger.warn("Registering servlet failed: {}", e.getMessage());
         }
     }
 
index f479e105212939c9ebb473135dcd1445fa887c81..90b82ced925d96dd614bb16a44f2f9791d281e3a 100644 (file)
@@ -22,10 +22,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
  * The {@link OpenStreams} Keeps track of all open mjpeg streams so the byte[] can be given to all FIFO buffers to allow
  * 1 to many streams without needing to open more than 1 source stream.
  *
- *
  * @author Matthew Skinner - Initial contribution
  */
-
 @NonNullByDefault
 public class OpenStreams {
     private List<StreamOutput> openStreams = Collections.synchronizedList(new ArrayList<StreamOutput>());
index 5d41feae58bd7d3c136f7ab41310c0b3ef1169ed..0b3a4643531208190d269a64f167712de74eb4e9 100644 (file)
@@ -28,7 +28,6 @@ import org.slf4j.LoggerFactory;
  *
  * @author Matthew Skinner - Initial contribution
  */
-
 @NonNullByDefault
 public class StreamOutput {
     public final Logger logger = LoggerFactory.getLogger(getClass());
@@ -79,7 +78,7 @@ public class StreamOutput {
         try {
             fifo.add(frame);
         } catch (IllegalStateException e) {
-            logger.debug("FIFO buffer has run out of space:{}", e.getMessage());
+            logger.debug("FIFO buffer has run out of space: {}", e.getMessage());
             fifo.remove();
             fifo.add(frame);
         }