Use full resolution aspect ratio when available (#11173)

* base recordings and live views off of actual video resolution

* don't set for jsmpeg

* reset when changing main cam

* rename

* Only use resolution for main camera

* fix lint

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
This commit is contained in:
Josh Hawkins
2024-04-30 07:52:56 -05:00
committed by GitHub
parent 1c9626ecff
commit 11ff7cb2b7
8 changed files with 100 additions and 13 deletions

View File

@@ -1,8 +1,15 @@
import { MutableRefObject, useEffect, useRef, useState } from "react";
import {
MutableRefObject,
useCallback,
useEffect,
useRef,
useState,
} from "react";
import Hls from "hls.js";
import { isAndroid, isDesktop, isMobile } from "react-device-detect";
import { TransformComponent, TransformWrapper } from "react-zoom-pan-pinch";
import VideoControls from "./VideoControls";
import { VideoResolutionType } from "@/types/live";
// Android native hls does not seek correctly
const USE_NATIVE_HLS = !isAndroid;
@@ -21,6 +28,7 @@ type HlsVideoPlayerProps = {
onPlayerLoaded?: () => void;
onTimeUpdate?: (time: number) => void;
onPlaying?: () => void;
setFullResolution?: React.Dispatch<React.SetStateAction<VideoResolutionType>>;
};
export default function HlsVideoPlayer({
videoRef,
@@ -31,6 +39,7 @@ export default function HlsVideoPlayer({
onPlayerLoaded,
onTimeUpdate,
onPlaying,
setFullResolution,
}: HlsVideoPlayerProps) {
// playback
@@ -38,6 +47,18 @@ export default function HlsVideoPlayer({
const [useHlsCompat, setUseHlsCompat] = useState(false);
const [loadedMetadata, setLoadedMetadata] = useState(false);
const handleLoadedMetadata = useCallback(() => {
setLoadedMetadata(true);
if (videoRef.current) {
if (setFullResolution) {
setFullResolution({
width: videoRef.current.videoWidth,
height: videoRef.current.videoHeight,
});
}
}
}, [videoRef, setFullResolution]);
useEffect(() => {
if (!videoRef.current) {
return;
@@ -193,7 +214,7 @@ export default function HlsVideoPlayer({
: undefined
}
onLoadedData={onPlayerLoaded}
onLoadedMetadata={() => setLoadedMetadata(true)}
onLoadedMetadata={handleLoadedMetadata}
onEnded={onClipEnded}
onError={(e) => {
if (