mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 18:19:58 +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 {
|
declare interface MediaTrackConstraints {
|
||||||
mediaSource: "screen" | "window";
|
cursor: "always" | "motion" | "never";
|
||||||
}
|
}
|
||||||
|
|
||||||
declare interface RTCPeerConnection {
|
declare interface RTCPeerConnection {
|
||||||
addStream (mediaStream: MediaStream): void;
|
addStream (mediaStream: MediaStream): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare interface MediaDevices {
|
||||||
|
getDisplayMedia(constraints: MediaStreamConstraints): Promise<MediaStream>;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
interface CloneIntoOptions {
|
interface CloneIntoOptions {
|
||||||
cloneFunctions?: boolean;
|
cloneFunctions?: boolean;
|
||||||
|
|||||||
@@ -646,39 +646,8 @@ async function onConnectShim (port: browser.runtime.Port) {
|
|||||||
: ReceiverSelectorType.Popup);
|
: ReceiverSelectorType.Popup);
|
||||||
|
|
||||||
|
|
||||||
// Media type for initial opener sender
|
|
||||||
let openerMediaType: ReceiverSelectorMediaType;
|
|
||||||
|
|
||||||
function onReceiverSelectorSelected (
|
function onReceiverSelectorSelected (
|
||||||
ev: ReceiverSelectorSelectedEvent) {
|
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({
|
port.postMessage({
|
||||||
subject: "shim:/selectReceiverEnd"
|
subject: "shim:/selectReceiverEnd"
|
||||||
, data: ev.detail
|
, data: ev.detail
|
||||||
@@ -781,10 +750,9 @@ async function onConnectShim (port: browser.runtime.Port) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "main:/selectReceiverBegin": {
|
case "main:/selectReceiverBegin": {
|
||||||
openerMediaType = message.data.defaultMediaType;
|
|
||||||
receiverSelector.open(
|
receiverSelector.open(
|
||||||
Array.from(statusBridgeReceivers.values())
|
Array.from(statusBridgeReceivers.values())
|
||||||
, openerMediaType);
|
, message.data.defaultMediaType);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -119,8 +119,9 @@ async function onRequestSessionSuccess (
|
|||||||
|
|
||||||
case ReceiverSelectorMediaType.Screen: {
|
case ReceiverSelectorMediaType.Screen: {
|
||||||
|
|
||||||
const stream = await navigator.mediaDevices.getUserMedia({
|
const stream = await navigator.mediaDevices.getDisplayMedia({
|
||||||
video: { mediaSource: "screen" }
|
video: { cursor: "motion" }
|
||||||
|
, audio: false
|
||||||
});
|
});
|
||||||
|
|
||||||
peerConnection.addStream(stream);
|
peerConnection.addStream(stream);
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ onMessage(async message => {
|
|||||||
|
|
||||||
sessionSuccessCallback(
|
sessionSuccessCallback(
|
||||||
session
|
session
|
||||||
, message.data.selectedMedia);
|
, message.data.mediaType);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user