| <html> | 
| <head> | 
|     <link rel="icon" type="image/png" href="webrtc.png" /> | 
|     <script src="libs/tfjs"></script> | 
|     <script src="libs/tf-backend-wasm.js"></script>     | 
|     <script> | 
|         tf.setBackend('wasm').then(() => main()); | 
|     </script> | 
|     <script src="libs/coco-ssd"> </script> | 
|     <script src="libs/posenet"> </script> | 
|     <script src="libs/deeplab"> </script> | 
|     <script src="libs/body-pix"></script> | 
|     <script src="libs/blazeface"></script> | 
|     <script type="module" src="webrtc-streamer-element.js"></script> | 
|     <script type="module" src="webrtc-streamer-footer-element.js"></script> | 
|     <script type="module" src="webrtc-streamer-menu-element.js"></script> | 
|     <script type="module" src="webrtc-streamer-options-element.js"></script> | 
|     <script type="module" src="webrtc-streamer-algo-element.js"></script> | 
| </head> | 
| <body> | 
|     <webrtc-streamer-menu id="selector" ></webrtc-streamer-menu> | 
|     <webrtc-streamer-algo id="algo"></webrtc-streamer-algo> | 
|     <webrtc-streamer id="stream"></webrtc-streamer> | 
|     <webrtc-streamer-options id="options" options="rtptransport=tcp&timeout=60&width=0&height=0&bitrate=0&rotation=0" style="display:none"></webrtc-streamer-options> | 
|     <webrtc-streamer-footer></webrtc-streamer-footer> | 
|   | 
|     <script> | 
|         customElements.whenDefined('webrtc-streamer').then(() => { | 
|             let selectorElement = document.getElementById("selector"); | 
|             let streamElement = document.getElementById("stream"); | 
|             let optionsElement = document.getElementById("options"); | 
|             let algoElement = document.getElementById("algo"); | 
|   | 
|             let url; | 
|             if (typeof URLSearchParams != 'undefined') { | 
|                 var params = new URLSearchParams(location.search); | 
|                 if (params.has("options")) { | 
|                     streamElement.setAttribute('options', params.get("options")); | 
|                 } | 
|                 if (params.has("algo")) { | 
|                     algoElement.setAttribute('selected', params.get("algo")); | 
|                     streamElement.setAttribute('algo', params.get("algo")); | 
|                 }             | 
|                 if (params.has("video") || params.has("audio")) { | 
|                     url = { video:params.get("video"), audio:params.get("audio") }; | 
|                 } | 
|                 if (params.has("showoptions")) { | 
|                     optionsElement.style.display = "block"; | 
|                 } | 
|             } | 
|   | 
|             selectorElement.addEventListener('init', (event) => { | 
|                     if (url) { | 
|                         let media = JSON.stringify(url) | 
|                         selectorElement.setAttribute('selected', media); | 
|                         streamElement.setAttribute('url', media); | 
|                     } else { | 
|                         let mediaList = event.detail; | 
|                         if (mediaList.length > 0) { | 
|                             var random = mediaList.sort(() => .5 - Math.random()); | 
|                             let media = JSON.stringify(random[0]) | 
|                             selectorElement.setAttribute('selected', media); | 
|                             streamElement.setAttribute('url', ''); | 
|                             streamElement.setAttribute('options', optionsElement.getAttribute('options')); | 
|                             streamElement.setAttribute('url', media); | 
|                         } | 
|                     } | 
|                 });             | 
|              | 
|   | 
|             selectorElement.addEventListener('change', (event) => { | 
|                 streamElement.setAttribute('url', ''); | 
|                 streamElement.setAttribute('options', optionsElement.getAttribute('options')); | 
|                 streamElement.setAttribute('url', event.detail.url); | 
|             }); | 
|   | 
|             selectorElement.addEventListener('settings', (event) => { | 
|                 optionsElement.style.display = event.detail === "on" ? "block" : "none"; | 
|             }); | 
|   | 
|             algoElement.addEventListener('change', (event) => { | 
|                 streamElement.setAttribute('algo', event.detail.algo); | 
|             }); | 
|   | 
|             optionsElement.addEventListener('change', (event) => { | 
|                 streamElement.setAttribute('options', event.detail.options); | 
|             }); | 
|   | 
|             streamElement.addEventListener('click', (event) => { | 
|                 const url = JSON.parse(streamElement.getAttribute('url')) | 
|                 const options = streamElement.getAttribute('options') | 
|                 window.open('./webrtc-streamer.html?video='+encodeURIComponent(url.video)+'&audio='+encodeURIComponent(url.audio)+"&options="+encodeURIComponent(options)); | 
|             }); | 
|              | 
|         });         | 
|         </script> | 
| </body> | 
| </html> |