Probe: die Gegenprobe war womöglich selbst falsch
Der Server sagt transcoderVideo=1 — er kann umrechnen. Damit ist auch diese Ausrede weg, und es liegt an meiner Anfrage. Zwei Stellen, an denen ich es mir zu leicht gemacht habe. Der Titel für die Gegenprobe kam aus den Startseiten-Reihen, und dort stehen auch Einträge von plex.tv, deren Kennung kein Schlüssel dieses Servers ist. Mit so einem Eintrag prüft die Gegenprobe gar nichts — sie kommt jetzt aus einer echten Mediathek, und vorher wird nachgesehen, ob der Eintrag überhaupt existiert. Und die Antwort der Live-Sitzung war bei 700 Zeichen abgeschnitten, ausgerechnet dort, wo `Part` anfängt — an der einzigen Stelle, die zählt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ab3e1c975e
commit
008f6b7fd7
@@ -88,8 +88,17 @@ if !requested.isEmpty {
|
|||||||
// mitgeschleppt habe, und sie gehört als Erstes geprüft: läuft eine
|
// mitgeschleppt habe, und sie gehört als Erstes geprüft: läuft eine
|
||||||
// gewöhnliche Datei durch, liegt es an Live-TV. Läuft sie nicht durch, habe
|
// gewöhnliche Datei durch, liegt es an Live-TV. Läuft sie nicht durch, habe
|
||||||
// ich tagelang am falschen Ende gesucht.
|
// ich tagelang am falschen Ende gesucht.
|
||||||
if let hubs = try? await server.homeHubs(),
|
// Aus einer echten Mediathek, nicht aus den Startseiten-Reihen: dort stehen
|
||||||
let movie = hubs.flatMap(\.items).first(where: { $0.kind == .movie }) {
|
// auch Einträge von plex.tv, deren Kennung kein Schlüssel dieses Servers ist.
|
||||||
|
// Mit so einem Eintrag prüft die Gegenprobe nichts.
|
||||||
|
let libraries = (try? await server.libraries()) ?? []
|
||||||
|
let movieLibrary = libraries.first { $0.kind == .movie } ?? libraries.first
|
||||||
|
let firstMovie = await { () async -> PlexItem? in
|
||||||
|
guard let movieLibrary else { return nil }
|
||||||
|
return try? await server.items(inLibrary: movieLibrary, limit: 1).items.first
|
||||||
|
}()
|
||||||
|
|
||||||
|
if let movie = firstMovie {
|
||||||
let request = TranscodeRequest(
|
let request = TranscodeRequest(
|
||||||
ratingKey: movie.ratingKey,
|
ratingKey: movie.ratingKey,
|
||||||
maximumBitrate: 4_000,
|
maximumBitrate: 4_000,
|
||||||
|
|||||||
@@ -717,9 +717,11 @@ extension PlexServer {
|
|||||||
// Und wie die Sitzung danach aussieht — dorthin zeigt der Pfad, den
|
// Und wie die Sitzung danach aussieht — dorthin zeigt der Pfad, den
|
||||||
// der Transcoder bekommt.
|
// der Transcoder bekommt.
|
||||||
if let sessionKey = Self.firstSessionKey(in: data) {
|
if let sessionKey = Self.firstSessionKey(in: data) {
|
||||||
|
// Großzügig: bisher war genau dort abgeschnitten, wo `Part`
|
||||||
|
// anfängt — also an der einzigen Stelle, die zählt.
|
||||||
probes.append(ChannelProbe(
|
probes.append(ChannelProbe(
|
||||||
path: sessionKey,
|
path: sessionKey,
|
||||||
result: await rawResponse(forPath: sessionKey, limit: 700)
|
result: await rawResponse(forPath: sessionKey, limit: 2_500)
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1504,6 +1506,12 @@ extension PlexServer {
|
|||||||
public func transcoderBisect(ratingKey: String) async -> [String] {
|
public func transcoderBisect(ratingKey: String) async -> [String] {
|
||||||
let session = UUID().uuidString
|
let session = UUID().uuidString
|
||||||
let path = "/library/metadata/\(ratingKey)"
|
let path = "/library/metadata/\(ratingKey)"
|
||||||
|
|
||||||
|
// Erst prüfen, ob es diesen Eintrag überhaupt gibt. Der Titel für die
|
||||||
|
// Gegenprobe kam aus den Startseiten-Reihen, und dort stehen auch
|
||||||
|
// Einträge von plex.tv, deren Kennung kein Mediathek-Schlüssel ist.
|
||||||
|
// Dann wäre die ganze Gegenprobe wertlos gewesen.
|
||||||
|
var lines = [" Eintrag \(ratingKey): \(await rawResponse(forPath: path, limit: 150))"]
|
||||||
let encoded = path.addingPercentEncoding(withAllowedCharacters: .plexParameterAllowed) ?? path
|
let encoded = path.addingPercentEncoding(withAllowedCharacters: .plexParameterAllowed) ?? path
|
||||||
|
|
||||||
let variants: [(String, [URLQueryItem])] = [
|
let variants: [(String, [URLQueryItem])] = [
|
||||||
@@ -1552,7 +1560,6 @@ extension PlexServer {
|
|||||||
]),
|
]),
|
||||||
]
|
]
|
||||||
|
|
||||||
var lines: [String] = []
|
|
||||||
for (name, items) in variants {
|
for (name, items) in variants {
|
||||||
lines.append(" \(name): \(await probe(items: items, endpoint: "start.m3u8"))")
|
lines.append(" \(name): \(await probe(items: items, endpoint: "start.m3u8"))")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user