From 2cfcb15fdff730140b6a03a874466802704078eb Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: 星期五, 22 十二月 2023 10:01:42 +0800
Subject: [PATCH] 群组
---
ard-work/src/main/resources/templates/preview.html | 181 +++++++++++++++++++++++++--------------------
1 files changed, 101 insertions(+), 80 deletions(-)
diff --git a/ard-work/src/main/resources/templates/preview.html b/ard-work/src/main/resources/templates/preview.html
index 49c1059..273683e 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,79 +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/164/" 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/165/");
- chanMap.set("video3", "http://" + mediamtxHost + ":8889/245/");
- chanMap.set("video4", "http://" + mediamtxHost + ":8889/164/");
- chanMap.set("video5", "http://" + mediamtxHost + ":8889/165/");
- chanMap.set("video6", "http://" + mediamtxHost + ":8889/245/");
- chanMap.set("video7", "http://" + mediamtxHost + ":8889/164/");
- chanMap.set("video8", "http://" + mediamtxHost + ":8889/165/");
- chanMap.set("video9", "http://" + mediamtxHost + ":8889/245/");
- 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);
@@ -229,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 = '';
@@ -241,7 +192,7 @@
start() {
console.log("requesting ICE servers");
- fetch(this.url, {
+ fetch(this.wurl, {
method: 'OPTIONS',
})
.then((res) => this.onIceServers(res))
@@ -278,7 +229,7 @@
console.log("sending offer");
- fetch(this.url, {
+ fetch(this.wurl, {
method: 'POST',
headers: {
'Content-Type': 'application/sdp',
@@ -289,7 +240,8 @@
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');
return res.text();
})
.then((sdp) => this.onRemoteAnswer(new RTCSessionDescription({
@@ -343,12 +295,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) => {
@@ -393,36 +346,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