mirror of
https://github.com/p-stream/p-stream.git
synced 2026-04-04 17:59:44 +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 { makeVideoElementDisplayInterface } from "@/components/player/display/base";
|
||||
|
|
@ -80,38 +80,67 @@ export function CastingInternal() {
|
|||
});
|
||||
}, [metaTitle, metaType, display]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!available) return;
|
||||
|
||||
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) {
|
||||
const connectionChanged = useCallback(
|
||||
(e: cast.framework.RemotePlayerChangedEvent) => {
|
||||
if (e.field === "isConnected") {
|
||||
setIsCasting(e.value);
|
||||
}
|
||||
}
|
||||
newControlller.addEventListener(
|
||||
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
|
||||
connectionChanged,
|
||||
);
|
||||
},
|
||||
[setIsCasting],
|
||||
);
|
||||
|
||||
return () => {
|
||||
newControlller.removeEventListener(
|
||||
useEffect(() => {
|
||||
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,
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue