feat: MPV player for both Android and iOS with added HW decoding PiP (with subtitles) (#1332)

Co-authored-by: Alex Kim <alexkim@Alexs-MacBook-Pro.local>
Co-authored-by: Alex <111128610+Alexk2309@users.noreply.github.com>
Co-authored-by: Simon-Eklundh <simon.eklundh@proton.me>
This commit is contained in:
Fredrik Burmester
2026-01-10 19:35:27 +01:00
committed by GitHub
parent df2f44e086
commit f1575ca48b
98 changed files with 3257 additions and 7448 deletions

View File

@@ -7,7 +7,7 @@ import type React from "react";
import { createContext, useCallback, useContext, useState } from "react";
import { Platform } from "react-native";
import type { Bitrate } from "@/components/BitrateSelector";
import { settingsAtom, VideoPlayerIOS } from "@/utils/atoms/settings";
import { settingsAtom } from "@/utils/atoms/settings";
import { getStreamUrl } from "@/utils/jellyfin/media/getStreamUrl";
import { generateDeviceProfile } from "@/utils/profiles/native";
import { apiAtom, userAtom } from "./JellyfinProvider";
@@ -78,17 +78,10 @@ export const PlaySettingsProvider: React.FC<{ children: React.ReactNode }> = ({
}
try {
// Determine which player is being used:
// - Android always uses VLC
// - iOS uses user setting (VLC is default)
const useVlcPlayer =
Platform.OS === "android" ||
(Platform.OS === "ios" &&
settings.videoPlayerIOS === VideoPlayerIOS.VLC);
// Generate device profile for MPV player
const native = generateDeviceProfile({
platform: Platform.OS as "ios" | "android",
player: useVlcPlayer ? "vlc" : "ksplayer",
player: "mpv",
audioMode: settings.audioTranscodeMode,
});
const data = await getStreamUrl({