| Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
* Add spec-compliant dvh1 HLS variant for Dolby Vision Profile 5
DV Profile 5 has no backward-compatible base layer, so
SUPPLEMENTAL-CODECS cannot be used. The master playlist
currently labels P5 streams as hvc1 in the CODECS field,
even though DynamicHlsController already passes
-tag:v:0 dvh1 -strict -2 to FFmpeg for P5 copy-codec
streams, writing a dvh1 FourCC and dvvC configuration box
into the fMP4 init segment. This mismatch between the
manifest (hvc1) and the bitstream (dvh1) causes
spec-compliant clients like Apple TV and webOS 24+ to set
up an HDR10 pipeline instead of a Dolby Vision one.
Add a dvh1 variant before the existing hvc1 variant for P5
copy-codec streams. Both variants point to the same stream
URL. Spec-compliant clients select dvh1 and activate the
DV decoder path. Legacy clients that reject dvh1 in CODECS
fall through to the hvc1 variant and detect DV from the
init segment, preserving existing behavior.
Fixes #16179
* Address review: support AV1 DoVi P10, add client capability check
- GetDoviString: add isAv1 parameter, return dav1 FourCC for AV1 DoVi
(P10 bl_compat_id=0) and dvh1 for HEVC DoVi (P5)
- Remove redundant IsDovi() check; VideoRangeType.DOVI is sufficient
and correctly limits to profiles without a compatible base layer
- Replace IsDoviRemoved() with client capability check using
GetRequestedRangeTypes(state.VideoStream.Codec) to only emit the
dvh1/dav1 variant for clients that declared DOVI support
- Update comments and doc summary to reflect P5 + P10/bl0 scope
* Use codec string instead of boolean for DoVi FourCC mapping
Replace bool isAv1 with string codec in GetDoviString for
future-proofing when DoVi extends to H.266/VVC or AV2.
* Move AppendDoviPlaylist next to AppendPlaylist
* Fix SA1508: remove blank line before closing brace
* Use AppendLine() instead of Append(Environment.NewLine)
|
|
StreamInfo.ToUrl() generated URLs like `/master.m3u8?&DeviceId=...` (note `?&`)
because `?` was appended to the path and all parameters started with `&`. When
the first optional parameter (DeviceProfileId) was null, the result was a
malformed query string.
This is harmless when clients hit Jellyfin directly (ASP.NET Core tolerates `?&`),
but when accessed through a reverse proxy that parses and re-serializes the URL
(e.g. Home Assistant ingress via aiohttp/yarl), `?&` becomes `?=&` — introducing
an empty-key query parameter. ParseStreamOptions then crashes on `param.Key[0]`
with IndexOutOfRangeException.
Changes:
- StreamInfo.ToUrl(): Track query start position and replace the first `&` with
`?` after all parameters are appended, producing valid query strings
- ParseStreamOptions: Guard against empty query parameter keys
- Tests: Remove .Replace("?&", "?") workaround that masked the bug
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Refactor HLS transcode seeking
|
|
|
|
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
|
|
Fix missing H.264 and AV1 SDR fallbacks in HLS playlist
Original-merge: 01b20d3b75e00909e7a531a625eda5ecb1a76f42
Merged-by: Bond-009 <bond.009@outlook.com>
Backported-by: Bond_009 <bond.009@outlook.com>
|
|
Fix: Add .ts fallback for video streams to prevent crash
Original-merge: 2a0b90e3852edae22d9f7cec197e6e81e9415632
Merged-by: crobibero <cody@robibe.ro>
Backported-by: Bond_009 <bond.009@outlook.com>
|
|
Enhanced HTTP Range request support for. strm file
|
|
|
|
Forward the Range, Accept-Ranges, and Content-
Range headers, improve User-Agent handling,
and adjust the default Content-Type.
|
|
|
|
* Add support for bitstream filter to remove dynamic hdr metadata
* Add support for ffprobe's only_first_vframe for HDR10+ detection
* Add BitStreamFilterOptionType for metadata removal check
* Map HDR10+ metadata to VideoRangeType.cs
Current implementation uses a hack that abuses the EL flag to avoid database schema changes. Should add proper field once EFCore migration is merged.
* Add more Dolby Vision Range types
Out of spec ones are problematic and should be marked as a dedicated invalid type and handled by the server to not crash the player.
Profile 7 videos should not be treated as normal HDR10 videos at all and should remove the metadata before serving.
* Remove dynamic hdr metadata when necessary
* Allow direct playback of HDR10+ videos on HDR10 clients
* Only use dovi codec tag when dovi metadata is not removed
* Handle DV Profile 7 Videos better
* Fix HDR10+ with new bitmask
* Indicate the presence of HDR10+ in HLS SUPPLEMENTAL-CODECS
* Fix Dovi 8.4 not labeled as HLG in HLS
* Fallback to dovi_rpu bsf for av1 when possible
* Fix dovi_rpu cli for av1
* Use correct EFCore db column for HDR10+
* Undo outdated migration
* Add proper hdr10+ migration
* Remove outdated migration
* Rebase to new db code
* Add migrations for Hdr10PlusPresentFlag
* Directly use bsf enum
* Add xmldocs for SupportsBitStreamFilterWithOption
* Make `VideoRangeType.Unknown` explicitly default on api models.
* Unset default for non-api model class
* Use tuples for bsf dictionary for now
|
|
StreamInfo.ToUrl (#9369)
* Rework PR 6168
* Fix test
|
|
|
|
|
|
|
|
Check if the video has an audio track before codec fallback
Original-merge: ff4f3b04411833dd7675be870dde9212394acf95
Merged-by: Bond-009 <bond.009@outlook.com>
Backported-by: Bond_009 <bond.009@outlook.com>
|
|
Fallback to lossy audio codec for bitrate limit
Original-merge: 65f722f23c781d6346741589a681b8b00579fc8a
Merged-by: crobibero <cody@robibe.ro>
Backported-by: Bond_009 <bond.009@outlook.com>
|
|
|
|
* Remove useless checks and dead code
* Enable adaptive bitrate streaming again
* Disable adaptive bitrate streaming by default
|
|
* spelling: anamorphic
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: associated
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: channelinfo
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: eagerly
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: enumerable
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: greater than/less than
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: greater
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: lineup
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: logs out
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: names
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: paging
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: playlist
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: sanitized
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
* spelling: saving
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
---------
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
|
|
|
|
Refactor library.db into jellyfin.db and EFCore
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Previously, we predicted whether the subtitle should be burned in with transcode reasons, but that was not accurate because the actual transcoding codec is only determined after the client has requested the stream. This pass through the option to the `DynamicHlsController` to handle the subtitle burn-in during the actual transcoding process. Now the client should be responsible to conditionally load the subtitle when this option is enabled.
|
|
|
|
|
|
|
|
Co-authored-by: Nyanmisaka <nst799610810@gmail.com>
|
|
I think some people need to change their IDE configuration ;)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Signed-off-by: gnattu <gnattuoc@me.com>
|
|
Overwrite supported codecs for livetv
Original-merge: 2b789807474ec4e7d5f8837a6503a7684fa94778
Merged-by: Bond-009 <bond.009@outlook.com>
Backported-by: Joshua M. Boniface <joshua@boniface.me>
|
|
Relax remuxing requirement for LiveTV
Original-merge: 0392daa10397c40d62e2068cd85e030d9ca2d898
Merged-by: crobibero <cody@robibe.ro>
Backported-by: Joshua M. Boniface <joshua@boniface.me>
|
|
Force more compatible transcoding profile for LiveTV
Original-merge: e7b1162cb30601297f987a6409a7d76b40aa74a6
Merged-by: crobibero <cody@robibe.ro>
Backported-by: Joshua M. Boniface <joshua@boniface.me>
|