导入数据库表和音视频demo

This commit is contained in:
2023-09-14 14:59:57 +08:00
parent c0ca154d31
commit 736c5376e0
157 changed files with 11044 additions and 0 deletions

View File

@@ -0,0 +1,197 @@
<html>
<head>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
<script src="../js/dialog-polyfill.js" type="text/javascript"></script>
<style>
html {
zoom: 90%;
}
body {
background: #e2e1e0;
text-align: center;
margin: 0px;
padding: 0px;
font-size: 9px;
color: #555;
font-family: Roboto;
text-align: -webkit-center;
}
table {
margin: 10px;
position: relative;
left: -40px;
}
video {
object-fit: cover;
float: left;
background: #fff;
border-radius: 2px;
display: inline-block;
margin: 1rem;
position: relative;
width: 420px;
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
transition: all 0.5s cubic-bezier(.25,.8,.25,1);
padding:1px;
bottom: 0px;
height: 315px;
}
#container {
top: 10px;
left: 10px;
margin: 0px;
padding: 0px;
width: 900px;
}
.container-video {
width: 50%;
float: left;
display: inline-block;
position: relative;
font-size: 24px;
top: 5px;
margin-bottom: 10px;
}
.gaugeChartContainer {
position: relative;
width: 190px;
height: 120px;
float: left;
padding: 10px;
}
.gaugeChart {
position: relative;
text-align: center;
}
.gaugeChart canvas {
position: absolute;
top: 0;
left: 0;
z-index: 0;
}
.gaugeChartLabel {
display: inline-block;
position: absolute;
float: left;
left: 0;
top: 55px;
width: 100%;
text-align: center;
color: #FFFFFF;
font-size: 24px;
font-weight: bold;
z-index: 1;
text-shadow: #333 0px 0px 2px;
}
.gaugeChartContainer {
position: relative;
font-size: 9px;
}
.gaugeChartTitle {
display: inline-block;
position: absolute;
float: left;
top: 0px;
left: 0;
width: 100%;
text-align: center;
color: #888;
font-weight: bold;
font-size: 12px;
}
.gaugeChartMin {
display: inline-block;
position: absolute;
float: left;
left: 0;
bottom: 10%;
width: 92%;
margin-left: 8%;
text-align: left;
color: #888;
font-weight: bold;
}
.gaugeChartMax {
display: inline-block;
position: absolute;
float: left;
left: 0;
bottom: 10%;
width: 95%;
margin-right: 5%;
text-align: right;
color: #888;
font-weight: bold;
}
td {
margin: 5px;
padding: 5px;
text-align: center;
}
.ready-dialog
{
width: 780px;
text-align: left;
}
.ready-dialog p
{
color: black;
font-size: 12pt;
}
.ready-dialog code
{
font-size: 12pt;
}
</style>
<script src="../js/gauge.min.js" type="text/javascript"></script>
</head>
<body>
<div id="container">
<div class="container-video">LOCAL
<video id="local"></video>
</div>
<div class="container-video">REMOTE
<video id="remote"></video>
</div>
<dialog class="ready-dialog mdl-dialog">
<h4 class="mdl-dialog__title">Ready to test MP4 recording?</h4>
<div class="mdl-dialog__content">
<p>
This demo allows you to test the MP4 Recording of the Medooze Media Server.
</p>
<p>
The call will be recorded on an mp4 file located at the /tmp folder of the server you are running the Medooze Media Server.
</p>
</div>
<div class="mdl-dialog__actions">
<button type="button" class="ready mdl-button mdl-button mdl-button--raised mdl-button--accent">Ready!</button>
</div>
</dialog>
</div>
</body>
</html>
<script src="js/rec.js" type="text/javascript"></script>

View File

@@ -0,0 +1,159 @@
const url = "wss://"+window.location.hostname+":"+window.location.port;
let videoResolution = true;
//Get our url
const href = new URL (window.location.href);
if (href.searchParams.has ("video"))
switch (href.searchParams.get ("video").toLowerCase ())
{
case "1080p":
videoResolution = {
width: {min: 1920, max: 1920},
height: {min: 1080, max: 1080},
};
break;
case "720p":
videoResolution = {
width: {min: 1280, max: 1280},
height: {min: 720, max: 720},
};
break;
case "576p":
videoResolution = {
width: {min: 720, max: 720},
height: {min: 576, max: 576},
};
break;
case "480p":
videoResolution = {
width: {min: 640, max: 640},
height: {min: 480, max: 480},
};
break;
case "no":
videoResolution = false;
break;
}
const roomId = (new Date()).getTime() + "-" + Math.random();
var texts = document.querySelectorAll('.gaugeChartLabel');
function addVideoForStream(stream,muted)
{
//Create new video element
const video = document.querySelector (muted ? "#local" : "#remote");
//Set src stream
video.srcObject = stream;
//Set other properties
video.autoplay = true;
video.muted = muted;
}
function removeVideoForStream(stream)
{
//Get video
var video = document.getElementById(stream.id);
//Remove it when done
video.addEventListener('webkitTransitionEnd',function(){
//Delete it
video.parentElement.removeChild(video);
});
//Disable it first
video.className = "disabled";
}
var sdp;
var pc;
function connect()
{
pc = new RTCPeerConnection(null);
var ws = new WebSocket(url,"rec");
pc.onaddstream = function(event) {
var prev = 0;
console.debug("onAddStream",event);
//Play it
addVideoForStream(event.stream);
};
pc.onremovestream = function(event) {
console.debug("onRemoveStream",event);
//Play it
removeVideoForStream(event.stream);
};
ws.onopen = function(){
console.log("opened");
navigator.mediaDevices.getUserMedia({
audio: true,
video: videoResolution
})
.then(function(stream){
var prev = 0;
console.debug("getUserMedia sucess",stream);
//Play it
addVideoForStream(stream,true);
window.s = stream;
//Add stream to peer connection
pc.addStream(stream);
//Create new offer
return pc.createOffer(stream);
})
.then(function(offer){
console.debug("createOffer sucess",offer);
//We have sdp
sdp = offer.sdp;
//Set it
pc.setLocalDescription(offer);
console.log(sdp);
//Create room
ws.send(JSON.stringify({
cmd : "OFFER",
offer : sdp
}));
})
.catch(function(error){
console.error("Error",error);
alert(error);
});
};
ws.onmessage = function(event){
console.log(event);
//Get protocol message
const msg = JSON.parse(event.data);
console.log(msg.answer);
pc.setRemoteDescription(new RTCSessionDescription({
type:'answer',
sdp: msg.answer
}), function () {
console.log("JOINED");
}, function (err) {
console.error("Error joining",err);
}
);
};
}
var dialog = document.querySelector('dialog');
if (dialog.showModal)
{
dialog.showModal();
dialog.querySelector('.ready').addEventListener('click', function() {
dialog.close();
connect();
});
} else {
connect();
}