Commit Graph

71 Commits

Author SHA1 Message Date
NoFear0411
e5bbb1ea0c Add spec-compliant dvh1 HLS variant for Dolby Vision Profile 5 (#16362)
Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
OpenAPI / OpenAPI - HEAD (push) Has been cancelled
OpenAPI / OpenAPI - BASE (push) Has been cancelled
OpenAPI / OpenAPI - Difference (push) Has been cancelled
OpenAPI / OpenAPI - Publish Unstable Spec (push) Has been cancelled
OpenAPI / OpenAPI - Publish Stable Spec (push) Has been cancelled
Tests / run-tests (macos-latest) (push) Has been cancelled
Tests / run-tests (ubuntu-latest) (push) Has been cancelled
Tests / run-tests (windows-latest) (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
Project Automation / Project board (push) Has been cancelled
Stale PR Check / Check PRs with merge conflicts (push) Has been cancelled
* 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✌️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)
2026-03-28 22:12:06 +01:00
nyanmisaka
582a1d9866 Add TrueHD and DTS codes string for HLS
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2026-01-06 23:15:06 +08:00
nyanmisaka
7f0e71578d Backport pull request #15833 from jellyfin/release-10.11.z
Fix missing H.264 and AV1 SDR fallbacks in HLS playlist

Original-merge: 01b20d3b75

Merged-by: Bond-009 <bond.009@outlook.com>

Backported-by: Bond_009 <bond.009@outlook.com>
2025-12-28 07:22:34 -05:00
gnattu
49ac705867 Improve dynamic HDR metadata handling (#13277)
* 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
2025-04-02 18:06:02 -06:00
JPVenson
42bdb22bfb Fixed namespaces 2025-03-25 16:45:00 +01:00
Bond_009
3aa1ebb500 Enable adaptive bitrate streaming again 2025-01-22 17:36:26 +01:00
Bond_009
47f798827b Remove useless checks and dead code 2025-01-22 17:31:52 +01:00
Niels van Velzen
3b8e614819 Prefer ApiKey over api_key in generated URL's (#13342) 2025-01-11 09:35:44 -07:00
gnattu
ced2d21f7b Add SUPPLEMENTAL-CODECS for Dolby Vision video with fallbacks (#12605) 2024-09-07 11:17:16 -06:00
gnattu
5a8a19e07b Add MediaStream.ReferenceFrameRate for problematic video files (#12603)
Co-authored-by: Nyanmisaka <nst799610810@gmail.com>
2024-09-07 11:16:23 -06:00
Nyanmisaka
00088c2954 Merge branch 'master' into fix-hwa-video-rotation 2024-07-23 15:37:33 +08:00
Cody Robibero
4239de1ee7 Merge pull request #11399 from jellyfin/audio-remux 2024-07-18 08:12:20 -04:00
gnattu
e4101128e0 feat: add audio remux to UniversalAudioController
Signed-off-by: gnattu <gnattuoc@me.com>
2024-07-17 13:35:59 +08:00
gnattu
5df171b3f9 Add remuxing support for VP9
Add VP9 as a valid HLS format to enable remuxing. This is useful when audio processing is required, but the VP9 video can be passed as-is to avoid unnecessary video transcoding.

No VP9 encoder is enabled and should not be enabled. AV1 and HEVC should be preferred over VP9 if video transcoding is required.

Signed-off-by: gnattu <gnattuoc@me.com>
2024-05-16 09:34:21 +08:00
nyanmisaka
95b81ff54a Only streamCopy videos containing rotation data in fMP4
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2024-03-30 06:09:58 +08:00
Dmitry Lyzo
0dde8c0808 Make the bitrate of the fallback stream the same as the original (#9121) 2024-02-12 07:36:54 -07:00
nyanmisaka
5cc451992b Correct VIDEO-RANGE field for HLG content
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2024-02-06 20:36:15 +08:00
Patrick Barron
9215a4d40a Add ITranscodeManager service 2023-12-21 12:53:50 -05:00
Patrick Barron
01fd42cf95 Remove DLNA API code 2023-11-15 20:53:35 -05:00
Bond_009
b62b0ec2b5 Fix warnings 2023-11-14 21:14:21 +01:00
Nick
cd662506a1 Merge branch 'master' into trickplay 2023-10-18 19:27:05 -07:00
Jan Müller
1635d82345 Remove workaround for codec capitalization
This is not required anymore as Shaka Player now supports the correct
codec strings.
2023-09-16 12:57:20 +02:00
Jan Müller
fd022ee685 Merge branch 'master' into flac-hls-fixes
# Conflicts:
#	Jellyfin.Api/Controllers/DynamicHlsController.cs
2023-09-16 12:40:05 +02:00
Bond_009
18a311d32f == null -> is null 2023-08-22 21:14:54 +02:00
Nick
65b269c151 Minor code formatting (cvium) 2023-08-16 21:31:34 -07:00
Jan Müller
19fb061381 Correct the HLS Opus codec string
Apple doesn't support Opus via HLS yet, but if they ever do, they will
definitely expect "Opus" instead of "opus".

See https://mp4ra.org/#/codecs

Fixes: #10066
2023-08-01 19:06:30 +02:00
Jan Müller
e9f23c61c9 Fix the fLaC/flac HLS issue also for audio-only
I moved the first application of the workaround out of the if block
so that it also applies to audio-only streams. The workaround was
extended likewise.

We should first and foremost adhere to the specifications and apply
workarounds afterwards for software that doesn't follow them. So I
turned around the workaround to first output the fLaC variant and then
the alternative flac variant.

Fixes: #10066
2023-08-01 17:11:32 +02:00
Joshua M. Boniface
93b400343e Merge pull request #8147 from Shadowghost/network-rewrite 2023-07-03 13:16:21 -04:00
Nick
6d9e43cfe0 Merge branch 'master' into trickplay 2023-06-28 21:43:23 -07:00
Bond-009
e53e53eb29 Merge pull request #9907 from nyanmisaka/av1e 2023-06-28 17:34:20 +02:00
Shadowghost
20a4509991 Migrate VideoRange and VideoRangeType to Enum 2023-06-28 12:02:20 +02:00
Nick
ab20ceaad6 Migrate to trickplay table to EF. Rename vars/methods/members to have consistent use of tile and thumbnail 2023-06-26 17:40:10 -07:00
nyanmisaka
df880ff785 Apply suggestions from code review
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2023-06-25 21:39:25 +08:00
Nick
fe1c9d43ce Fix using order 2023-06-22 16:23:52 -07:00
nicknsy
b18d6bd356 Trickplay playlist and image controller 2023-06-22 16:19:59 -07:00
nicknsy
515ee90fb9 Hls playlist 2023-06-22 16:19:59 -07:00
nyanmisaka
0df6fd9cf2 Add AV1 support in HLS streaming
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2023-06-20 03:50:02 +08:00
Shadowghost
6cc1203c1b Merge branch 'master' into network-rewrite 2023-05-09 15:25:41 +02:00
Shadowghost
1f15724398 Use source audio bitrate if requested codec is lossless 2023-03-02 20:57:59 +01:00
knackebrot
3e74377036 Calculate output bitrate from output channel count 2023-02-26 22:37:01 +01:00
Shadowghost
20fd05b050 Consistently write IP in upercase 2023-02-17 19:27:36 +01:00
Shadowghost
f5f890e685 Migrate to file-scoped namespaces 2023-02-02 18:50:33 +01:00
Bond_009
4261f15d41 Fix debug builds 2023-01-22 21:38:53 +01:00
Dmitry Lyzo
71a708cdb8 Backport pull request #9092 from jellyfin/release-10.8.z
Don't add additional entries if HEVC encoding is disabled

Original-merge: 2a5efeb3bb

Merged-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com>

Backported-by: Joshua M. Boniface <joshua@boniface.me>
2023-01-22 14:06:19 -05:00
Bond_009
52194f56b5 Replace != null with is not null 2022-12-05 15:01:13 +01:00
Bond_009
c7d50d640e Replace == null with is null 2022-12-05 15:00:20 +01:00
Cody Robibero
5787ab15dc Apply suggestions from code review
Co-authored-by: Bond-009 <bond.009@outlook.com>
2022-11-27 08:02:32 -07:00
nyanmisaka
37daeffafa Add support for OPUS and fixes for FLAC case issue in HLS
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
2022-10-13 18:49:25 +08:00
cvium
5dc30c6a6d fix: use HttpContext and ClaimsPrincipal instead of IAuthorizationContext 2022-10-06 13:57:47 +02:00
Cody Robibero
a168040cc8 Merge pull request #7941 from jellyfin/fix-overflow
(cherry picked from commit fd4ffc6ba3)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
2022-06-29 01:26:14 -04:00