Using "media" links in Leviton OmniTouch panels
AnsweredI am trying to add cameras to my Leviton (aka HAI) OmniTouch panels.
In the config for the OmniTouch panel, I am able to specify the URL, user (which is set to the "Live Viewer" role) and password, as described here.
But when I try to display the camera on the panel, it rarely—but sometimes does—work. I tried the same /media/ URLs in my browser, it just displays:
{"error":"4","errorString":"Too many opened connections","reply":null}
I just need a static URL for each camera to get 480p MJPEG (the only codec supported by the OmniTouch) transcode so I can walk up to the OmniTouch panel and check the cameras. I thought for sure putting in a URL like:
http://user:pass@0.1.2.3:7001/media/acbbccdd-2345-6789-cdef-123abcdef456.mpjpeg?resolution=480p&rt
would be all I'd need, but it seems there is some kind of connection limitation?! I checked the Audit Trail, and I see a few "Login" and "Watching live" entries, but I've only rarely seen a camera actually show up on the panel.
Any suggestions would be appreciated.
-
Official comment
Hi Eddy,
Please try the following URL:
rtsp://user:pass@<ip-address>:<port>/cameraId?codec=mjpeg&resolution=480p
Example:
rtsp://admin:12345@192.168.1.142:7001/34f15ac2-9725-7b53-7a21-6e58518e6faf?codec=mjpeg&resolution=480p
-
I wish RTSP was an option, but unfortunately it's not. From the documentation for the OmniTouch panels:
- OmniTouch touchscreens do not interact with the web server of the IP camera, but rather are able to interface directly with the raw MJPEG or JPEG video stream provided by most MJPEG and JPEG IP cameras.
- Generally, to access the stream there is an http query string that is part of the URL which instructs the camera to stream the MJPEG or JPEG images. To use a MJPEG or JPEG camera, you will need to find out what the query string is and use it to configure the camera. You can typically find this information on the web site for the camera manufacturer or in an API or Protocol document provided by the manufacturer. If the camera provides an MJPEG stream, the "Camera Type" must be configured as an MJPEG device. If the camera only provides still frame JPEG images, the "Camera Type" must be configured as a JPEG device.
Since both sub-channels of my cameras are already in-use (and neither of which is configured as MJPEG), my only hope is to be able to use the /media/ streams from the server.
I did notice this bug fix in the Monthly Patch (which I am not running) release notes:
- When trying to request video streams through API (using any /media/ call), the maxWebMTranscoders parameter limited the sessions to 2 even if the transcoding was not involved. Now the number of the non-transcoded streams that can be requested through API is unlimited and transcoded-ones are limited to maxWebMTranscoders (2 by default).
Could this be the issue?
0 -
It could. If you an provide me access to the WebAdmin of the system I might be able to modify something 'under the hood'.
You can share the public IP address and login credentials to <removed>.0 -
Sounds good.
I'll be anxious to see if a simple "under the hood" configuration change can fix this issue.
Thanks.
0 -
Hi Eddy,
I made some changes under the hood. Could you try it again?
0 -
Darn. Unfortunately, no change.
Just to make sure it wasn't something "odd" with the OmniTouch panels, I copy/pasted the URLs in to a web browser and confirmed that I could only occasionally see a 480p MJPEG, and if I hit the X button to stop streaming, then another tab would "start working". Otherwise, I get the same "Too many opened connections" message, and then eventually none of them work and they all return that message.
0 -
Hi Eddy,
That's disappointing. Allow me to discuss this internally and get back at you.
0 -
Just to add some more information to this thread... over the weekend I installed a fresh instance of build 30107 and the behavior remains unchanged.
I am curious to know if you've been able to reproduce this "Too many opened connections" error on one of your test systems?
0 -
Hi Eddy,
I noticed you disabled the user account you provided, but that is fine.
Can you share the output of the following API call?HTTP://<server-ip>:<port>/api/metrics
0 -
Here's the output of the /api/metrics call:
{
"error": "0",
"errorString": "",
"reply": {
"offlineStatus": {
"description": "How many times resources have switched to the offline state",
"value": 26
},
"p2pCounters": {
"description": "P2p statistics",
"value": {
"dataSentByMessageType": {
"description": "Amount of sent data in bytes by p2p message type",
"value": {
"alivePeers": 0,
"pushImpersistentBroadcastTransaction": 0,
"pushImpersistentUnicastTransaction": 0,
"pushTransactionData": 5427845,
"pushTransactionList": 0,
"resolvePeerNumberRequest": 0,
"resolvePeerNumberResponse": 0,
"start": 0,
"stop": 0,
"subscribeAll": 0,
"subscribeForDataUpdates": 0,
"unknown": 0
}
}
}
},
"progressiveDownloadingTranscoders": {
"description": "Amount of opened progressive downloading connections with trancoding",
"value": 0
},
"tcpConnections": {
"description": "Opened TCP connections",
"value": {
"hls": {
"description": "Amount of opened HLS connections",
"value": 0
},
"p2p": {
"description": "Amount of opened p2p connections",
"value": 2
},
"progressiveDownloading": {
"description": "Amount of opened progressive downloading connections",
"value": 0
},
"rtsp": {
"description": "Amount of opened RTSP connections",
"value": 1
},
"total": {
"description": "Total amount of opened TCP connections with any type",
"value": 8
},
"totalBytesSent": {
"description": "Total tcp bytes sent",
"value": 2137931208
}
}
},
"transactions": {
"description": "Database transactions statistics",
"value": {
"errors": {
"description": "Amount of transactions that can't be written to DB due to SQL error",
"value": 0
},
"local": {
"description": "Total amount of local transactions written. Local transactions are written to the DB but not synchronized to another servers. 'Local' always <= 'success'",
"value": 1
},
"logSize": {
"description": "Total size of transaction log in bytes",
"value": 282388
},
"success": {
"description": "Total amount of transactions successfully written.",
"value": 221
}
}
},
"transcoders": {
"description": "Amount of video transcoding threads (same as amount of encoders)",
"value": 0
}
}
}I'm happy to re-enable the user account credentials I provided to you guys if it would help in figuring out why this isn't working. I didn't know you were still using it.
One other piece of information that may be of interest: while I was reconfiguring the /media/ URLs in the OmniTouch panel configuration software, I noticed this behavior: there is a Test button for each camera that you add. For the first two /media/ URLs I added as cameras, the Test button worked. After that, the Test button stopped working (including for the two cameras that had previously worked) presumably because the server was now returning the "Too many opened connections" message.
0 -
Yes, please re-enable the connection for us.
The other information provided is pretty useful. Allow me to discuss this further internally.
0 -
I think I've figured out the problem: it looks like the Server may be generating mpjpeg streams and not mjpeg streams. The extra "p" seems important, and seems to imply that the API's /media/ links generate multi-part JPEG streams but not motion JPEG streams.
As I've mentioned, the OmniTouch panels only support MJPEG streams, so that explains why I'm not able to get this working.
While researching this, I found this discussion about MJPEG over HTTP Specification and looking at packet captures from the API, I don't see any headers like:
Content-Type: multipart/x-mixed-replace; boundary=which means the mpjpeg format generated by the API is slightly different from an mjpeg option.
Is there some "official" method where I should request support for MJPEG streams via the API?
0
Please sign in to leave a comment.
Comments
12 comments