You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

45 lines
1.4 KiB

<!DOCTYPE html>
<html>
<head>
<title>WebRTC Video Stream</title>
</head>
<body>
<h1>WebRTC Video Stream</h1>
<video id="video" autoplay playsinline></video>
<script>
const pc = new RTCPeerConnection();
const video = document.getElementById('video');
pc.ontrack = (event) => {
video.srcObject = event.streams[0];
};
const ws = new WebSocket('ws://' + window.location.host + '/api/ws');
ws.onmessage = async (event) => {
const data = JSON.parse(event.data);
await pc.setRemoteDescription(new RTCSessionDescription(data));
if (data.type === 'offer') {
const answer = await pc.createAnswer();
await pc.setLocalDescription(answer);
ws.send(JSON.stringify({
'sdp': pc.localDescription.sdp,
'type': pc.localDescription.type
}));
}
};
ws.onopen = async () => {
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
stream.getTracks().forEach(track => pc.addTrack(track, stream));
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
ws.send(JSON.stringify({
'sdp': pc.localDescription.sdp,
'type': pc.localDescription.type
}));
};
</script>
</body>
</html>