diff --git a/app/(auth)/vlc-player.tsx b/app/(auth)/vlc-player.tsx
index 836e78a2..46cce362 100644
--- a/app/(auth)/vlc-player.tsx
+++ b/app/(auth)/vlc-player.tsx
@@ -17,7 +17,7 @@ import { getBackdropUrl } from "@/utils/jellyfin/image/getBackdropUrl";
import { getStreamUrl } from "@/utils/jellyfin/media/getStreamUrl";
import { writeToLog } from "@/utils/log";
import native from "@/utils/profiles/native";
-import { msToTicks } from "@/utils/time";
+import { msToTicks, ticksToMs } from "@/utils/time";
import { Api } from "@jellyfin/sdk";
import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client";
import {
@@ -28,7 +28,13 @@ import { useQuery } from "@tanstack/react-query";
import * as Haptics from "expo-haptics";
import { useLocalSearchParams } from "expo-router";
import { useAtomValue } from "jotai";
-import React, { useCallback, useMemo, useRef, useState } from "react";
+import React, {
+ useCallback,
+ useEffect,
+ useMemo,
+ useRef,
+ useState,
+} from "react";
import {
Alert,
Pressable,
@@ -146,7 +152,8 @@ export default function page() {
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
if (isPlaying) {
- videoRef.current?.pause();
+ await videoRef.current?.pause();
+
await getPlaystateApi(api).onPlaybackProgress({
itemId: item?.Id!,
audioStreamIndex: audioIndex ? audioIndex : undefined,
@@ -159,6 +166,7 @@ export default function page() {
: "DirectStream",
playSessionId: stream.sessionId,
});
+ console.log("ACtually marked as paused");
} else {
videoRef.current?.play();
await getPlaystateApi(api).onPlaybackProgress({
@@ -230,7 +238,7 @@ export default function page() {
if (isPlaybackStopped === true) return;
if (!item?.Id || !api || !stream) return;
- const { currentTime, isPlaying } = data.nativeEvent;
+ const { currentTime } = data.nativeEvent;
progress.value = currentTime;
const currentTimeInTicks = msToTicks(currentTime);
@@ -251,6 +259,7 @@ export default function page() {
playMethod: stream?.url.includes("m3u8") ? "Transcode" : "DirectStream",
playSessionId: stream.sessionId,
});
+ console.log("Progress", currentTime);
},
[item?.Id, isPlaying, api, isPlaybackStopped]
);
@@ -313,6 +322,10 @@ export default function page() {
if (!stream || !item) return null;
+ const startPosition = item?.UserData?.PlaybackPositionTicks
+ ? ticksToMs(item.UserData.PlaybackPositionTicks)
+ : 0;
+
return (
)}
diff --git a/components/video-player/Controls.tsx b/components/video-player/Controls.tsx
index d3fd44e7..ed4fd788 100644
--- a/components/video-player/Controls.tsx
+++ b/components/video-player/Controls.tsx
@@ -226,7 +226,9 @@ export const Controls: React.FC = ({
isSeeking.value = false;
progress.value = value;
- await seek(Math.max(0, Math.floor(isVlc ? value : value / 10000000)));
+ await seek(
+ Math.max(0, Math.floor(isVlc ? value : ticksToSeconds(value)))
+ );
if (wasPlayingRef.current === true) play();
},
[isVlc]
diff --git a/modules/vlc-player/ios/VlcPlayerView.swift b/modules/vlc-player/ios/VlcPlayerView.swift
index 464b19cf..cc2231bb 100644
--- a/modules/vlc-player/ios/VlcPlayerView.swift
+++ b/modules/vlc-player/ios/VlcPlayerView.swift
@@ -165,13 +165,13 @@ class VlcPlayerView: ExpoView {
self.mediaPlayer?.media = media
- if startPosition > 0 {
- self.mediaPlayer?.time = VLCTime(int: startPosition)
- }
-
if autoplay {
print("Playing...")
self.play()
+ if startPosition > 0 {
+ print("Debug: Starting at position: \(startPosition)")
+ self.seekTo(startPosition)
+ }
}
}
}