Conversation
…te to admin sessions SetTranscodeStreamDetails recorded the encode's video/audio codec, hw accel, and tone-map mode on the upstream session, but never its TargetResolution or TargetBitrateKbps. Only the native (non-compat) playback path threaded those through directly. The admin sessions view falls back to displaying the source's own resolution/bitrate whenever target_resolution is unset for a transcoding session, so every jellycompat-driven transcode — including a MaxStreamingBitrate-capped downscale from Silo-Server#912 — showed as if it were streaming the source unmodified, even though the real ffmpeg process was correctly capped. recordTranscodeStreamDetails now forwards opts.TargetResolution and opts.TargetBitrateKbps through the extended setter, so session sync and the admin activity views reflect what ffmpeg is actually doing. Fixes Silo-Server#920.
|
Warning Review limit reachedNext included review available in 2 minutes. View limit detailsLimit details: You’ve used all 2 included reviews currently available. This review ran on the open-source allowance, not this organization's plan, because the pull request author doesn't have an assigned seat. Waiting won't change this — ask an organization admin to assign them a seat, or add seats in Billing if every seat is already assigned, then retry. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (5)
Comment |
|
All checks pass. Live verification: main alone has no code path that sets a non-empty Also worth noting from that same testing session: selecting different quality tiers in the Jellyfin Android app and comparing the resulting dashboard resolution against Jellyfin's own canonical bitrate→resolution table ( |
Summary
MaxStreamingBitrate-capped downscale from fix(jellycompat): honor MaxStreamingBitrate cap in PlaybackInfo negotiation #912.SetTranscodeStreamDetailsrecorded video/audio codec, hw accel, and tone-map mode on the upstream session, but neverTargetResolution/TargetBitrateKbps— only the native (non-compat) playback path threaded those through. The admin view falls back to displaying the source's own resolution/bitrate whenevertarget_resolutionis unset for a transcoding session.recordTranscodeStreamDetailsnow forwardsopts.TargetResolutionandopts.TargetBitrateKbpsthrough the extended setter, so session sync and the admin activity views reflect what ffmpeg is actually doing.AI disclosure: This PR was developed with AI assistance (Claude).
Test plan
TestSetTranscodeStreamDetails(extended) — verifiesTargetResolution/TargetBitrateKbpsare recorded.TestRecordTranscodeStreamDetailsIncludesTargetResolutionAndBitrate(new) — verifies the jellycompat handler forwards both fields through to the upstream session.gofmt -lclean on all touched files.go build/go test ./internal/playback/...locally.go test ./internal/jellycompat/...(CI).MaxStreamingBitratecap (main alone has no code path that sets a non-empty target resolution/bitrate to forward, so fix(jellycompat): honor MaxStreamingBitrate cap in PlaybackInfo negotiation #912 was needed to produce something real to report), confirmed the admin sessions API showed the correct cappedtarget_resolution/target_bitrate_kbpsinstead of falling back to the source's.