mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-08 16:49:58 +00:00
74 lines
1.7 KiB
JavaScript
74 lines
1.7 KiB
JavaScript
"use strict";
|
|
|
|
const castReceiverManager = cast.receiver.CastReceiverManager.getInstance();
|
|
|
|
const mediaElement = document.querySelector(".media");
|
|
const mediaManager = new cast.receiver.MediaManager(mediaElement);
|
|
|
|
mediaElement.height = window.innerHeight;
|
|
mediaElement.width = window.innerWidth;
|
|
|
|
let senderId;
|
|
|
|
const messageBus = castReceiverManager.getCastMessageBus(
|
|
"urn:x-cast:fx_cast",
|
|
cast.receiver.CastMessageBus.MessageType.JSON
|
|
);
|
|
|
|
messageBus.onMessage = async message => {
|
|
const { subject, data } = message.data;
|
|
|
|
senderId = message.senderId;
|
|
|
|
switch (subject) {
|
|
case "peerConnectionOffer": {
|
|
await pc.setRemoteDescription(data);
|
|
const desc = await pc.createAnswer();
|
|
await pc.setLocalDescription(desc);
|
|
|
|
messageBus.send(message.senderId, {
|
|
subject: "peerConnectionAnswer",
|
|
data: desc
|
|
});
|
|
|
|
break;
|
|
}
|
|
|
|
case "iceCandidate": {
|
|
await pc.addIceCandidate(data);
|
|
break;
|
|
}
|
|
|
|
case "close": {
|
|
window.close();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
const pc = new RTCPeerConnection();
|
|
|
|
pc.addEventListener("icecandidate", ev => {
|
|
messageBus.send(senderId, {
|
|
subject: "iceCandidate",
|
|
data: ev.candidate
|
|
});
|
|
});
|
|
|
|
pc.addEventListener("addstream", ev => {
|
|
mediaElement.srcObject = ev.stream;
|
|
mediaElement.webkitRequestFullscreen();
|
|
|
|
const splash = document.querySelector(".splash");
|
|
splash.classList.add("splash--disabled");
|
|
});
|
|
|
|
// TODO: Fix API shim to make this work
|
|
castReceiverManager.onSenderDisconnected = ev => {
|
|
if (castReceiverManager.getSenders().length <= 0) {
|
|
window.close();
|
|
}
|
|
};
|
|
|
|
castReceiverManager.start();
|