{"id":14,"date":"2026-04-11T01:35:21","date_gmt":"2026-04-10T19:35:21","guid":{"rendered":"https:\/\/app.gusync.com\/index.php\/deviceguard-remote-viewer\/"},"modified":"2026-04-11T01:35:21","modified_gmt":"2026-04-10T19:35:21","slug":"deviceguard-remote-viewer","status":"publish","type":"page","link":"https:\/\/app.gusync.com\/index.php\/deviceguard-remote-viewer\/","title":{"rendered":"DeviceGuard Remote Viewer"},"content":{"rendered":"<div id=\"dgp-viewer-container\" class=\"dgp-remote-app dgp-viewer-mode\">\n\t<div class=\"dgp-remote-header\">\n\t\t<div class=\"dgp-remote-brand\">\ud83d\udee1\ufe0f DeviceGuard <span class=\"dgp-remote-mode\">VIEWER MODE<\/span><\/div>\n\n\t\t<div class=\"dgp-remote-status\" id=\"dgp-viewer-status\">\n\t\t\t<span class=\"dgp-status-dot\"><\/span>\n\t\t\t<span id=\"dgp-viewer-status-text\">Connecting...<\/span>\n\t\t<\/div>\n\n\t\t<div class=\"dgp-viewer-controls\">\n\t\t\t<label class=\"dgp-btn dgp-btn-outline dgp-btn-sm\" style=\"display:flex;align-items:center;gap:10px;\">\n\t\t\t\t<input type=\"checkbox\" id=\"dgp-control-toggle\" style=\"width:22px;height:22px;\">\n\t\t\t\t<span>Enable Control<\/span>\n\t\t\t<\/label>\n\t\t\t<button class=\"dgp-btn dgp-btn-outline dgp-btn-sm\" id=\"dgp-fullscreen-btn\">\n\t\t\t\tFullscreen\t\t\t<\/button>\n\t\t\t<button class=\"dgp-btn dgp-btn-danger dgp-btn-sm\" id=\"dgp-disconnect-btn\">\n\t\t\t\tDisconnect\t\t\t<\/button>\n\t\t<\/div>\n\t<\/div>\n\n\t\t\t<div class=\"dgp-remote-body dgp-centered\">\n\t\t\t<div class=\"dgp-alert dgp-alert-error\">\n\t\t\t\tInvalid or expired session. Please request a new session link.\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n\n<script>\n\/* v1.1.8 \u2014 Direct PHP injection of signaling config.\n * This is the most reliable method: PHP writes the values directly into the page\n * HTML before any JS runs, so webrtc-engine.js always has them regardless of\n * whether wp_localize_script fired correctly. *\/\nwindow.DGP_SIGNALING_URL  = \"wss:\\\/\\\/signal.gusync.com:3001\";\nwindow.DGP_VIEWER_TOKEN   = \"\";\n\n\/* Merge into DGP \/ DGP_Public objects so webrtc-engine.js reads them *\/\n(function () {\n\tvar url = window.DGP_SIGNALING_URL || '';\n\tif (url) {\n\t\tif (window.DGP)        { window.DGP.signaling_url        = window.DGP.signaling_url        || url; }\n\t\tif (window.DGP_Public) { window.DGP_Public.signaling_url = window.DGP_Public.signaling_url || url; }\n\t\tif (!window.DGP)        { window.DGP        = { signaling_url: url }; }\n\t\tif (!window.DGP_Public) { window.DGP_Public = { signaling_url: url }; }\n\t}\n})();\n<\/script>\n<script>\n\/* Autoplay fallback: if video.play() is rejected, show the overlay *\/\n(function () {\n\tfunction attachPlayFallback() {\n\t\tvar video   = document.getElementById('dgp-remote-video');\n\t\tvar overlay = document.getElementById('dgp-play-overlay');\n\t\tif (!video || !overlay) return;\n\n\t\tvideo.addEventListener('play', function () {\n\t\t\toverlay.style.display = 'none';\n\t\t});\n\n\t\t\/* Watch for stream being attached *\/\n\t\tvar origSrcObj = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'srcObject');\n\t\tif (origSrcObj && origSrcObj.set) {\n\t\t\tvar origSet = origSrcObj.set.bind(video);\n\t\t\tObject.defineProperty(video, 'srcObject', {\n\t\t\t\tset: function (stream) {\n\t\t\t\t\torigSet(stream);\n\t\t\t\t\tif (stream) {\n\t\t\t\t\t\tvideo.play().catch(function () {\n\t\t\t\t\t\t\t\/* Autoplay blocked \u2014 show overlay *\/\n\t\t\t\t\t\t\toverlay.style.display = 'flex';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tget: origSrcObj.get.bind(video),\n\t\t\t\tconfigurable: true,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (document.readyState === 'loading') {\n\t\tdocument.addEventListener('DOMContentLoaded', attachPlayFallback);\n\t} else {\n\t\tattachPlayFallback();\n\t}\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/app.gusync.com\/index.php\/wp-json\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/app.gusync.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/app.gusync.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/app.gusync.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/app.gusync.com\/index.php\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":0,"href":"https:\/\/app.gusync.com\/index.php\/wp-json\/wp\/v2\/pages\/14\/revisions"}],"wp:attachment":[{"href":"https:\/\/app.gusync.com\/index.php\/wp-json\/wp\/v2\/media?parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}