mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-08 08:39:59 +00:00
Fix mirror sender and use getDisplayMedia
This commit is contained in:
6
ext/src/global.d.ts
vendored
6
ext/src/global.d.ts
vendored
@@ -29,13 +29,17 @@ declare interface HTMLCanvasElement {
|
||||
}
|
||||
|
||||
declare interface MediaTrackConstraints {
|
||||
mediaSource: "screen" | "window";
|
||||
cursor: "always" | "motion" | "never";
|
||||
}
|
||||
|
||||
declare interface RTCPeerConnection {
|
||||
addStream (mediaStream: MediaStream): void;
|
||||
}
|
||||
|
||||
declare interface MediaDevices {
|
||||
getDisplayMedia(constraints: MediaStreamConstraints): Promise<MediaStream>;
|
||||
}
|
||||
|
||||
|
||||
interface CloneIntoOptions {
|
||||
cloneFunctions?: boolean;
|
||||
|
||||
@@ -646,39 +646,8 @@ async function onConnectShim (port: browser.runtime.Port) {
|
||||
: ReceiverSelectorType.Popup);
|
||||
|
||||
|
||||
// Media type for initial opener sender
|
||||
let openerMediaType: ReceiverSelectorMediaType;
|
||||
|
||||
function onReceiverSelectorSelected (
|
||||
ev: ReceiverSelectorSelectedEvent) {
|
||||
|
||||
/**
|
||||
* If the media type returned from the selector has been
|
||||
* changed, we need to cancel the current sender and switch
|
||||
* it out for the right one.
|
||||
*
|
||||
* TODO: Seamlessly connect selector to the new sender
|
||||
*/
|
||||
if (ev.detail.mediaType !== openerMediaType) {
|
||||
onReceiverSelectorCancelled();
|
||||
|
||||
switch (ev.detail.mediaType) {
|
||||
case ReceiverSelectorMediaType.App: {
|
||||
// TODO: Keep track of page apps
|
||||
break;
|
||||
}
|
||||
|
||||
case ReceiverSelectorMediaType.Screen:
|
||||
case ReceiverSelectorMediaType.Tab: {
|
||||
loadMirrorCastSender(tabId, frameId, ev.detail.mediaType);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
port.postMessage({
|
||||
subject: "shim:/selectReceiverEnd"
|
||||
, data: ev.detail
|
||||
@@ -781,10 +750,9 @@ async function onConnectShim (port: browser.runtime.Port) {
|
||||
}
|
||||
|
||||
case "main:/selectReceiverBegin": {
|
||||
openerMediaType = message.data.defaultMediaType;
|
||||
receiverSelector.open(
|
||||
Array.from(statusBridgeReceivers.values())
|
||||
, openerMediaType);
|
||||
, message.data.defaultMediaType);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -119,8 +119,9 @@ async function onRequestSessionSuccess (
|
||||
|
||||
case ReceiverSelectorMediaType.Screen: {
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({
|
||||
video: { mediaSource: "screen" }
|
||||
const stream = await navigator.mediaDevices.getDisplayMedia({
|
||||
video: { cursor: "motion" }
|
||||
, audio: false
|
||||
});
|
||||
|
||||
peerConnection.addStream(stream);
|
||||
|
||||
@@ -262,7 +262,7 @@ onMessage(async message => {
|
||||
|
||||
sessionSuccessCallback(
|
||||
session
|
||||
, message.data.selectedMedia);
|
||||
, message.data.mediaType);
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user