<feed xmlns='http://www.w3.org/2005/Atom'>
<title>jellyfin/Jellyfin.Api/Helpers, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://git.lodewillems.com/jellyfin/atom?h=master</id>
<link rel='self' href='https://git.lodewillems.com/jellyfin/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/'/>
<updated>2026-08-04T17:52:29Z</updated>
<entry>
<title>Fix PCM audio transcoding to wav returning HTTP 500 and headerless output</title>
<updated>2026-08-04T17:52:29Z</updated>
<author>
<name>vdatanet</name>
<email>joan@vdata.net</email>
</author>
<published>2026-08-04T17:52:29Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=3578e9a332c64d1aeef6be5e4f2c1a8d271169a8'/>
<id>urn:sha1:3578e9a332c64d1aeef6be5e4f2c1a8d271169a8</id>
<content type='text'>
`GetProgressiveAudioFullCommandLine` forced the raw PCM muxer and a bogus
sample rate whenever the audio encoder was `pcm_*`, regardless of the
container the client asked for. Two separate failures came out of it:

- `-ar ` + `state.BaseRequest.AudioBitRate` used a *bitrate* as a *sample
  rate*, and `AudioBitRate` is optional. When it is absent the argument
  degrades to a bare `-ar`, ffmpeg aborts with `Expected number for ar but
  found: -ar` / `Error opening output files: Invalid argument` (exit 234)
  and the request fails with HTTP 500. Every `GET /Audio/{id}/stream.wav`
  that does not carry an explicit `AudioBitRate` hits this.
  The sample rate was already being set correctly a few lines below from
  `OutputAudioSampleRate`, so the line is dropped rather than repaired.

- `-f s16le` overrode the muxer even for a real container. A request that
  did supply a bitrate (`/Audio/{id}/universal` passes
  `MaxStreamingBitrate`) survived the first bug but produced raw headerless
  samples served under an `audio/wav` content type, so clients saw a body
  with no RIFF header. The raw muxer is now only forced when the requested
  container is actually raw PCM, which keeps the I2S/MCU route from #10321
  working.

Also drop the `containerInternal = ".pcm"` assignment in
`StreamingHelpers.GetStreamingState`: it is written after
`state.OutputContainer` has already been read from the same variable and is
never read again, so it has no effect and only obscures where the output
container comes from.

