diff --git a/resources/language/resource.language.de/strings.po b/resources/language/resource.language.de/strings.po
index 558e697..a5ad46d 100644
--- a/resources/language/resource.language.de/strings.po
+++ b/resources/language/resource.language.de/strings.po
@@ -1233,3 +1233,27 @@ msgstr "Alle – Favoriten"
msgctxt "#30678"
msgid "TV Shows per page"
msgstr "Fernsehsendungen pro Seite"
+
+msgctxt "#30679"
+msgid "Transcode Ziel-Video-Codec"
+msgstr "Transcode Ziel-Video-Codec"
+
+msgctxt "#30680"
+msgid "H.264 (Standard)"
+msgstr "H.264 (Standard)"
+
+msgctxt "#30681"
+msgid "H.265 (HEVC)"
+msgstr "H.265 (HEVC)"
+
+msgctxt "#30682"
+msgid "H264 zum Transcoding zwingen"
+msgstr "H264 zum Transcoding zwingen"
+
+msgctxt "#30683"
+msgid "AV1"
+msgstr "AV1"
+
+msgctxt "#30684"
+msgid "Disk-Caching deaktivieren (nur RAM)"
+msgstr "Disk-Caching deaktivieren (nur RAM)"
diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po
index 04bb92e..0101da1 100644
--- a/resources/language/resource.language.en_gb/strings.po
+++ b/resources/language/resource.language.en_gb/strings.po
@@ -1224,3 +1224,27 @@ msgstr "Recap Skipper"
msgctxt "#30678"
msgid "TV Shows per page"
msgstr "TV Shows per page"
+
+msgctxt "#30679"
+msgid "Transcode target video codec"
+msgstr "Transcode target video codec"
+
+msgctxt "#30680"
+msgid "H.264 (default)"
+msgstr "H.264 (default)"
+
+msgctxt "#30681"
+msgid "H.265 (HEVC)"
+msgstr "H.265 (HEVC)"
+
+msgctxt "#30682"
+msgid "Force transcode h264"
+msgstr "Force transcode h264"
+
+msgctxt "#30683"
+msgid "AV1"
+msgstr "AV1"
+
+msgctxt "#30684"
+msgid "Disable disk caching (RAM only)"
+msgstr "Disable disk caching (RAM only)"
diff --git a/resources/lib/play_utils.py b/resources/lib/play_utils.py
index a4fa08c..8f0641d 100644
--- a/resources/lib/play_utils.py
+++ b/resources/lib/play_utils.py
@@ -1540,7 +1540,12 @@ class PlaybackService(xbmc.Monitor):
def get_item_playback_info(item_id, force_transcode):
+ # Filter codecs that should NEVER be played directly (always force transcoding)
+ # These settings work independently from the target codec setting below
+ # Example: force_transcode_h264=true + target=hevc means: H.264 files will be transcoded to H.265
filtered_codecs = []
+ if settings.getSetting("force_transcode_h264") == "true":
+ filtered_codecs.append("h264")
if settings.getSetting("force_transcode_h265") == "true":
filtered_codecs.append("hevc")
filtered_codecs.append("h265")
@@ -1564,6 +1569,17 @@ def get_item_playback_info(item_id, force_transcode):
audio_bitrate = int(audio_playback_bitrate) * 1000
+ # Determine target video codec for transcoding
+ # Note: force_transcode_* settings filter codecs for DirectPlay independently
+ # This setting only affects what codec the server transcodes TO when transcoding is needed
+ transcode_target_codec_setting = settings.getSetting("transcode_target_video_codec")
+ if transcode_target_codec_setting == "1":
+ transcode_video_codec = "hevc"
+ elif transcode_target_codec_setting == "2":
+ transcode_video_codec = "av1"
+ else:
+ transcode_video_codec = "h264"
+
profile = {
"Name": "Kodi",
"MaxStaticBitrate": bitrate,
@@ -1579,7 +1595,7 @@ def get_item_playback_info(item_id, force_transcode):
"Protocol": "hls",
"Type": "Video",
"AudioCodec": audio_codec,
- "VideoCodec": "h264",
+ "VideoCodec": transcode_video_codec,
"MaxAudioChannels": audio_max_channels
},
{
diff --git a/resources/settings.xml b/resources/settings.xml
index fba244a..4bd42cb 100644
--- a/resources/settings.xml
+++ b/resources/settings.xml
@@ -30,6 +30,8 @@
+
+
@@ -157,6 +159,7 @@
+