mirror of
https://github.com/streamyfin/streamyfin.git
synced 2025-08-20 18:37:18 +02:00
WIP
This commit is contained in:
@@ -17,7 +17,7 @@ import { getStreamUrl } from "@/utils/jellyfin/media/getStreamUrl";
|
||||
import { writeToLog } from "@/utils/log";
|
||||
import native from "@/utils/profiles/native";
|
||||
import android from "@/utils/profiles/android";
|
||||
import { msToTicks, ticksToMs } from "@/utils/time";
|
||||
import { msToTicks, ticksToSeconds } from "@/utils/time";
|
||||
import { Api } from "@jellyfin/sdk";
|
||||
import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client";
|
||||
import {
|
||||
@@ -301,8 +301,9 @@ export default function page() {
|
||||
|
||||
if (!stream || !item) return null;
|
||||
|
||||
console.log("AudioIndex", audioIndex);
|
||||
const startPosition = item?.UserData?.PlaybackPositionTicks
|
||||
? ticksToMs(item.UserData.PlaybackPositionTicks)
|
||||
? ticksToSeconds(item.UserData.PlaybackPositionTicks)
|
||||
: 0;
|
||||
|
||||
return (
|
||||
@@ -327,7 +328,11 @@ export default function page() {
|
||||
autoplay: true,
|
||||
isNetwork: true,
|
||||
startPosition,
|
||||
initOptions: ["--sub-text-scale=60"],
|
||||
initOptions: [
|
||||
"--sub-text-scale=60",
|
||||
`--sub-track=${subtitleIndex - 2}`, // This refers to the subtitle position index in the subtitles list.
|
||||
// `--audio-track=${audioIndex - 1}`, // This refers to the audio position index in the audio list.
|
||||
],
|
||||
}}
|
||||
style={{ width: "100%", height: "100%" }}
|
||||
onVideoProgress={onProgress}
|
||||
|
||||
@@ -10,9 +10,7 @@ class VlcPlayerView: ExpoView {
|
||||
private var currentGeometryCString: [CChar]?
|
||||
private var lastReportedState: VLCMediaPlayerState?
|
||||
private var lastReportedIsPlaying: Bool?
|
||||
private var isMediaReady: Bool = false
|
||||
private var customSubtitles: [(internalName: String, originalName: String)] = []
|
||||
private var startPosition: Int32?
|
||||
|
||||
// MARK: - Initialization
|
||||
|
||||
@@ -104,12 +102,13 @@ class VlcPlayerView: ExpoView {
|
||||
guard let self = self else { return }
|
||||
|
||||
let mediaOptions = source["mediaOptions"] as? [String: Any] ?? [:]
|
||||
let initOptions = source["initOptions"] as? [Any] ?? []
|
||||
var initOptions = source["initOptions"] as? [Any] ?? []
|
||||
let startPosition = source["startPosition"] as? Int32 ?? 0
|
||||
initOptions.append("--start-time=\(startPosition)")
|
||||
|
||||
let uri = source["uri"] as? String
|
||||
let autoplay = source["autoplay"] as? Bool ?? false
|
||||
let isNetwork = source["isNetwork"] as? Bool ?? false
|
||||
let startPosition = source["startPosition"] as? Int32 ?? 0
|
||||
self.startPosition = startPosition
|
||||
|
||||
guard let uri = uri, !uri.isEmpty else {
|
||||
print("Error: Invalid or empty URI")
|
||||
@@ -162,10 +161,6 @@ class VlcPlayerView: ExpoView {
|
||||
if autoplay {
|
||||
print("Playing...")
|
||||
self.play()
|
||||
// if startPosition > 0 {
|
||||
// print("Debug: Starting at position: \(startPosition)")
|
||||
// self.seekTo(startPosition)
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -584,11 +579,10 @@ extension VlcPlayerView: VLCMediaPlayerDelegate {
|
||||
}
|
||||
|
||||
// Dermine if the media has finished loading
|
||||
if player.isPlaying && !self.isMediaReady {
|
||||
self.isMediaReady = true
|
||||
self.onVideoLoadEnd?(stateInfo)
|
||||
self.seekToStartTime()
|
||||
}
|
||||
// if player.isPlaying && !self.isMediaReady {
|
||||
// self.isMediaReady = true
|
||||
// self.onVideoLoadEnd?(stateInfo)
|
||||
// }
|
||||
|
||||
if self.lastReportedState != currentState
|
||||
|| self.lastReportedIsPlaying != player.isPlaying
|
||||
@@ -600,21 +594,21 @@ extension VlcPlayerView: VLCMediaPlayerDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
func seekToStartTime() {
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
guard let self = self, let player = self.mediaPlayer else { return }
|
||||
// func seekToStartTime() {
|
||||
// DispatchQueue.main.async { [weak self] in
|
||||
// guard let self = self, let player = self.mediaPlayer else { return }
|
||||
|
||||
if let startPosition = self.startPosition, startPosition > 0 {
|
||||
print("Debug: Seeking to start position: \(startPosition)")
|
||||
player.time = VLCTime(int: Int32(startPosition))
|
||||
// if let startPosition = self.startPosition, startPosition > 0 {
|
||||
// print("Debug: Seeking to start position: \(startPosition)")
|
||||
// player.time = VLCTime(int: Int32(startPosition))
|
||||
|
||||
// Ensure the player continues playing after seeking
|
||||
if !player.isPlaying {
|
||||
player.play()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// // Ensure the player continues playing after seeking
|
||||
// if !player.isPlaying {
|
||||
// player.play()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
func mediaPlayerTimeChanged(_ aNotification: Notification) {
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
|
||||
@@ -9,7 +9,7 @@ import MediaTypes from "../../constants/MediaTypes";
|
||||
* Device profile for Native video player
|
||||
*/
|
||||
export default {
|
||||
Name: "1. Native iOS Video Profile",
|
||||
Name: "1. Vlc Player",
|
||||
MaxStaticBitrate: 100000000,
|
||||
MaxStreamingBitrate: 120000000,
|
||||
MusicStreamingTranscodingBitrate: 384000,
|
||||
@@ -47,6 +47,7 @@ export default {
|
||||
MaxAudioChannels: "8",
|
||||
MinSegments: "2",
|
||||
BreakOnNonKeyFrames: true,
|
||||
EnableSubtitlesInManifest: true,
|
||||
},
|
||||
{
|
||||
Type: MediaTypes.Audio,
|
||||
@@ -142,5 +143,10 @@ export default {
|
||||
{ Format: "vplayer", Method: "Embed" },
|
||||
{ Format: "vplayer", Method: "External" },
|
||||
{ Format: "vplayer", Method: "Encode" },
|
||||
{ Format: "vtt", Method: "Embed" },
|
||||
{ Format: "vtt", Method: "External" },
|
||||
{ Format: "vtt", Method: "Encode" },
|
||||
{ Format: "webvtt", Method: "Embed" },
|
||||
{ Format: "webvtt", Method: "External" },
|
||||
],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user