mirror of
https://github.com/p-stream/p-stream.git
synced 2026-04-21 08:42:20 +00:00
update castingInternal to avoid errors
This commit is contained in:
parent
3d3209f4aa
commit
78b83ed8be
1 changed files with 55 additions and 26 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
import { useEffect, useRef } from "react";
|
import { useCallback, useEffect, useRef } from "react";
|
||||||
|
|
||||||
import { mediaItemTypeToMediaType } from "@/backend/metadata/tmdb";
|
import { mediaItemTypeToMediaType } from "@/backend/metadata/tmdb";
|
||||||
import { makeVideoElementDisplayInterface } from "@/components/player/display/base";
|
import { makeVideoElementDisplayInterface } from "@/components/player/display/base";
|
||||||
|
|
@ -80,38 +80,67 @@ export function CastingInternal() {
|
||||||
});
|
});
|
||||||
}, [metaTitle, metaType, display]);
|
}, [metaTitle, metaType, display]);
|
||||||
|
|
||||||
useEffect(() => {
|
const connectionChanged = useCallback(
|
||||||
if (!available) return;
|
(e: cast.framework.RemotePlayerChangedEvent) => {
|
||||||
|
|
||||||
const ins = cast.framework.CastContext.getInstance();
|
|
||||||
setInstance(ins);
|
|
||||||
ins.setOptions({
|
|
||||||
receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,
|
|
||||||
autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED,
|
|
||||||
});
|
|
||||||
|
|
||||||
const newPlayer = new cast.framework.RemotePlayer();
|
|
||||||
setPlayer(newPlayer);
|
|
||||||
const newControlller = new cast.framework.RemotePlayerController(newPlayer);
|
|
||||||
setController(newControlller);
|
|
||||||
|
|
||||||
function connectionChanged(e: cast.framework.RemotePlayerChangedEvent) {
|
|
||||||
if (e.field === "isConnected") {
|
if (e.field === "isConnected") {
|
||||||
setIsCasting(e.value);
|
setIsCasting(e.value);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
newControlller.addEventListener(
|
[setIsCasting],
|
||||||
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
|
);
|
||||||
connectionChanged,
|
|
||||||
);
|
|
||||||
|
|
||||||
return () => {
|
useEffect(() => {
|
||||||
newControlller.removeEventListener(
|
if (!available || !window.cast || !window.chrome || !window.chrome.cast)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!chrome.cast || !chrome.cast.media) {
|
||||||
|
console.error(
|
||||||
|
"Chrome Cast API not fully initialized: chrome.cast.media is undefined",
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const ins = cast.framework.CastContext.getInstance();
|
||||||
|
setInstance(ins);
|
||||||
|
|
||||||
|
const receiverAppId = chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID;
|
||||||
|
const autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED;
|
||||||
|
|
||||||
|
ins.setOptions({
|
||||||
|
receiverApplicationId: receiverAppId,
|
||||||
|
autoJoinPolicy,
|
||||||
|
});
|
||||||
|
|
||||||
|
const newPlayer = new cast.framework.RemotePlayer();
|
||||||
|
setPlayer(newPlayer);
|
||||||
|
const newControlller = new cast.framework.RemotePlayerController(
|
||||||
|
newPlayer,
|
||||||
|
);
|
||||||
|
setController(newControlller);
|
||||||
|
|
||||||
|
newControlller.addEventListener(
|
||||||
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
|
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
|
||||||
connectionChanged,
|
connectionChanged,
|
||||||
);
|
);
|
||||||
};
|
|
||||||
}, [available, setPlayer, setController, setInstance, setIsCasting]);
|
return () => {
|
||||||
|
newControlller.removeEventListener(
|
||||||
|
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
|
||||||
|
connectionChanged,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error initializing Chromecast:", error);
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
available,
|
||||||
|
setPlayer,
|
||||||
|
setController,
|
||||||
|
setInstance,
|
||||||
|
setIsCasting,
|
||||||
|
connectionChanged,
|
||||||
|
]);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue