From 38f29e38fcc668171dc05c53d40a36b895c86102 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期四, 10 十月 2024 13:34:28 +0800
Subject: [PATCH] init

---
 ard-work/src/main/resources/templates/preview.html |  190 +++++++++++++++++++++++++----------------------
 1 files changed, 102 insertions(+), 88 deletions(-)

diff --git a/ard-work/src/main/resources/templates/preview.html b/ard-work/src/main/resources/templates/preview.html
index 63871f9..003d22d 100644
--- a/ard-work/src/main/resources/templates/preview.html
+++ b/ard-work/src/main/resources/templates/preview.html
@@ -20,7 +20,7 @@
 
         .container {
             background-color: #151414; /* 灏嗙綉鏍奸」鐩殑棰滆壊璁剧疆涓虹孩鑹茶儗鏅� */
-            flex: 9;
+            flex: 30;
             border: 10px solid;
             box-sizing: border-box;
             display: grid;
@@ -68,6 +68,7 @@
             height: 100%;
             object-fit: fill;
         }
+
         #loadingMessage {
             position: absolute;
             top: 50%;
@@ -90,87 +91,29 @@
     <div id="loadingMessage">姝e湪鍙栨祦</div>
     <div class="container2">
         <div class="button-container">
+            <button class="toggle-button" onclick="closeAllVideo()">鍏抽棴</button>
             <button class="toggle-button" onclick="changeGrid(1, 1)">1x1</button>
             <button class="toggle-button" onclick="changeGrid(2, 2)">2x2</button>
             <button class="toggle-button" onclick="changeGrid(3, 3)">3x3</button>
             <button class="toggle-button" onclick="changeGrid(4, 4)">4x4</button>
+            <button class="toggle-button" onclick="changeGrid(5, 5)">5x5</button>
+            <button class="toggle-button" onclick="changeGrid(6, 6)">6x6</button>
+            <button class="toggle-button" onclick="changeGrid(7, 7)">7x7</button>
+            <button class="toggle-button" onclick="changeGrid(8, 8)">8x8</button>
+            <button class="toggle-button" onclick="changeGrid(9, 9)">9x9</button>
+            <input id="videoUrl" type="text" value="http://192.168.1.227:8889/0d1c9f80a7b4480c8b401ba6b140b581_1/" style="width: 250px"/>
         </div>
     </div>
 </div>
 
 <script>
