You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.8 KiB
HTML
109 lines
2.8 KiB
HTML
10 months ago
|
<html>
|
||
|
<head>
|
||
|
<meta charset="UTF-8"/>
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
<title>WebRTC demo</title>
|
||
|
<style>
|
||
|
button {
|
||
|
padding: 8px 16px;
|
||
|
}
|
||
|
|
||
|
pre {
|
||
|
overflow-x: hidden;
|
||
|
overflow-y: auto;
|
||
|
}
|
||
|
|
||
|
video {
|
||
|
width: 100%;
|
||
|
height: 1024px;
|
||
|
}
|
||
|
|
||
|
.option {
|
||
|
margin-bottom: 8px;
|
||
|
}
|
||
|
|
||
|
|
||
|
.camera_block {
|
||
|
margin: 10px
|
||
|
}
|
||
|
table {
|
||
|
font-family: arial, sans-serif;
|
||
|
border-collapse: collapse;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
td, th {
|
||
|
border: 1px solid #dddddd;
|
||
|
text-align: left;
|
||
|
padding: 8px;
|
||
|
}
|
||
|
|
||
|
tr:nth-child(even) {
|
||
|
background-color: #dddddd;
|
||
|
}
|
||
|
</style>
|
||
|
<script>
|
||
|
// peer connection
|
||
|
var pc_rgb = null;
|
||
|
|
||
|
// data channel
|
||
|
var dc = null, dcInterval = null;
|
||
|
|
||
|
function start_rgb() {
|
||
|
var config = {
|
||
|
sdpSemantics: 'unified-plan'
|
||
|
};
|
||
|
|
||
|
pc_rgb = new RTCPeerConnection(config);
|
||
|
|
||
|
pc_rgb.addEventListener('track', function(evt) {
|
||
|
if (evt.track.kind == 'video') {
|
||
|
document.getElementById('video_rgb').srcObject = evt.streams[0];
|
||
|
}
|
||
|
});
|
||
|
|
||
|
fetch('/offer_video', {
|
||
|
body: JSON.stringify({
|
||
|
url: "demo.mp4"
|
||
|
}),
|
||
|
headers: {
|
||
|
'Content-Type': 'application/json'
|
||
|
},
|
||
|
method: 'POST'
|
||
|
}).then(function(response) {
|
||
|
return response.json();
|
||
|
}).then(function(server_offer) {
|
||
|
pc_rgb.setRemoteDescription(server_offer);
|
||
|
pc_rgb.createAnswer().then(function(answer) {
|
||
|
pc_rgb.setLocalDescription(answer).then(function() {
|
||
|
fetch('/answer_video', {
|
||
|
body: JSON.stringify({
|
||
|
sdp: pc_rgb.localDescription.sdp,
|
||
|
type: pc_rgb.localDescription.type
|
||
|
}),
|
||
|
headers: {
|
||
|
'Content-Type': 'application/json'
|
||
|
},
|
||
|
method: 'POST'
|
||
|
});
|
||
|
})
|
||
|
});
|
||
|
}).catch(function(e) {
|
||
|
alert(e);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
window.onload = (event) => {
|
||
|
console.log("page is fully loaded");
|
||
|
start_rgb();
|
||
|
};
|
||
|
</script>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div id="cameras" style="display: flex; flex-direction: row;">
|
||
|
<div id="camera_rgb" class="camera_block">
|
||
|
<video id="video_rgb" autoplay="true" playsinline="true" class="camera_block" ></video>
|
||
|
</div>
|
||
|
</div>
|
||
|
</body>
|