mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-11-16 02:23:02 +03:00
hold the last frame on screen when the live mode changes
Turning on two-way talk while watching MSE switched the player to WebRTC and showed a buffering spinner until WebRTC played. The frame capture now runs on a mode change as well as a stream change, so the outgoing frame stays up until the new player plays.
This commit is contained in:
@@ -238,20 +238,20 @@ export default function LivePlayer({
|
||||
cameraActive,
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
setLiveReady(false);
|
||||
}, [preferredLiveMode]);
|
||||
|
||||
const [key, setKey] = useState(0);
|
||||
|
||||
// the stream is part of the MSE and WebRTC keys, so a stream change
|
||||
// remounts them in the same render and the new player is hidden until it
|
||||
// plays. jsmpeg plays the camera, not the stream, and keeps playing
|
||||
const [renderedStream, setRenderedStream] = useState(streamName);
|
||||
// a stream or mode change remounts the player in the same render, and the
|
||||
// new player is hidden until it plays. jsmpeg plays the camera, not the
|
||||
// stream, so a stream change alone keeps it playing
|
||||
const [renderedPlayer, setRenderedPlayer] = useState({
|
||||
stream: streamName,
|
||||
mode: preferredLiveMode,
|
||||
});
|
||||
const [switchFrame, setSwitchFrame] = useState<HTMLCanvasElement>();
|
||||
if (renderedStream !== streamName) {
|
||||
setRenderedStream(streamName);
|
||||
if (preferredLiveMode !== "jsmpeg") {
|
||||
const modeChanged = renderedPlayer.mode !== preferredLiveMode;
|
||||
if (modeChanged || renderedPlayer.stream !== streamName) {
|
||||
setRenderedPlayer({ stream: streamName, mode: preferredLiveMode });
|
||||
if (modeChanged || preferredLiveMode !== "jsmpeg") {
|
||||
setLiveReady(false);
|
||||
|
||||
// the old video is still in the DOM until this render commits, so its
|
||||
|
||||
Reference in New Issue
Block a user