This commit is contained in:
2025-03-10 16:48:59 +08:00
commit 396980136a
47 changed files with 3375 additions and 0 deletions

120
cgi-bin/mj-endpoints.cgi Executable file
View File

@ -0,0 +1,120 @@
#!/usr/bin/haserl
<%in p/common.cgi %>
<% page_title="Majestic Endpoints" %>
<%in p/header.cgi %>
<div class="row row-cols-1 row-cols-md-2 row-cols-xl-3 g-4 mb-4">
<div class="col">
<h3>Video</h3>
<dl>
<dt class="cp2cb">rtsp://root:12345@<%= $network_address %>/stream=0</dt>
<dd>RTSP main stream.</dd>
<dt class="cp2cb">rtsp://root:12345@<%= $network_address %>/stream=1</dt>
<dd>RTSP sub stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/mjpeg</dt>
<dd>MJPEG video stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/video.mp4</dt>
<dd>MP4 video stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/hls</dt>
<dd>HLS live-streaming in web browser.</dd>
<dt class="cp2cb">http://<%= $network_address %>/mjpeg.html</dt>
<dd>MJPEG live-streaming in web browser.</dd>
</dl>
</div>
<div class="col">
<h3>Audio</h3>
<dl>
<dt class="cp2cb">http://<%= $network_address %>/audio.opus</dt>
<dd>Opus audio stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/audio.m4a</dt>
<dd>AAC audio stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/audio.pcm</dt>
<dd>Raw PCM audio stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/audio.alaw</dt>
<dd>A-law compressed audio stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/audio.ulaw</dt>
<dd>μ-law compressed audio stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/audio.g711a</dt>
<dd>G.711 A-law audio stream.</dd>
<dt class="cp2cb">http://<%= $network_address %>/play_audio</dt>
<dd>Play audio file on camera speaker.</dd>
</dl>
</div>
<div class="col">
<h3>Images</h3>
<dl>
<dt class="cp2cb">http://<%= $network_address %>/image.jpg</dt>
<dd>Snapshot in JPEG format.</dd>
<dt class="cp2cb">http://<%= $network_address %>/image.heif</dt>
<dd>Snapshot in HEIF format.</dd>
<dt class="cp2cb">http://<%= $network_address %>/image.yuv420</dt>
<dd>Snapshot in YUV420 format.</dd>
</dl>
</div>
<div class="col">
<h3>Night</h3>
<dl>
<dt class="cp2cb">http://<%= $network_address %>/night/on</dt>
<dd>Turn on night mode.</dd>
<dt class="cp2cb">http://<%= $network_address %>/night/off</dt>
<dd>Turn off night mode.</dd>
<dt class="cp2cb">http://<%= $network_address %>/night/toggle</dt>
<dd>Toggle night mode.</dd>
<dt class="cp2cb">http://<%= $network_address %>/night/ircut</dt>
<dd>Toggle camera ircut.</dd>
<dt class="cp2cb">http://<%= $network_address %>/night/light</dt>
<dd>Toggle camera light.</dd>
</dl>
</div>
<div class="col">
<h3>Monitoring</h3>
<dl>
<dt class="cp2cb">http://<%= $network_address %>/api/v1/config.json</dt>
<dd>Default Majestic config in JSON format.</dd>
<dt class="cp2cb">http://<%= $network_address %>/api/v1/config.schema.json</dt>
<dd>Available Majestic settings in JSON format.</dd>
<dt><a href="https://github.com/openipc/wiki/blob/master/en/majestic-config.md">https://github.com/openipc/wiki</a></dt>
<dd>Available Majestic settings in YAML format.</dd>
<dt class="cp2cb">http://<%= $network_address %>/metrics</dt>
<dd>Node exporter for <a href="https://prometheus.io">Prometheus</a>.</dd>
</dl>
</div>
</div>
<script>
function initializeCopyToClipboard() {
document.querySelectorAll(".cp2cb").forEach(function (element) {
element.title = "Click to copy to clipboard";
element.addEventListener("click", function (event) {
event.target.preventDefault;
event.target.animate({ color: 'red' }, 500);
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(event.target.textContent).then(r => playChime(r));
} else {
let textArea = document.createElement("textarea");
textArea.value = event.target.textContent;
textArea.style.position = "fixed";
textArea.style.left = "-999999px";
textArea.style.top = "-999999px";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
return new Promise((res, rej) => {
document.execCommand('copy') ? res() : rej();
textArea.remove();
});
}
})
})
}
window.onload = function () {
initializeCopyToClipboard();
}
</script>
<%in p/footer.cgi %>