‘liusuyi’
2023-11-24 bf75d92d753bcd3cf871d6d1201f8dd359b11bc6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<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>