-    function calculateAspectRatio(videoWidth, videoHeight) {
-        return videoWidth / videoHeight;
-    }
-
-    function adjustGridItemSize(gridItem, videoWidth, videoHeight) {
-        const aspectRatio = calculateAspectRatio(videoWidth, videoHeight);
-        gridItem.style.aspectRatio = aspectRatio; /* 璁剧疆瀹介珮姣� */
-    }
-
-    function changeGrid(rows, cols) {
-        closeAllVideo();
-        const gridContainer = document.getElementById('gridContainer');
-        gridContainer.innerHTML = '';
-
-        for (let i = 1; i <= rows * cols; i++) {
-            const gridItem = document.createElement('div');
-            gridItem.className = 'grid-item';
-            const videoContainer = document.createElement('div');
-            videoContainer.className = 'video-container';
-            const video = document.createElement('video');
-            video.id = "video" + i;
-            video.controls = true;
-            video.autoplay = true;
-            video.muted = true;
-            video.loop= true;
-
-            videoContainer.appendChild(video);
-            gridItem.appendChild(videoContainer);
-            gridContainer.appendChild(gridItem);
-
-            video.addEventListener('loadedmetadata', function () {
-                adjustGridItemSize(gridItem, gridItem.videoWidth, gridItem.videoHeight);
-            });
-            video.addEventListener("click", function () {
-                loadingMessage.style.display = "block";
-                video.play().then(function () {
-                    loadingMessage.style.display = "none";
-                }).catch(function (error) {
-                    console.error("Error playing the video:", error);
-                    loadingMessage.style.display = "none";
-                });
-            });
-            console.log(video.id)
-        }
-
-        gridContainer.style.gridTemplateColumns = `repeat(${cols}, 1fr)`;
-    }
-
-
-    let mediamtxHost = "192.168.1.227"
-    var chanMap = new Map();
-    window.onload = function () {
-        changeGrid(2, 2);
-        chanMap.set("video1", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video2", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video3", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video4", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video5", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video6", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video7", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video8", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video9", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video10", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video11", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video12", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video13", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video14", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video15", "http://" + mediamtxHost + ":8889/164/");
-        chanMap.set("video16", "http://" + mediamtxHost + ":8889/164/");
-
-        console.log(chanMap);
-    }
+    console.log(RTCRtpReceiver.getCapabilities('video').codecs)
+    console.log(RTCRtpReceiver.getCapabilities('audio').codecs)
+    //whep鎿嶄綔鏂规硶
+    const restartPause = 2000;
+    const unquoteCredential = (v) => (
+        JSON.parse(`"${v}"`)
+    );
     const linkToIceServers = (links) => (
         (links !== null) ? links.split(', ').map((link) => {
             const m = link.match(/^<(.+?)>; rel="ice-server"(; username="(.*?)"; credential="(.*?)"; credential-type="password")?/i);
@@ -237,9 +180,9 @@
     }
 
     class WHEPClient {
-        constructor(wurl, videoId) {
+        constructor(whepUrl, videoId) {
             this.video = videoId;
-            this.url = new URL('whep', wurl);
+            this.wurl = new URL('whep', whepUrl);
             this.pc = null;
             this.restartTimeout = null;
             this.eTag = '';
@@ -249,7 +192,7 @@
 
         start() {
             console.log("requesting ICE servers");
-            fetch(this.url, {
+            fetch(this.wurl, {
                 method: 'OPTIONS',
             })
                 .then((res) => this.onIceServers(res))
@@ -286,7 +229,7 @@
 
             console.log("sending offer");
 
-            fetch(this.url, {
+            fetch(this.wurl, {
                 method: 'POST',
                 headers: {
                     'Content-Type': 'application/sdp',
@@ -297,7 +240,9 @@
                     if (res.status !== 201) {
                         throw new Error('bad status code');
                     }
-                    this.eTag = res.headers.get('E-Tag');
+                    // this.eTag = res.headers.get('ETag');
+                    this.eTag = res.headers.get("ETag") || res.headers.get('E-Tag');
+                    this.wurl = new URL(res.headers.get('location'),  this.wurl.origin).toString();
                     return res.text();
                 })
                 .then((sdp) => this.onRemoteAnswer(new RTCSessionDescription({
@@ -351,12 +296,13 @@
         }
 
         sendLocalCandidates(candidates) {
-            fetch(this.url, {
+            fetch(this.wurl, {
                 method: 'PATCH',
                 headers: {
                     'Content-Type': 'application/trickle-ice-sdpfrag',
                     'If-Match': this.eTag,
                 },
+
                 body: generateSdpFragment(this.offerData, candidates),
             })
                 .then((res) => {
@@ -401,36 +347,104 @@
         }
     }
 
-    let videoMap = new Map();
+    //鍒濆鍖栧姞杞�
+    var chanMap = new Map();
+    window.onload = function () {
+        let videoUrl = $("#videoUrl").val();
+        for (let i = 1; i < 82; i++) {
+            chanMap.set("video" + i, videoUrl);
+        }
+        console.log(chanMap);
+        changeGrid(2, 2);
+    }
+    //缁戝畾鐐瑰嚮浜嬩欢
+    let playMap = new Map();
     $(document).on('click', 'video', function () {
         let ID = this.id;//鑾峰彇褰撳墠鐐瑰嚮浜嬩欢鐨勫厓绱�
         console.log(ID);
-        console.log(videoMap);
-        if (videoMap.get(ID) != null) {
+        console.log(playMap);
+        if (playMap.get(ID) != null) {
             closeVideo(ID);
         } else {
             let stream = chanMap.get(ID);
             let client = new WHEPClient(stream, ID);
-            videoMap.set(ID, client);
+            playMap.set(ID, client);
         }
     });
 
+    //鍏抽棴涓�涓獀ideo
     function closeVideo(id) {
         console.log("鍏抽棴" + id)
-        let client = videoMap.get(id);
+        let client = playMap.get(id);
         client.stop(id);
-        videoMap.delete(id);
+        playMap.delete(id);
     }
 
+    //鍏抽棴鎵�鏈塿ideo
     function closeAllVideo() {
-        videoMap.forEach((val, key) => {
-            console.log(val, key);
+        playMap.forEach((val, key) => {
             val.stop(key);
-            videoMap.delete(key);
+            closeVideo(key);
+            playMap.delete(key);
         })
     }
 
+    //鍔ㄦ�佹敼鍙榞rid
+    function calculateAspectRatio(videoWidth, videoHeight) {
+        return videoWidth / videoHeight;
+    }
 
+    function adjustGridItemSize(gridItem, videoWidth, videoHeight) {
+        const aspectRatio = calculateAspectRatio(videoWidth, videoHeight);
+        gridItem.style.aspectRatio = aspectRatio; /* 璁剧疆瀹介珮姣� */
+    }
+
+    function changeGrid(rows, cols) {
+        closeAllVideo();
+        let num = rows * cols;
+        let videoUrl = $("#videoUrl").val();
+        for (let i = 1; i < num + 1; i++) {
+            chanMap.set("video" + i, videoUrl);
+        }
+        const gridContainer = document.getElementById('gridContainer');
+        gridContainer.innerHTML = '';
+
+        for (let i = 1; i <= rows * cols; i++) {
+            const gridItem = document.createElement('div');
+            gridItem.className = 'grid-item';
+            const videoContainer = document.createElement('div');
+            videoContainer.className = 'video-container';
+            const video = document.createElement('video');
+            video.id = "video" + i;
+            video.controls = true;
+            video.autoplay = true;
+            video.muted = true;
+            video.loop = true;
+
+            videoContainer.appendChild(video);
+            gridItem.appendChild(videoContainer);
+            gridContainer.appendChild(gridItem);
+
+            video.addEventListener('loadedmetadata', function () {
+                adjustGridItemSize(gridItem, gridItem.videoWidth, gridItem.videoHeight);
+            });
+            video.addEventListener("click", function () {
+                loadingMessage.style.display = "block";
+                video.play().then(function () {
+                    loadingMessage.style.display = "none";
+                }).catch(function (error) {
+                    console.error("Error playing the video:", error);
+                    loadingMessage.style.display = "none";
+                });
+            });
+            console.log(video.id)
+            let stream = chanMap.get(video.id);
+            let client = new WHEPClient(stream, video.id);
+            playMap.set(video.id, client);
+        }
+
+        gridContainer.style.gridTemplateColumns = `repeat(${cols}, 1fr)`;
+    }
 </script>
 </body>
 </html>

--
Gitblit v1.9.3