Verified against ffmpeg 8.1.2 with a 96 kHz FLAC source: before, the wav
command line exits 234; after, it produces a valid `RIFF/WAVE` 48 kHz stereo
`pcm_s16le` file, while the raw `.pcm` route still yields exactly
2 s x 48000 x 2ch x 2 B = 384000 bytes of headerless samples.
</content>
</entry>
<entry>
<title>Merge pull request #17298 from WizardOfYendor1/fix/livetv-published-stream-urls</title>
<updated>2026-08-02T18:23:49Z</updated>
<author>
<name>Cody Robibero</name>
<email>cody@robibe.ro</email>
</author>
<published>2026-08-02T18:23:49Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=f865910a908ba36c5adfd7d6b394ec239077c31e'/>
<id>urn:sha1:f865910a908ba36c5adfd7d6b394ec239077c31e</id>
<content type='text'>
Fix Live TV returning unreachable "server-local" streaming URLs to clients.</content>
</entry>
<entry>
<title>Append base URL if the published server URL override omits it. Fleshed out unit tests to cover that and https-&gt;http reverse proxy scenario(s).</title>
<updated>2026-07-17T18:59:46Z</updated>
<author>
<name>WizardOfYendor1</name>
<email>WizardOfYendor1@users.noreply.github.com</email>
</author>
<published>2026-07-17T14:50:53Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=97e666c56639c5b1f846e684dee391c3b62c0ac9'/>
<id>urn:sha1:97e666c56639c5b1f846e684dee391c3b62c0ac9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Make RequestHelpers.GetOrderBy generic and reuse it in ActivityLogController</title>
<updated>2026-07-14T00:57:15Z</updated>
<author>
<name>Damien Meur</name>
<email>damien.meur@tmonier.com</email>
</author>
<published>2026-07-14T00:57:15Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=56c970c2db491b80e14ceca4c115cfb72b75365c'/>
<id>urn:sha1:56c970c2db491b80e14ceca4c115cfb72b75365c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Reduce GetPlaybackInfo cognitive complexity</title>
<updated>2026-07-11T14:12:42Z</updated>
<author>
<name>WizardOfYendor1</name>
<email>WizardOfYendor1@users.noreply.github.com</email>
</author>
<published>2026-07-11T14:12:42Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=6f189bf2b81c7ddc80b8f9ad7740df752903cd14'/>
<id>urn:sha1:6f189bf2b81c7ddc80b8f9ad7740df752903cd14</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Resolve Live TV client stream URLs per request</title>
<updated>2026-07-11T00:26:29Z</updated>
<author>
<name>WizardOfYendor1</name>
<email>WizardOfYendor1@users.noreply.github.com</email>
</author>
<published>2026-07-11T00:26:29Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=6bbd6dcd447223b0b12f37bd7e40a306ffcb0947'/>
<id>urn:sha1:6bbd6dcd447223b0b12f37bd7e40a306ffcb0947</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix NullReferenceException in GetStreamingState for closed live streams</title>
<updated>2026-06-30T05:13:51Z</updated>
<author>
<name>zachhide</name>
<email>66033020+zachhide@users.noreply.github.com</email>
</author>
<published>2026-06-30T05:13:51Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=8ffb54603adf45975568702ca8a9d69bfe444d75'/>
<id>urn:sha1:8ffb54603adf45975568702ca8a9d69bfe444d75</id>
<content type='text'>
When a client polls the HLS playlist (e.g. live.m3u8) after a live stream has
been disposed because its consumer count dropped to zero,
GetLiveStreamWithDirectStreamProvider returns a null MediaSource. The live
branch of GetStreamingState then dereferenced it unconditionally, throwing a
NullReferenceException and returning HTTP 500 for every poll until the client
re-opens the stream. Guard against the null MediaSource and throw
ResourceNotFoundException so the request returns 404 instead of crashing.

Fixes #17009

Co-Authored-By: Claude Opus 4.8 (1M context) &lt;noreply@anthropic.com&gt;</content>
</entry>
<entry>
<title>Keep the queried item's media source as the playback default</title>
<updated>2026-06-07T21:06:48Z</updated>
<author>
<name>Shadowghost</name>
<email>Ghost_of_Stone@web.de</email>
</author>
<published>2026-06-05T17:41:08Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=6c931dcdda845f5a415190b859bb3f7e0cb781b8'/>
<id>urn:sha1:6c931dcdda845f5a415190b859bb3f7e0cb781b8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Run tree-wide dotnet format</title>
<updated>2026-05-21T18:48:41Z</updated>
<author>
<name>jakobkukla</name>
<email>jakob.kukla@gmail.com</email>
</author>
<published>2026-04-16T09:38:01Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=37350282cc18a977162dcf14fe9b6068d29d6edf'/>
<id>urn:sha1:37350282cc18a977162dcf14fe9b6068d29d6edf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix GHSA-jh22-fw8w-2v9x</title>
<updated>2026-04-06T09:37:45Z</updated>
<author>
<name>Shadowghost</name>
<email>Ghost_of_Stone@web.de</email>
</author>
<published>2026-03-31T07:30:45Z</published>
<link rel='alternate' type='text/html' href='https://git.lodewillems.com/jellyfin/commit/?id=0bf7653e3648a86bd0c6f224fcea341a6fdb8a85'/>
<id>urn:sha1:0bf7653e3648a86bd0c6f224fcea341a6fdb8a85</id>
<content type='text'>
</content>
</entry>
</feed>
