The Evolution of Connecting Cameras to the Cloud Service
We moved to a new office and bought some random CCTV cameras in the store. Our main task was to hang several cameras inside the office and on the street to observe the parking lot and the entrance to the office. It was also crucial for us to make each camera a reliable and safe device, accessible only by ourselves.
It would seem obvious to hire installers who can hang the cameras and set up video surveillance with access to camera footage. They just need to install the cameras in the right place at the right angle and register the public IP to each camera.
What’s next? We need to store the footage from cameras somewhere, so we need to install a DVR as well. It must be not only installed but also protected from possible theft or hacking. In addition, installing a DVR promises unnecessary costs that we’d want to avoid. As a result, we abandoned the idea of installing a DVR in favor of a cloud server that would solve all of our problems. Now it was necessary to figure out how to connect the cameras with it.
How to do this if the firmware on each camera remains default and the camera vendor server is poorly protected from third parties? According to HackMag, you can get unauthorized access to more than a million IP cameras. Very few camera installers change the default passwords to more secure ones, so hackers just need to search for authorization data by the name of the camera which is written on the case. As a result, the subscriber gets the password to their personal cloud, but at the same time, the default password remains the same, inviting the entire Internet to take a look at the footage from the camera.
Why do we even need a default cloud-based server for the camera vendor if we have our own server with Flussonic Watcher software? The only thing we need is to connect the cameras to it. But there is no input device on the camera where we could specify the address of the server. To solve this problem, we developed the Flussonic Agent software, which is included in the Watcher package - it extends the capabilities of a standard camera and makes it a safe device, ready to work with the server. Video from the camera goes straight into our video surveillance cloud. A unique secure password is set, the communication channel is encrypted, there is no need to install and protect the DVR - we’re saving a lot of money and nerve.
Connecting to the Network
So, we installed Flussonic Agent on our cameras, and now it’s waiting for a command from a mobile application to connect to the server. For that, each camera must be connected to the network. The problem may arise with those cameras that connect to the network only via Wi-Fi.
Accordingly, such cameras somehow need to get Wi-Fi authorization data. We can do this through WPS, and for this, we need to click on the appropriate activation button on the router. To do this, the router should be in our reach, but in our case, it hangs under the ceiling. Well then, we climbed the stepladder and with the risk of breaking our necks, pressed the needed button.
But then we came across the fact that some cameras do not support this mode of connection. So, we need to reach our cameras in a different way. Let’s see how this could be done.
Some of our cameras have microphones. We tried to record a special sequence of sound tones containing data for connecting the camera to the server, and play them to the camera using a mobile phone. This option is better than WPS; It allows us to communicate with cameras that are not yet connected to the network.
Only a few “buts” keep us from perfection: not all of our cameras have microphones. We also should take into account the cameras hanging on the street: the wind blows, the cars passing, and no signal can be heard.
Some of our cameras have SD cards on which you can record data for connecting to a network, but we dismissed this idea right away because we completely trust Steve Jobs, who said some time ago that we need to work with contactless and wireless technologies. Moving on!
What can each camera without exception do? Work with video signals, of course. We have collected a QR code that contains data (in our case, it’s network connection parameters). At first, we encountered some difficulties with this method as well.
First of all, the cheaper the camera is, the worse it analyzes the image with a QR code. Accordingly, the more complex the code and the more characters it contains, the less readable it will be for the camera. So it leaves us with a strictly limited amount of data we are able to write into it.
Second of all, how do we understand that the camera recognized a QR code? In a case of self-checkout counters in supermarkets, there’s a light indicator that shows whether the code has been read or not. There is no such indication on the cameras bought in the store (because clearly no one knew that the QR code would be shown to the camera), so we need some other kind of feedback from it. Some cameras have speakers that can play an audio signal, some of them have a light indication. It’s a bit more complicated with security cameras outside, which have neither of those output devices. But we found a way out - in this case, the camera can report its intermediate status to the server to which it is connected, and we will see it on the screen of our device.
So, we decided that we want to transfer data through the QR code to connect the cameras to our network and our cloud server. Now we need to integrate the QR code recognition algorithm into cameras. In order to do that, we need a stream of uncompressed frames from the sensor to drive it through the QR code recognition algorithm. In most cases, we don’t have the opportunity to receive the data from the sensor, since all the interaction between the sensor and the Internet occurs through a program written by the vendor of the camera or the manufacturer of the chipset, and we may not have access to it.
For this task, we have firmware for IP cameras called Flussonic Iris. Using that, we can get raw data from the sensor and send it to the hardware transcoder in a compressed form, suitable for transmission. We taught the camera how to read QR codes, but this is not the only task that Iris can solve. Re-flashing the camera gives us full control over a seemingly closed device - but that’s a whole another story.