Onvif snapshot on Windows10 with Node-Red v2.1.3 and Tapo c100 IP-camera

Hi to all!
I installed node-red on my Windows 10 PC, and I'm trying to get some snapshots from my Tapo-C100 IP camera using the Onvif node. I know from iSpy and VLC media player that the working IP for this camera are the following ones:
http://192.168.1.140:2020/onvif/device_service (for Onvif)
stream: rtsp://username:password@IP Address:554/stream1 (for ffmpeg)

Till now, I can't get any Image from my workflow using those IP-Addresses.
when I deploy the workspace, I always get the following error once:
"Input should be a buffer or a base64 string or a Jimp image (containing a jpg or png image). Then I get the result, which is shown on the screenshot "Worksheet_Onvif.jpeg"


The HTML Template node hast the following setting:
img width="1280" alt="8015 ONVIF" src="{{msg._payload.image.base64}}

I noticed that the msg of the onvif node had another argument called "_payload". If I try to read the value of the normal Payload it gives me "Null" and if I read the one of the argument "_Payload" I get the following: msg._payload : number
1644957187406. The problem is that I can't get any image on my Home screen (see the attached image). it also doesn't matter if I use the "onvif/device_service" behind the IP-Address or not. If I install the "node-red-contrib-ffmpeg" module, my node red won't start after that! any explanation?

I tried to convert the value I got from _Payload using the BASE64 node but whitout success, and I'm not even short that this is the image coming from the IP_Camera.

Please, can someone lend me a hand on this issue?
Is there another easy method to get some snapshots from IP-Cameras using Node-Red.
Thank you in advance
Regards
Tades

Here is the configuration of the Onvif-Block


and the home screen look as follow:

Hi @tades,
Have you already tried to put a debug node at the output of that snapshot node? Then you can see what kind of data you get. Don't know how that snapshot node works, but it could e.g. that it returns an access denied html page or whatever...

Yes there are a few other options:

  • You put that url in the http-request node, and set output type to 'buffer' (to avoid messing up your data)
  • You could have a look at my node-red-contrib-onvif-nodes. They are not available on npm yet, so you need to install them via the npm command that you can find at the top of my Github readme page

Bart

1 Like

Hi Bart,
thank you for the support.
yes I put a debug node at the snapshot node and the argument were, the name, the payload, then _payload. Payload gives "Null" and _Payload gives a number back. I suppose this number can be an encoded image, but I'm not that sure, since I tried to convert it without success. In any case, the output is the same as the one you can see on the right side of the "Worksheet_onvif" screenshot above.

I will try your second suggestion in the evening and give you the feed-back.
to be sure I understood you correctly, I have to install them via the commande windows using the npm command and after that I would be able to use you nodes in the node-red interface?

thanks again
Regards,

Tades

Do you mean a single number? I assume not because that would be a very highly compressed image :wink:
Do you mean a long string containing all kind if weird characters and numbers? Perhaps you can copy such a value (via the 'copy value' button in the debug sidebar) and share it here?

Yes, go to your .node-red folder (via command line), execute there that command, restart node-red, and refresh your browser window. Then it should be in your palette.


Hi Bart,
Here is the screenshot you asked for. You can see all the arguments which are given back. The error at the end is odd. The snapshot is just a captured image from a whole streamed image, and I thought it should be related to the protocol and not the device.
is it possible for the device to be able to use the Onvif protocol but not support snapshot?

I just did it, and it was intall successfully. I will play with it and give you the feed-back how it goes.
thank you

Tades

Tades,
Where did you get that url? Because it doesn't really look like a snapshot url to me. But I might be mistaken...

From this discussion it looks to me that your cam doesn't have an http endpoint, so you cannot simply send http requests to it to get snapshot images.

So they propose to open an rtsp stream (via ffmpeg), and then you need to get snapshot images from that stream.

That would indeed work, but you will be streaming a lot of data (audio and video) to Node-RED. Which might be not a problem when you want to get snapshot images continiously. On the other hand if you want to capture only a single image, then this will be quite some overhead (because you will have a live stream from your camera).

Is it correct what I am saying? Because in that case none of the mentioned nodes above will work. Then we need to switch e.g. to the node-red-contrib-ffmpeg-spawn node, and extract the I-frames (to reduce the cpu/memory).

Hi Bart!

Sorry, I'm not good in Network, I don't know what is the http endpoint. I got the url from iSpy using Onvif protocol, and it worked there fine. That it why I thought it should work fine in Node-red too. I read the discussion you mentioned in your message, and they say there clearly that the Tapo-C200 doesn't have that HTTP endpoint.
Here are the screenshot of the iSpy interface, where the url work fine:


Yes, I want to get snapshot image continuously, and I even tried to download the "node-red-contrib-ffmpeg" node, but then when I installed it, I got a kind of conflict and my node-red can't start anymore. Which node can I use to get the stream with the rtps protocol?
I haven't got the chance to test your block yet, but will do it tomorrow in the evening.
Thank you again.

In this case my onvif nodes will also not work. Indeed my nodes also fetch the snapshot image via a http request, since the Onvif protocol returns the http url...

You should use the node-red-contrib-ffmpeg-spawn node. Since it is also not available on npm yet, you should install it with the commands on the readme page. And of course ffmpeg should also be installed.

You should have a look at this discussion, which might be a good starting point.

Hello Bart!
thank you very much the support you gave the last time with the issue I had to stream videos on node red using the Tapo C100 camera.
I wanted now to ask if you know a way to save a streamed video on a defined path (of the computer, for example). I mean a way to save the snapshot images (or the whole stream coming from the IP-Camera) which are being continuously posted on node red board in a defined path (on the local drive c for example)
any hint will be welcome.
thank you in advance for all.
Tades

Then you should have a look here

1 Like