Add configurable transcode target video codec support
Adds new playback options to select transcode target codec (H.264, H.265/HEVC, AV1) and force H.264 transcoding. This enables optimal codec selection for client hardware, especially useful for devices with H.265 hardware decoding like Raspberry Pi 5. Target codec and source codec filtering now work independently for maximum flexibility.
This commit is contained in:
@@ -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)"
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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
|
||||
},
|
||||
{
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
<setting type="sep" />
|
||||
<setting id="max_stream_bitrate" type="enum" label="30208" values="0.5 Mbps|1 Mbps|1.5 Mbps|2.0 Mbps|2.5 Mbps|3.0 Mbps|4.0 Mbps|5.0 Mbps|6.0 Mbps|7.0 Mbps|8.0 Mbps|9.0 Mbps|10.0 Mbps|12.0 Mbps|14.0 Mbps|16.0 Mbps|18.0 Mbps|20.0 Mbps|25.0 Mbps|30.0 Mbps|35.0 Mbps|40.0 Mbps|100.0 Mbps|1000.0 Mbps [default]|Maximum" visible="true" default="23" />
|
||||
<setting id="allow_direct_file_play" type="bool" label="30433" default="false" visible="true" enable="true" />
|
||||
<setting id="transcode_target_video_codec" type="select" label="30679" lvalues="30680|30681|30683" default="0" visible="true" enable="true" />
|
||||
<setting id="force_transcode_h264" type="bool" label="30682" default="false" visible="true" enable="true" />
|
||||
<setting id="force_transcode_h265" type="bool" label="30236" default="false" visible="true" enable="true" />
|
||||
<setting id="force_transcode_mpeg2" type="bool" label="30239" default="false" visible="true" enable="true" />
|
||||
<setting id="force_transcode_msmpeg4v3" type="bool" label="30240" default="false" visible="true" enable="true" />
|
||||
@@ -157,6 +159,7 @@
|
||||
<setting id="profile_count" type="slider" label="30010" default="0" range="0,1,20" option="int" visible="true" />
|
||||
<setting id="log_debug" type="bool" label="30027" default="false" visible="true" enable="true" />
|
||||
<setting id="log_timing" type="bool" label="30015" default="false" visible="true" enable="true" />
|
||||
<setting id="disable_disk_cache" type="bool" label="30684" default="false" visible="true" enable="true" />
|
||||
<setting id="use_cache" type="bool" label="30345" default="true" visible="true" enable="true" />
|
||||
<setting id="use_cached_widget_data" type="bool" label="30441" default="false" visible="true" enable="true" />
|
||||
<setting id="showLoadProgress" type="bool" label="30120" default="false" visible="true" enable="true" />
|
||||
|
||||
Reference in New Issue
Block a user