Fix the black screen of death (#7238)
* Fix the black screen of death * fmt * make check * Clean up * Fix up zoom to fit * Change how emulateNetworkConditions work * Do NOT use browser's offline/online mechanisms * Fix test
This commit is contained in:
@ -70,7 +70,6 @@ export async function holdOntoVideoFrameInCanvas(
|
||||
video: HTMLVideoElement,
|
||||
canvas: HTMLCanvasElement
|
||||
) {
|
||||
video.pause()
|
||||
canvas.width = video.videoWidth
|
||||
canvas.height = video.videoHeight
|
||||
canvas.style.width = video.videoWidth + 'px'
|
||||
@ -220,11 +219,14 @@ export const engineStreamMachine = setup({
|
||||
if (context.videoRef.current && context.canvasRef.current) {
|
||||
await context.videoRef.current.pause()
|
||||
|
||||
await holdOntoVideoFrameInCanvas(
|
||||
context.videoRef.current,
|
||||
context.canvasRef.current
|
||||
)
|
||||
context.videoRef.current.style.display = 'none'
|
||||
// It's possible we've already frozen the frame due to a disconnect.
|
||||
if (context.videoRef.current.style.display !== 'none') {
|
||||
await holdOntoVideoFrameInCanvas(
|
||||
context.videoRef.current,
|
||||
context.canvasRef.current
|
||||
)
|
||||
context.videoRef.current.style.display = 'none'
|
||||
}
|
||||
}
|
||||
|
||||
await rootContext.sceneInfra.camControls.saveRemoteCameraState()
|
||||
@ -365,9 +367,12 @@ export const engineStreamMachine = setup({
|
||||
}),
|
||||
},
|
||||
on: {
|
||||
[EngineStreamTransition.StartOrReconfigureEngine]: {
|
||||
[EngineStreamTransition.Resume]: {
|
||||
target: EngineStreamState.Resuming,
|
||||
},
|
||||
[EngineStreamTransition.Stop]: {
|
||||
target: EngineStreamState.Stopped,
|
||||
},
|
||||
},
|
||||
},
|
||||
[EngineStreamState.Stopped]: {
|
||||
@ -398,12 +403,23 @@ export const engineStreamMachine = setup({
|
||||
rootContext: args.self.system.get('root').getSnapshot().context,
|
||||
event: args.event,
|
||||
}),
|
||||
// Usually only fails if there was a disconnection mid-way.
|
||||
onError: [
|
||||
{
|
||||
target: EngineStreamState.WaitingForDependencies,
|
||||
reenter: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
on: {
|
||||
// The stream can be paused as it's resuming.
|
||||
[EngineStreamTransition.Pause]: {
|
||||
target: EngineStreamState.Paused,
|
||||
},
|
||||
// The stream can be stopped as it's resuming.
|
||||
[EngineStreamTransition.Stop]: {
|
||||
target: EngineStreamState.Stopped,
|
||||
},
|
||||
[EngineStreamTransition.SetMediaStream]: {
|
||||
target: EngineStreamState.Playing,
|
||||
actions: [
|
||||
|
Reference in New Issue
Block a user