mirror of
https://github.com/sussy-code/smov.git
synced 2024-12-29 16:07:40 +01:00
Webkit support
This commit is contained in:
parent
f2f7925cbb
commit
3fad6edaad
3 changed files with 24 additions and 15 deletions
|
@ -54,8 +54,3 @@ body[data-no-select] {
|
|||
.google-cast-button:not(.casting) google-cast-launcher {
|
||||
@apply brightness-[500];
|
||||
}
|
||||
|
||||
:picture-in-picture {
|
||||
opacity: 0.3;
|
||||
filter: blur(5px);
|
||||
}
|
||||
|
|
|
@ -42,3 +42,7 @@ export function canFullscreen(): boolean {
|
|||
export function canPictureInPicture(): boolean {
|
||||
return "pictureInPictureEnabled" in document;
|
||||
}
|
||||
|
||||
export function canWebkitPictureInPicture(): boolean {
|
||||
return "webkitSupportsPresentationMode" in document.createElement("video");
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import {
|
|||
canFullscreenAnyElement,
|
||||
canWebkitFullscreen,
|
||||
canPictureInPicture,
|
||||
canWebkitPictureInPicture,
|
||||
} from "@/utils/detectFeatures";
|
||||
import { MWStreamType } from "@/backend/helpers/streams";
|
||||
import { updateInterface } from "@/video/state/logic/interface";
|
||||
|
@ -205,18 +206,27 @@ export function createVideoStateProvider(
|
|||
updateSource(descriptor, state);
|
||||
}
|
||||
},
|
||||
async togglePictureInPicture() {
|
||||
if (!canPictureInPicture()) return;
|
||||
if (player !== document.pictureInPictureElement) {
|
||||
try {
|
||||
await player.requestPictureInPicture();
|
||||
} catch {
|
||||
togglePictureInPicture() {
|
||||
if (canWebkitPictureInPicture()) {
|
||||
const webkitPlayer = player as any;
|
||||
webkitPlayer.webkitSetPresentationMode(
|
||||
webkitPlayer.webkitPresentationMode === "picture-in-picture"
|
||||
? "inline"
|
||||
: "picture-in-picture"
|
||||
);
|
||||
}
|
||||
if (canPictureInPicture()) {
|
||||
if (player !== document.pictureInPictureElement) {
|
||||
try {
|
||||
player.requestPictureInPicture();
|
||||
} catch {
|
||||
state.interface.isPictureInPicture = false;
|
||||
}
|
||||
state.interface.isPictureInPicture = true;
|
||||
} else {
|
||||
document.exitPictureInPicture();
|
||||
state.interface.isPictureInPicture = false;
|
||||
}
|
||||
state.interface.isPictureInPicture = true;
|
||||
} else {
|
||||
await document.exitPictureInPicture();
|
||||
state.interface.isPictureInPicture = false;
|
||||
}
|
||||
},
|
||||
providerStart() {
|
||||
|
|
Loading…
Reference in a new issue