Implement the OpenSubsonic transcoding extension (getTranscodeDecision/getTranscodeStream)
Adds a real capability-matching decision engine: getTranscodeDecision compares the source file's actual scanned format/channels against the client's declared directPlayProfiles first, and only when nothing matches does it search transcodingProfiles for a codec VibeSonic's ffmpeg pipeline can actually encode (mp3/opus/aac), applying any codecProfile limitations (bitrate/channel required constraints) the client listed. canTranscode is never set true for a codec the server has no encoder for, and canDirectPlay is never set true without a matching client profile. getTranscodeStream takes the opaque transcodeParams token the decision returned (never re-derived) plus a real time offset and streams actual transcoded audio via the existing seek-capable transcoding.Manager. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014r98AtcBbevpscWLsfwVvv
This commit is contained in:
@@ -55,7 +55,7 @@ func TestGetOpenSubsonicExtensions(t *testing.T) {
|
||||
// set once Phase 3 is done.
|
||||
for _, want := range []string{
|
||||
"apiKeyAuthentication", "formPost", "getPodcastEpisode", "topSongsByArtistId", "transcodeOffset",
|
||||
"indexBasedQueue", "playbackReport", "songLyrics",
|
||||
"indexBasedQueue", "playbackReport", "songLyrics", "transcoding",
|
||||
} {
|
||||
if !names[want] {
|
||||
t.Errorf("extension %q not advertised: %v", want, names)
|
||||
|
||||
Reference in New Issue
Block a user