From f536bad238c266c451211ee59bf7522e85da3192 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sat, 20 Jul 2024 09:47:10 +0200 Subject: [PATCH 01/91] [Bento4] Version bump 1.6.0-641-2-Omega --- depends/common/bento4/bento4.sha256 | 2 +- depends/common/bento4/bento4.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/depends/common/bento4/bento4.sha256 b/depends/common/bento4/bento4.sha256 index 5a9710c48..11ea9f30b 100644 --- a/depends/common/bento4/bento4.sha256 +++ b/depends/common/bento4/bento4.sha256 @@ -1 +1 @@ -f1f8cfa4f7cb651b609e587f825607cb4b06fe5b08af876fd0154a434f9a5315 \ No newline at end of file +3e4970a33700f1844513bb0c86c0c2de9f638bdc03547d2b7421f558962b85f1 \ No newline at end of file diff --git a/depends/common/bento4/bento4.txt b/depends/common/bento4/bento4.txt index 25f31e98f..c86764625 100644 --- a/depends/common/bento4/bento4.txt +++ b/depends/common/bento4/bento4.txt @@ -1 +1 @@ -bento4 https://github.com/xbmc/Bento4/archive/refs/tags/1.6.0-641-Omega.tar.gz +bento4 https://github.com/xbmc/Bento4/archive/refs/tags/1.6.0-641-2-Omega.tar.gz From 05fa96943b9ac22f6557400c8e861e4318e1f353 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sat, 20 Jul 2024 17:48:09 +0200 Subject: [PATCH 02/91] [KodiProps] Moved "keyids" to "license" dict --- src/CompKodiProps.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/CompKodiProps.cpp b/src/CompKodiProps.cpp index 1e00f2c1f..3b4d25802 100644 --- a/src/CompKodiProps.cpp +++ b/src/CompKodiProps.cpp @@ -394,12 +394,17 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmConfig(const std::string& data) continue; } - if (jDictVal.HasMember("keyids") && jDictVal["keyids"].IsObject()) + if (jDictVal.HasMember("license") && jDictVal["license"].IsObject()) { - for (auto const& keyid : jDictVal["keyids"].GetObject()) + auto& jDictLic = jDictVal["license"]; + + if (jDictLic.HasMember("keyids") && jDictLic["keyids"].IsArray()) { - if (keyid.name.IsString() && keyid.value.IsString()) - drmCfg.m_keys[keyid.name.GetString()] = (keyid.value.GetString()); + for (auto const& keyid : jDictLic["keyids"].GetObject()) + { + if (keyid.name.IsString() && keyid.value.IsString()) + drmCfg.m_keys[keyid.name.GetString()] = (keyid.value.GetString()); + } } } } From a2c20ed25897cd12be49af78c852101982df066f Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sat, 20 Jul 2024 20:22:55 +0200 Subject: [PATCH 03/91] [clearkey] Fix missing argument to log --- src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index cc466e2b4..989ca7d13 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -114,7 +114,7 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( if (STRING::KeyExists(keys, hexDefKid)) UTILS::STRING::ToHexBytes(keys.at(hexDefKid), hexKey); else - LOG::LogF(LOGERROR, "Missing KeyId \"%s\" on DRM configuration"); + LOG::LogF(LOGERROR, "Missing KeyId \"%s\" on DRM configuration", defaultKeyId.data()); } const AP4_UI08* ap4Key = reinterpret_cast(hexKey.data()); From 6d091e4efc83fa7414ca51e7069f542eb38efbac Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 21 Jul 2024 15:27:55 +0200 Subject: [PATCH 04/91] [KodiProps] New "drm_legacy" property --- inputstream.adaptive/addon.xml.in | 2 +- src/CompKodiProps.cpp | 94 +++++++++++++++++++++++++++++++ src/CompKodiProps.h | 1 + 3 files changed, 96 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 856a8a99a..8669df280 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -10,7 +10,7 @@ name="adaptive" extension="" tags="true" - listitemprops="drm|license_type|license_key|license_url|license_url_append|license_data|license_flags|manifest_type|server_certificate|manifest_update_parameter|manifest_upd_params|manifest_params|manifest_headers|stream_params|stream_headers|original_audio_language|play_timeshift_buffer|pre_init_data|stream_selection_type|chooser_bandwidth_max|chooser_resolution_max|chooser_resolution_secure_max|live_delay|internal_cookies|config|manifest_config" + listitemprops="drm|drm_legacy|license_type|license_key|license_url|license_url_append|license_data|license_flags|manifest_type|server_certificate|manifest_update_parameter|manifest_upd_params|manifest_params|manifest_headers|stream_params|stream_headers|original_audio_language|play_timeshift_buffer|pre_init_data|stream_selection_type|chooser_bandwidth_max|chooser_resolution_max|chooser_resolution_secure_max|live_delay|internal_cookies|config|manifest_config" library_@PLATFORM@="@LIBRARY_FILENAME@"/> @PLATFORM@ diff --git a/src/CompKodiProps.cpp b/src/CompKodiProps.cpp index 3b4d25802..01c6db0aa 100644 --- a/src/CompKodiProps.cpp +++ b/src/CompKodiProps.cpp @@ -11,6 +11,7 @@ #include "CompSettings.h" #include "decrypters/Helpers.h" #include "utils/StringUtils.h" +#include "utils/UrlUtils.h" #include "utils/Utils.h" #include "utils/log.h" @@ -55,6 +56,8 @@ constexpr std::string_view PROP_PRE_INIT_DATA = "inputstream.adaptive.pre_init_d constexpr std::string_view PROP_CONFIG = "inputstream.adaptive.config"; constexpr std::string_view PROP_DRM = "inputstream.adaptive.drm"; +constexpr std::string_view PROP_DRM_LEGACY = "inputstream.adaptive.drm_legacy"; + constexpr std::string_view PROP_INTERNAL_COOKIES = "inputstream.adaptive.internal_cookies"; //! @todo: to remove on Kodi 22 // Chooser's properties @@ -238,6 +241,14 @@ ADP::KODI_PROPS::CCompKodiProps::CCompKodiProps(const std::map pipedCfg = STRING::SplitToVec(data, '|'); + if (pipedCfg.size() > 3) + { + LOG::LogF(LOGERROR, "Malformed value on the DRM legacy property"); + return false; + } + + std::string keySystem = STRING::Trim(pipedCfg[0]); + + std::string licenseStr; + if (pipedCfg.size() > 1) + licenseStr = STRING::Trim(pipedCfg[1]); + + std::string licenseHeaders; + if (pipedCfg.size() > 2) + licenseHeaders = STRING::Trim(pipedCfg[2]); + + if (!DRM::IsKeySystemSupported(keySystem)) + { + LOG::LogF(LOGERROR, "Unknown key system \"%s\" on DRM legacy property", keySystem.data()); + return false; + } + + m_licenseType = keySystem; + + // Clear existing value to prevent possible mix with other similar properties + m_licenseKey.clear(); + + if (!licenseStr.empty()) + { + if (URL::IsValidUrl(licenseStr)) // License server URL + { + m_licenseKey = licenseStr; + } + else // Assume are keyid's for ClearKey DRM + { + // Expected TEXT structure: "kid1:key1,kid2:key2,..." + DrmCfg& drmCfg = m_drmConfigs[keySystem]; + std::vector keyIdPair = STRING::SplitToVec(licenseStr, ','); + + for (const std::string& keyPairStr : keyIdPair) + { + std::vector keyPair = STRING::SplitToVec(keyPairStr, ':'); + if (keyPair.size() != 2) + { + LOG::LogF(LOGERROR, "Ignored malformed ClearKey kid/key pair"); + continue; + } + drmCfg.m_keys[STRING::Trim(keyPair[0])] = STRING::Trim(keyPair[1]); + } + } + } + + //! @todo: temporary stored default DRM values here just for convenience + //! since we need to construct the "license key" string + //! these values are stored also on DRM's implementation, + //! they must be placed in an appropriate place with the future DRM config rework + if (licenseHeaders.empty()) + { + if (keySystem == DRM::KS_WIDEVINE) + licenseHeaders = "Content-Type=application%2Foctet-stream"; + else if (keySystem == DRM::KS_PLAYREADY) + licenseHeaders = "Content-Type=text%2Fxml&SOAPAction=http%3A%2F%2Fschemas.microsoft.com%" + "2FDRM%2F2007%2F03%2Fprotocols%2FAcquireLicense"; + else if (keySystem == DRM::KS_WISEPLAY) + licenseHeaders = "Content-Type=application/json"; + } + + m_licenseKey += "|" + licenseHeaders + "|R{SSM}|R"; + return true; +} diff --git a/src/CompKodiProps.h b/src/CompKodiProps.h index 7970db15d..69f37ca46 100644 --- a/src/CompKodiProps.h +++ b/src/CompKodiProps.h @@ -136,6 +136,7 @@ class ATTR_DLL_LOCAL CCompKodiProps void ParseManifestConfig(const std::string& data); bool ParseDrmConfig(const std::string& data); + bool ParseDrmLegacyConfig(const std::string& data); std::string m_licenseType; std::string m_licenseKey; From 99cb8e7a3170607d72cdb106a980ca6759d0abc0 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 22 Jul 2024 15:10:24 +0200 Subject: [PATCH 05/91] [DashTree] Always ensure period duration --- src/parser/DASHTree.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/parser/DASHTree.cpp b/src/parser/DASHTree.cpp index c2dc6e5a1..783b25a0d 100644 --- a/src/parser/DASHTree.cpp +++ b/src/parser/DASHTree.cpp @@ -218,14 +218,12 @@ bool adaptive::CDashTree::ParseManifest(const std::string& data) // For multi-periods streaming must be ensured the duration of each period: // - If "duration" attribute is provided on each Period tag, do nothing // - If "duration" attribute is missing, but "start" attribute, use this last one to calculate the duration - // - If both attributes are missing, try get the duration from a representation + // - If both attributes are missing, try get the duration from a representation, + // e.g. a single period in a live stream the duration must be determined by the available segments uint64_t totalDuration{0}; // Calculated duration, in ms uint64_t mpdTotalDuration = m_mediaPresDuration; // MPD total duration, in ms - if (mpdTotalDuration == 0) - mpdTotalDuration = m_timeShiftBufferDepth; - if (!IsLive()) { for (auto itPeriod = m_periods.begin(); itPeriod != m_periods.end();) { @@ -288,6 +286,9 @@ bool adaptive::CDashTree::ParseManifest(const std::string& data) } } + if (mpdTotalDuration == 0) + mpdTotalDuration = m_timeShiftBufferDepth; + if (mpdTotalDuration > 0) m_totalTime = mpdTotalDuration; else From a85ac8bb2e38eb8cf051f798788ab5468ce5114a Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 23 Jul 2024 11:16:52 +0200 Subject: [PATCH 06/91] [KodiProps] Removed inputstream.adaptive.drm Will be introduced on next Kodi versions --- inputstream.adaptive/addon.xml.in | 2 +- src/CompKodiProps.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 8669df280..2472533c0 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -10,7 +10,7 @@ name="adaptive" extension="" tags="true" - listitemprops="drm|drm_legacy|license_type|license_key|license_url|license_url_append|license_data|license_flags|manifest_type|server_certificate|manifest_update_parameter|manifest_upd_params|manifest_params|manifest_headers|stream_params|stream_headers|original_audio_language|play_timeshift_buffer|pre_init_data|stream_selection_type|chooser_bandwidth_max|chooser_resolution_max|chooser_resolution_secure_max|live_delay|internal_cookies|config|manifest_config" + listitemprops="drm_legacy|license_type|license_key|license_url|license_url_append|license_data|license_flags|manifest_type|server_certificate|manifest_update_parameter|manifest_upd_params|manifest_params|manifest_headers|stream_params|stream_headers|original_audio_language|play_timeshift_buffer|pre_init_data|stream_selection_type|chooser_bandwidth_max|chooser_resolution_max|chooser_resolution_secure_max|live_delay|internal_cookies|config|manifest_config" library_@PLATFORM@="@LIBRARY_FILENAME@"/> @PLATFORM@ diff --git a/src/CompKodiProps.cpp b/src/CompKodiProps.cpp index 01c6db0aa..bb72a3487 100644 --- a/src/CompKodiProps.cpp +++ b/src/CompKodiProps.cpp @@ -233,6 +233,7 @@ ADP::KODI_PROPS::CCompKodiProps::CCompKodiProps(const std::map Date: Tue, 30 Jul 2024 15:48:49 +0200 Subject: [PATCH 07/91] Replaced deprecated sprintf with snprintf --- lib/cdm/cdm/media/cdm/cdm_adapter.cc | 2 +- src/common/SegTemplate.cpp | 4 ++-- src/test/TestUtils.cpp | 21 +++++++++++++++++++++ src/utils/DigestMD5Utils.cpp | 4 +++- src/utils/StringUtils.cpp | 4 ++-- 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/lib/cdm/cdm/media/cdm/cdm_adapter.cc b/lib/cdm/cdm/media/cdm/cdm_adapter.cc index 0d5e961fc..22f872257 100644 --- a/lib/cdm/cdm/media/cdm/cdm_adapter.cc +++ b/lib/cdm/cdm/media/cdm/cdm_adapter.cc @@ -623,7 +623,7 @@ void CdmAdapter::OnSessionKeysChange(const char* session_id, char buffer[128]; char* bufferPtr{buffer}; for (uint32_t j{0}; j < keys_info[i].key_id_size; ++j) - bufferPtr += sprintf(bufferPtr, "%02X", (int)keys_info[i].key_id[j]); + bufferPtr += std::snprintf(bufferPtr, 3, "%02X", (int)keys_info[i].key_id[j]); LOG::Log(LOGDEBUG, "%s: Sessionkey %s status: %d syscode: %u", __func__, buffer, keys_info[i].status, keys_info[i].system_code); diff --git a/src/common/SegTemplate.cpp b/src/common/SegTemplate.cpp index 5cc65e375..dea1b6ec0 100644 --- a/src/common/SegTemplate.cpp +++ b/src/common/SegTemplate.cpp @@ -13,7 +13,7 @@ #include "kodi/tools/StringUtils.h" -#include // sprintf +#include // snprintf using namespace PLAYLIST; using namespace UTILS; @@ -198,7 +198,7 @@ std::string PLAYLIST::CSegmentTemplate::FormatIdentifier(std::string_view identi } char substitution[128]; - if (std::sprintf(substitution, formatTag.c_str(), value) > 0) + if (std::snprintf(substitution, 128, formatTag.c_str(), value) > 0) return substitution; else LOG::LogF(LOGERROR, "Cannot convert value \"%llu\" with \"%s\" format tag", value, diff --git a/src/test/TestUtils.cpp b/src/test/TestUtils.cpp index 3607898e9..f536fd392 100644 --- a/src/test/TestUtils.cpp +++ b/src/test/TestUtils.cpp @@ -10,6 +10,8 @@ #include "../common/AdaptiveTreeFactory.h" #include "../common/SegTemplate.h" +#include "../utils/DigestMD5Utils.h" +#include "../utils/StringUtils.h" #include "../utils/UrlUtils.h" #include "../utils/XMLUtils.h" @@ -266,3 +268,22 @@ TEST_F(UtilsTest, XMLDateTimeConversions) EXPECT_EQ(XML::ParseDate("2024-05-07T17:00:21.989+0200"), 1715101221.989); } + +TEST_F(UtilsTest, MD5HashTest) +{ + std::string strTest = "Test"; + DIGEST::MD5 md5; + md5.Update(strTest.c_str(), static_cast(strTest.size())); + md5.Finalize(); + + EXPECT_EQ(md5.HexDigest(), "0cbc6611f5540bd0809a388dc95a615b"); +} + +TEST_F(UtilsTest, UrlEncodeDecode) +{ + const std::string strTest = "abc123-._!()~&%\xC3\xA8\xC3\xB9"; // abc123-._!()~&%ищ + std::string encoded = STRING::URLEncode(strTest); + + EXPECT_EQ(encoded, "abc123-._!()~%26%25%C3%A8%C3%B9"); + EXPECT_EQ(STRING::URLDecode(encoded), strTest); +} diff --git a/src/utils/DigestMD5Utils.cpp b/src/utils/DigestMD5Utils.cpp index 1ead6ee97..f410832ad 100644 --- a/src/utils/DigestMD5Utils.cpp +++ b/src/utils/DigestMD5Utils.cpp @@ -255,7 +255,9 @@ std::string UTILS::DIGEST::MD5::HexDigest() const char buf[33]; for (int i = 0; i < 16; i++) - sprintf(buf + i * 2, "%02x", m_digest[i]); + { + std::snprintf(buf + i * 2, 3, "%02x", m_digest[i]); + } buf[32] = 0; return std::string(buf); diff --git a/src/utils/StringUtils.cpp b/src/utils/StringUtils.cpp index 20494a921..c051dc63f 100644 --- a/src/utils/StringUtils.cpp +++ b/src/utils/StringUtils.cpp @@ -150,8 +150,8 @@ std::string UTILS::STRING::URLEncode(std::string_view strURLData) else { result.append("%"); - char buf[3]; - sprintf(buf, "%.2X", c); + char buf[4]; // 3 chars + null + std::snprintf(buf, 4, "%.2X", static_cast(c)); result.append(buf); } } From 208b998cd7babd13a3ebff0395a2046b5b1124b8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 14:04:57 +0000 Subject: [PATCH 08/91] changelog and version v21.5.0 (2024-07-30) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 2472533c0..1842af3ac 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 94bb7f31e..0b93714ef 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,13 @@ +v21.5.0 (2024-07-30) +- Implemented DRM ClearKey support (for Dash, HLS only) +- New property inputstream.adaptive.drm_legacy easy way to configure DRM, see details on Wiki +- New property inputstream.adaptive.config allow to configure curl SSL verify peer and cookies, see details on Wiki +- [HLS] Fix crash / video freeze when switching stream quality with adaptive streaming +- [DASH] Fix regression on live streaming video seek +- [DASH] Fix lost attribute data with manifests that have adaptation set switching +- Deprecated inputstream.adaptive.internal_cookies, moved to the new inputstream.adaptive.config +- Updated bento4 dependency to upstream (C++20 compatibility) + v21.4.10 (2024-06-24) - Fix problem on live streams where buffering block subtitles processing - Limited subtitles PTS workaround to HLS attempt to make Dash work From 10784ff3c0568b24c2a5e006e9d8e6f655a93351 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 1 Aug 2024 10:41:41 +0200 Subject: [PATCH 09/91] [AdaptiveTree] IsLastSegment return false if period is the last one --- src/common/AdaptiveTree.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/AdaptiveTree.cpp b/src/common/AdaptiveTree.cpp index e0741dd23..c2c8e9109 100644 --- a/src/common/AdaptiveTree.cpp +++ b/src/common/AdaptiveTree.cpp @@ -197,6 +197,10 @@ namespace adaptive if (IsLive()) { + // Assume that if the period is the last, it never ends until segments can no longer be downloaded + if (m_periods.back().get() == segPeriod) + return false; + if (segPeriod->GetDuration() > 0 && segPeriod->GetStart() != NO_VALUE) { const uint64_t pDurMs = segPeriod->GetDuration() * 1000 / segPeriod->GetTimescale(); From 8dcad491ce344195baa0a124f0146a4a98f94901 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sat, 3 Aug 2024 08:31:11 +0200 Subject: [PATCH 10/91] [Bento4] Version bump 1.6.0-641-3-Omega --- depends/common/bento4/bento4.sha256 | 2 +- depends/common/bento4/bento4.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/depends/common/bento4/bento4.sha256 b/depends/common/bento4/bento4.sha256 index 11ea9f30b..ea118ca9d 100644 --- a/depends/common/bento4/bento4.sha256 +++ b/depends/common/bento4/bento4.sha256 @@ -1 +1 @@ -3e4970a33700f1844513bb0c86c0c2de9f638bdc03547d2b7421f558962b85f1 \ No newline at end of file +a9b231b63159b3a4d9e47c5328b476308852bf092ccb9ce98f7cf46a386465ce \ No newline at end of file diff --git a/depends/common/bento4/bento4.txt b/depends/common/bento4/bento4.txt index c86764625..72cf572be 100644 --- a/depends/common/bento4/bento4.txt +++ b/depends/common/bento4/bento4.txt @@ -1 +1 @@ -bento4 https://github.com/xbmc/Bento4/archive/refs/tags/1.6.0-641-2-Omega.tar.gz +bento4 https://github.com/xbmc/Bento4/archive/refs/tags/1.6.0-641-3-Omega.tar.gz From 3f7665b75497f5e1d45c520e7bfb1c45a5302863 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 2 Aug 2024 17:16:55 +0200 Subject: [PATCH 11/91] Fix wrong Dash KID data format and cleanups --- src/Session.cpp | 17 +-- src/common/AdaptiveDecrypter.h | 4 +- src/decrypters/Helpers.cpp | 130 ++++++++++++++++++ src/decrypters/Helpers.h | 26 ++++ src/decrypters/IDecrypter.h | 6 +- .../ClearKeyCencSingleSampleDecrypter.cpp | 22 +-- .../ClearKeyCencSingleSampleDecrypter.h | 16 +-- src/decrypters/clearkey/ClearKeyDecrypter.cpp | 4 +- src/decrypters/clearkey/ClearKeyDecrypter.h | 6 +- .../widevine/WVCencSingleSampleDecrypter.cpp | 34 ++--- .../widevine/WVCencSingleSampleDecrypter.h | 14 +- src/decrypters/widevine/WVDecrypter.cpp | 6 +- src/decrypters/widevine/WVDecrypter.h | 6 +- .../WVCencSingleSampleDecrypter.cpp | 11 +- .../WVCencSingleSampleDecrypter.h | 8 +- .../widevineandroid/WVDecrypter.cpp | 6 +- src/decrypters/widevineandroid/WVDecrypter.h | 6 +- src/parser/DASHTree.cpp | 26 +--- src/parser/HLSTree.cpp | 38 +++-- src/parser/PRProtectionParser.cpp | 17 ++- src/parser/PRProtectionParser.h | 17 ++- src/parser/SmoothTree.cpp | 4 +- src/test/TestDASHTree.cpp | 5 +- src/test/manifests/mpd/pssh_default_kid.mpd | 2 +- src/utils/StringUtils.cpp | 16 +++ src/utils/StringUtils.h | 20 +++ src/utils/Utils.cpp | 98 ------------- src/utils/Utils.h | 6 +- 28 files changed, 321 insertions(+), 250 deletions(-) diff --git a/src/Session.cpp b/src/Session.cpp index 75e55988b..7ef176758 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -327,11 +327,11 @@ bool CSession::PreInitializeDRM(std::string& challengeB64, initData = BASE64::Decode(psshData); // Decode the provided KID - std::string decKid{BASE64::DecodeToStr(kidData)}; + const std::vector decKid = BASE64::Decode(kidData); CCdmSession& session(m_cdmSessions[1]); - std::string hexKid{StringUtils::ToHexadecimal(decKid)}; + std::string hexKid{STRING::ToHexadecimal(decKid)}; LOG::LogF(LOGDEBUG, "Initializing session with KID: %s", hexKid.c_str()); if (m_decrypter && (session.m_cencSingleSampleDecrypter = @@ -420,7 +420,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) LOG::Log(LOGDEBUG, "License data: Create Widevine PSSH for SmoothStreaming, based on " "license data property"); } - CreateISMlicense(sessionPsshset.defaultKID_, licenseData, initData); + DRM::CreateISMlicense(sessionPsshset.defaultKID_, licenseData, initData); } else if (licenseType == "com.microsoft.playready") { @@ -462,7 +462,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) } CCdmSession& session{m_cdmSessions[ses]}; - std::string defaultKid = sessionPsshset.defaultKID_; + const std::vector defaultKid = DRM::ConvertKidStrToBytes(sessionPsshset.defaultKID_); if (addDefaultKID && ses == 1 && session.m_cencSingleSampleDecrypter) { @@ -475,8 +475,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) if (m_decrypter && !defaultKid.empty()) { - LOG::Log(LOGDEBUG, "Initializing stream with KID: %s", - STRING::ToHexadecimal(defaultKid).c_str()); + LOG::Log(LOGDEBUG, "Initializing stream with KID: %s", sessionPsshset.defaultKID_.c_str()); for (size_t i{1}; i < ses; ++i) { @@ -1509,8 +1508,7 @@ bool CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet& sessionPs AP4_DYNAMIC_CAST(AP4_TencAtom, schi->GetChild(AP4_ATOM_TYPE_TENC, 0)) }; if (tenc) { - sessionPsshset.defaultKID_ = - std::string(reinterpret_cast(tenc->GetDefaultKid()), 16); + sessionPsshset.defaultKID_ = STRING::ToHexadecimal(tenc->GetDefaultKid(), 16); } else { @@ -1519,8 +1517,7 @@ bool CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet& sessionPs schi->GetChild(AP4_UUID_PIFF_TRACK_ENCRYPTION_ATOM, 0)) }; if (piff) { - sessionPsshset.defaultKID_ = - std::string(reinterpret_cast(piff->GetDefaultKid()), 16); + sessionPsshset.defaultKID_ = STRING::ToHexadecimal(piff->GetDefaultKid(), 16); } } } diff --git a/src/common/AdaptiveDecrypter.h b/src/common/AdaptiveDecrypter.h index 62ca282f6..b1c82042a 100644 --- a/src/common/AdaptiveDecrypter.h +++ b/src/common/AdaptiveDecrypter.h @@ -24,7 +24,7 @@ class Adaptive_CencSingleSampleDecrypter : public AP4_CencSingleSampleDecrypter /*! \brief Add a Key ID to the current session * \param keyId The KID */ - virtual void AddKeyId(std::string_view keyId) + virtual void AddKeyId(const std::vector& keyId) { throw std::logic_error("AddKeyId method not implemented."); }; @@ -32,7 +32,7 @@ class Adaptive_CencSingleSampleDecrypter : public AP4_CencSingleSampleDecrypter /*! \brief Set a Key ID as default * \param keyId The KID */ - virtual void SetDefaultKeyId(std::string_view keyId) + virtual void SetDefaultKeyId(const std::vector& keyId) { throw std::logic_error("SetDefaultKeyId method not implemented."); }; diff --git a/src/decrypters/Helpers.cpp b/src/decrypters/Helpers.cpp index 16124ac4a..43232001b 100644 --- a/src/decrypters/Helpers.cpp +++ b/src/decrypters/Helpers.cpp @@ -8,6 +8,7 @@ #include "Helpers.h" +#include "utils/Base64Utils.h" #include "utils/DigestMD5Utils.h" #include "utils/StringUtils.h" #include "utils/UrlUtils.h" @@ -66,3 +67,132 @@ bool DRM::IsKeySystemSupported(std::string_view keySystem) keySystem == DRM::KS_PLAYREADY || keySystem == DRM::KS_WISEPLAY || keySystem == DRM::KS_CLEARKEY; } + +std::vector DRM::ConvertKidStrToBytes(std::string_view kidStr) +{ + if (kidStr.size() != 32) + { + LOG::LogF(LOGERROR, "Cannot convert KID \"%s\" as bytes due to wrong size", kidStr.data()); + return {}; + } + + std::vector kidBytes(16, 0); + const char* kidPtr = kidStr.data(); + + for (size_t i{0}; i < 16; i++) + { + kidBytes[i] = STRING::ToHexNibble(*kidPtr) << 4; + kidPtr++; + kidBytes[i] |= STRING::ToHexNibble(*kidPtr); + kidPtr++; + } + + return kidBytes; +} + +std::string DRM::ConvertKidBytesToUUID(std::vector kid) +{ + if (kid.size() != 16) + return {}; + + static char hexDigits[] = "0123456789abcdef"; + std::string uuid; + for (size_t i{0}; i < 16; ++i) + { + if (i == 4 || i == 6 || i == 8 || i == 10) + uuid += '-'; + uuid += hexDigits[kid[i] >> 4]; + uuid += hexDigits[kid[i] & 15]; + } + return uuid; +} + +std::vector DRM::ConvertPrKidtoWvKid(std::vector kid) +{ + if (kid.size() != 16) + return {}; + + std::vector remapped; + static const size_t remap[16] = {3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15}; + // Reordering bytes + for (size_t i{0}; i < 16; ++i) + { + remapped.emplace_back(kid[remap[i]]); + } + return remapped; +} + +bool DRM::CreateISMlicense(std::string_view kidStr, + std::string_view licenseData, + std::vector& initData) +{ + std::vector kidBytes = ConvertKidStrToBytes(kidStr); + + if (kidBytes.size() != 16 || licenseData.empty()) + { + initData.clear(); + return false; + } + + std::string decLicData = BASE64::DecodeToStr(licenseData); + size_t origLicenseSize = decLicData.size(); + + const uint8_t* kid{reinterpret_cast(std::strstr(decLicData.data(), "{KID}"))}; + const uint8_t* uuid{reinterpret_cast(std::strstr(decLicData.data(), "{UUID}"))}; + uint8_t* decLicDataUint = reinterpret_cast(decLicData.data()); + + size_t license_size = uuid ? origLicenseSize + 36 - 6 : origLicenseSize; + + //Build up proto header + initData.resize(512); + uint8_t* protoptr(initData.data()); + if (kid) + { + if (uuid && uuid < kid) + return false; + license_size -= 5; //Remove sizeof(placeholder) + std::memcpy(protoptr, decLicDataUint, kid - decLicDataUint); + protoptr += kid - decLicDataUint; + license_size -= static_cast(kid - decLicDataUint); + kid += 5; + origLicenseSize -= kid - decLicDataUint; + } + else + kid = decLicDataUint; + + *protoptr++ = 18; //id=16>>3=2, type=2(flexlen) + *protoptr++ = 16; //length of key + std::memcpy(protoptr, kidBytes.data(), 16); + protoptr += 16; + + *protoptr++ = 34; //id=32>>3=4, type=2(flexlen) + do + { + *protoptr++ = static_cast(license_size & 127); + license_size >>= 7; + if (license_size) + *(protoptr - 1) |= 128; + else + break; + } while (1); + if (uuid) + { + std::memcpy(protoptr, kid, uuid - kid); + protoptr += uuid - kid; + + std::string uuidKid{ConvertKidBytesToUUID(kidBytes)}; + protoptr = reinterpret_cast(uuidKid.data()); + + size_t sizeleft = origLicenseSize - ((uuid - kid) + 6); + std::memcpy(protoptr, uuid + 6, sizeleft); + protoptr += sizeleft; + } + else + { + std::memcpy(protoptr, kid, origLicenseSize); + protoptr += origLicenseSize; + } + initData.resize(protoptr - initData.data()); + + return true; +} diff --git a/src/decrypters/Helpers.h b/src/decrypters/Helpers.h index 2da47b769..f66e15f3e 100644 --- a/src/decrypters/Helpers.h +++ b/src/decrypters/Helpers.h @@ -10,6 +10,7 @@ #include #include +#include namespace DRM { @@ -46,4 +47,29 @@ std::string GenerateUrlDomainHash(std::string_view url); */ std::string UrnToSystemId(std::string_view urn); +/*! + * \brief Convert a hexdecimal KeyId of 32 chars to 16 bytes. + * \param kidStr The hexdecimal KeyId + * \return KeyId as bytes, otherwise empty if fails. + */ +std::vector ConvertKidStrToBytes(std::string_view kidStr); + +/*! + * \brief Convert a KeyId of 16 bytes to a KeyId UUID format. + * \param kidStr The hexdecimal KeyId + * \return The KeyId UUID, otherwise empty if fails. + */ +std::string ConvertKidBytesToUUID(std::vector kid); + +/*! + * \brief Convert a PlayReady KeyId of 16 bytes to a Widevine KeyId. + * \param kid The PlayReady KeyId + * \return The Widevine KeyId, otherwise empty if fails. + */ +std::vector ConvertPrKidtoWvKid(std::vector kid); + +bool CreateISMlicense(std::string_view kidStr, + std::string_view licenseData, + std::vector& initData); + }; // namespace DRM diff --git a/src/decrypters/IDecrypter.h b/src/decrypters/IDecrypter.h index 32166f7a6..cf58376d5 100644 --- a/src/decrypters/IDecrypter.h +++ b/src/decrypters/IDecrypter.h @@ -88,7 +88,7 @@ class IDecrypter virtual Adaptive_CencSingleSampleDecrypter* CreateSingleSampleDecrypter( std::vector& initData, std::string_view optionalKeyParameter, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, std::string_view licenseUrl, bool skipSessionMessage, CryptoMode cryptoMode) = 0; @@ -107,7 +107,7 @@ class IDecrypter * \param caps The capabilities object to be populated */ virtual void GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId, + const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps) = 0; @@ -118,7 +118,7 @@ class IDecrypter * \return True if the KeyID has a license otherwise false */ virtual bool HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId) = 0; + const std::vector& keyId) = 0; /** * \brief Check if the decrypter has been initialised (OpenDRMSystem called) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index 989ca7d13..ee17c5d66 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -26,7 +26,7 @@ using namespace UTILS; CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( - std::string_view licenseUrl, std::string_view defaultKeyId, CClearKeyDecrypter* host) + std::string_view licenseUrl, const std::vector& defaultKeyId, CClearKeyDecrypter* host) : m_host(host) { if (licenseUrl.empty()) @@ -76,7 +76,7 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( return; } - const std::string b64DefaultKeyId = UTILS::BASE64::Encode(defaultKeyId.data()); + const std::string b64DefaultKeyId = UTILS::BASE64::Encode(defaultKeyId); if (!STRING::KeyExists(m_keyPairs, b64DefaultKeyId)) { LOG::LogF(LOGERROR, "Key not found on license server response"); @@ -96,7 +96,7 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( const std::vector& initData, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, const std::map& keys, CClearKeyDecrypter* host) : m_host(host) @@ -124,17 +124,17 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( AddSessionKey(defaultKeyId); } -void CClearKeyCencSingleSampleDecrypter::AddSessionKey(std::string_view keyId) +void CClearKeyCencSingleSampleDecrypter::AddSessionKey(const std::vector& keyId) { if (std::find(m_keyIds.begin(), m_keyIds.end(), keyId) == m_keyIds.end()) - m_keyIds.push_back(std::string(keyId)); + m_keyIds.emplace_back(keyId); } -bool CClearKeyCencSingleSampleDecrypter::HasKeyId(std::string_view keyid) +bool CClearKeyCencSingleSampleDecrypter::HasKeyId(const std::vector& keyid) { if (!keyid.empty()) { - for (const std::string& key : m_keyIds) + for (const std::vector& key : m_keyIds) { if (key == keyid) return true; @@ -161,7 +161,8 @@ AP4_Result CClearKeyCencSingleSampleDecrypter::DecryptSampleData( bytes_of_encrypted_data); } -std::string CClearKeyCencSingleSampleDecrypter::CreateLicenseRequest(std::string_view defaultKeyId) +std::string CClearKeyCencSingleSampleDecrypter::CreateLicenseRequest( + const std::vector& defaultKeyId) { // github.com/Dash-Industry-Forum/ClearKey-Content-Protection/blob/master/README.md /* Expected JSON structure for license request: @@ -171,9 +172,8 @@ std::string CClearKeyCencSingleSampleDecrypter::CreateLicenseRequest(std::string * ] * "type":"temporary" } */ - std::string kid{defaultKeyId}; - UTILS::STRING::ReplaceAll(kid, "-", ""); - std::string b64Kid = UTILS::BASE64::Encode(kid); + + std::string b64Kid = UTILS::BASE64::Encode(defaultKeyId); UTILS::STRING::ReplaceAll(b64Kid, "=", ""); rapidjson::Document jDoc; diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h index 45ecd6440..724fae69b 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h @@ -17,15 +17,15 @@ class CClearKeyCencSingleSampleDecrypter : public Adaptive_CencSingleSampleDecry { public: CClearKeyCencSingleSampleDecrypter(std::string_view licenseUrl, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, CClearKeyDecrypter* host); CClearKeyCencSingleSampleDecrypter(const std::vector& initdata, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, const std::map& keys, CClearKeyDecrypter* host); virtual ~CClearKeyCencSingleSampleDecrypter(){}; - void AddSessionKey(std::string_view keyId); - bool HasKeyId(std::string_view keyid); + void AddSessionKey(const std::vector& keyId); + bool HasKeyId(const std::vector& keyid); virtual AP4_Result SetFragmentInfo(AP4_UI32 pool_id, const std::vector& key, const AP4_UI08 nal_length_size, @@ -42,17 +42,17 @@ class CClearKeyCencSingleSampleDecrypter : public Adaptive_CencSingleSampleDecry unsigned int subsample_count, const AP4_UI16* bytes_of_cleartext_data, const AP4_UI32* bytes_of_encrypted_data) override; - std::string CreateLicenseRequest(std::string_view defaultKeyId); + std::string CreateLicenseRequest(const std::vector& defaultKeyId); bool ParseLicenseResponse(std::string data); - void SetDefaultKeyId(std::string_view keyId) override{}; - void AddKeyId(std::string_view keyId) override{}; + void SetDefaultKeyId(const std::vector& keyId) override{}; + void AddKeyId(const std::vector& keyId) override{}; bool HasKeys() { return !m_keyIds.empty(); } private: AP4_CencSingleSampleDecrypter* m_singleSampleDecrypter{nullptr}; std::string m_strSession; std::string m_licenceDefaultKeyId; - std::vector m_keyIds; + std::vector> m_keyIds; std::map m_keyPairs; CClearKeyDecrypter* m_host; }; diff --git a/src/decrypters/clearkey/ClearKeyDecrypter.cpp b/src/decrypters/clearkey/ClearKeyDecrypter.cpp index b22a280b4..aea35c5b4 100644 --- a/src/decrypters/clearkey/ClearKeyDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyDecrypter.cpp @@ -34,7 +34,7 @@ bool CClearKeyDecrypter::OpenDRMSystem(std::string_view licenseURL, Adaptive_CencSingleSampleDecrypter* CClearKeyDecrypter::CreateSingleSampleDecrypter( std::vector& initData, std::string_view optionalKeyParameter, - std::string_view defaultkeyid, + const std::vector& defaultkeyid, std::string_view licenseUrl, bool skipSessionMessage, CryptoMode cryptoMode) @@ -68,7 +68,7 @@ void CClearKeyDecrypter::DestroySingleSampleDecrypter(Adaptive_CencSingleSampleD } bool CClearKeyDecrypter::HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId) + const std::vector& keyId) { if (decrypter) return static_cast(decrypter)->HasKeyId(keyId); diff --git a/src/decrypters/clearkey/ClearKeyDecrypter.h b/src/decrypters/clearkey/ClearKeyDecrypter.h index adf6cce24..1e2f0dc35 100644 --- a/src/decrypters/clearkey/ClearKeyDecrypter.h +++ b/src/decrypters/clearkey/ClearKeyDecrypter.h @@ -25,19 +25,19 @@ class CClearKeyDecrypter : public IDecrypter virtual Adaptive_CencSingleSampleDecrypter* CreateSingleSampleDecrypter( std::vector& initData, std::string_view optionalKeyParameter, - std::string_view defaultkeyid, + const std::vector& defaultkeyid, std::string_view licenseUrl, bool skipSessionMessage, CryptoMode cryptoMode) override; virtual void DestroySingleSampleDecrypter(Adaptive_CencSingleSampleDecrypter* decrypter) override; virtual void GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyid, + const std::vector& keyid, uint32_t media, DRM::DecrypterCapabilites& caps) override { } virtual bool HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyid) override; + const std::vector& keyid) override; virtual bool IsInitialised() override { return true; } virtual std::string GetChallengeB64Data(Adaptive_CencSingleSampleDecrypter* decrypter) override { diff --git a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp index a5f417db6..7ea559640 100644 --- a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp +++ b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp @@ -17,6 +17,7 @@ #include "WVDecrypter.h" #include "cdm/media/cdm/cdm_adapter.h" #include "jsmn.h" +#include "decrypters/Helpers.h" #include "utils/Base64Utils.h" #include "utils/CurlUtils.h" #include "utils/DigestMD5Utils.h" @@ -44,7 +45,7 @@ void CWVCencSingleSampleDecrypter::SetSession(const char* session, CWVCencSingleSampleDecrypter::CWVCencSingleSampleDecrypter(CWVCdmAdapter& drm, std::vector& pssh, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, bool skipSessionMessage, CryptoMode cryptoMode, CWVDecrypter* host) @@ -134,7 +135,7 @@ CWVCencSingleSampleDecrypter::~CWVCencSingleSampleDecrypter() m_wvCdmAdapter.removessd(this); } -void CWVCencSingleSampleDecrypter::GetCapabilities(std::string_view keyId, +void CWVCencSingleSampleDecrypter::GetCapabilities(const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps) { @@ -181,7 +182,7 @@ void CWVCencSingleSampleDecrypter::GetCapabilities(std::string_view keyId, if ((caps.flags & DecrypterCapabilites::SSD_SUPPORTS_DECODING) != 0) { AP4_UI32 poolId(AddPool()); - m_fragmentPool[poolId].m_key = STRING::ToVecUint8(keyId.empty() ? m_keys.front().m_keyId : keyId); + m_fragmentPool[poolId].m_key = keyId.empty() ? m_keys.front().m_keyId : keyId; m_fragmentPool[poolId].m_cryptoInfo.m_mode = m_EncryptionMode; AP4_DataBuffer in; @@ -436,12 +437,12 @@ bool CWVCencSingleSampleDecrypter::SendSessionMessage() if (blocks[2][kidPos - 1] == 'H') { - std::string keyIdUUID{StringUtils::ToHexadecimal(m_defaultKeyId)}; + std::string keyIdUUID{STRING::ToHexadecimal(m_defaultKeyId)}; blocks[2].replace(kidPos - 1, 6, keyIdUUID.c_str(), 32); } else { - std::string kidUUID{ConvertKIDtoUUID(m_defaultKeyId)}; + std::string kidUUID{DRM::ConvertKidBytesToUUID(m_defaultKeyId)}; blocks[2].replace(kidPos, 5, kidUUID.c_str(), 36); } } @@ -633,15 +634,15 @@ void CWVCencSingleSampleDecrypter::AddSessionKey(const uint8_t* data, uint32_t status) { WVSKEY key; - std::vector::iterator res; + key.m_keyId.assign(data, data + dataSize); - key.m_keyId = std::string((const char*)data, dataSize); + std::vector::iterator res; if ((res = std::find(m_keys.begin(), m_keys.end(), key)) == m_keys.end()) res = m_keys.insert(res, key); res->status = static_cast(status); } -bool CWVCencSingleSampleDecrypter::HasKeyId(std::string_view keyid) +bool CWVCencSingleSampleDecrypter::HasKeyId(const std::vector& keyid) { if (!keyid.empty()) { @@ -696,10 +697,8 @@ void CWVCencSingleSampleDecrypter::RemovePool(AP4_UI32 poolId) void CWVCencSingleSampleDecrypter::LogDecryptError(const cdm::Status status, const std::vector& keyId) { - char buf[36]; - buf[32] = 0; - AP4_FormatHex(keyId.data(), keyId.size(), buf); - LOG::LogF(LOGDEBUG, "Decrypt failed with error: %d and key: %s", status, buf); + LOG::LogF(LOGDEBUG, "Decrypt failed with error code: %d and KID: %s", status, + STRING::ToHexadecimal(keyId).c_str()); } void CWVCencSingleSampleDecrypter::SetCdmSubsamples(std::vector& subsamples, @@ -1101,11 +1100,8 @@ VIDEOCODEC_RETVAL CWVCencSingleSampleDecrypter::DecryptAndDecodeVideo( } else if (status == cdm::Status::kNoKey) { - char buf[36]; - buf[0] = 0; - buf[32] = 0; - AP4_FormatHex(inputBuffer.key_id, inputBuffer.key_id_size, buf); - LOG::LogF(LOGERROR, "Returned CDM status kNoKey for key %s", buf); + LOG::LogF(LOGERROR, "Returned CDM status \"kNoKey\" for KID: %s", + STRING::ToHexadecimal(inputBuffer.key_id, inputBuffer.key_id_size).c_str()); return VC_EOF; } @@ -1162,12 +1158,12 @@ void CWVCencSingleSampleDecrypter::ResetVideo() m_isDrained = true; } -void CWVCencSingleSampleDecrypter::SetDefaultKeyId(std::string_view keyId) +void CWVCencSingleSampleDecrypter::SetDefaultKeyId(const std::vector& keyId) { m_defaultKeyId = keyId; } -void CWVCencSingleSampleDecrypter::AddKeyId(std::string_view keyId) +void CWVCencSingleSampleDecrypter::AddKeyId(const std::vector& keyId) { WVSKEY key; key.m_keyId = keyId; diff --git a/src/decrypters/widevine/WVCencSingleSampleDecrypter.h b/src/decrypters/widevine/WVCencSingleSampleDecrypter.h index 32049a3e0..dd82a2315 100644 --- a/src/decrypters/widevine/WVCencSingleSampleDecrypter.h +++ b/src/decrypters/widevine/WVCencSingleSampleDecrypter.h @@ -32,13 +32,13 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypter : public Adaptive_CencSingleSa // methods CWVCencSingleSampleDecrypter(CWVCdmAdapter& drm, std::vector& pssh, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, bool skipSessionMessage, CryptoMode cryptoMode, CWVDecrypter* host); virtual ~CWVCencSingleSampleDecrypter(); - void GetCapabilities(std::string_view keyId, + void GetCapabilities(const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps); virtual const char* GetSessionId() override; @@ -48,7 +48,7 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypter : public Adaptive_CencSingleSa void SetSession(const char* session, uint32_t sessionSize, const uint8_t* data, size_t dataSize); void AddSessionKey(const uint8_t* data, size_t dataSize, uint32_t status); - bool HasKeyId(std::string_view keyid); + bool HasKeyId(const std::vector& keyid); virtual AP4_Result SetFragmentInfo(AP4_UI32 poolId, const std::vector& keyId, @@ -82,8 +82,8 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypter : public Adaptive_CencSingleSa VIDEOCODEC_RETVAL VideoFrameDataToPicture(kodi::addon::CInstanceVideoCodec* codecInstance, VIDEOCODEC_PICTURE* picture); void ResetVideo(); - void SetDefaultKeyId(std::string_view keyId) override; - void AddKeyId(std::string_view keyId) override; + void SetDefaultKeyId(const std::vector& keyId) override; + void AddKeyId(const std::vector& keyId) override; private: void CheckLicenseRenewal(); @@ -93,11 +93,11 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypter : public Adaptive_CencSingleSa std::string m_strSession; std::vector m_pssh; AP4_DataBuffer m_challenge; - std::string m_defaultKeyId; + std::vector m_defaultKeyId; struct WVSKEY { bool operator==(WVSKEY const& other) const { return m_keyId == other.m_keyId; }; - std::string m_keyId; + std::vector m_keyId; cdm::KeyStatus status; }; std::vector m_keys; diff --git a/src/decrypters/widevine/WVDecrypter.cpp b/src/decrypters/widevine/WVDecrypter.cpp index 0f04cd270..4044e9cfd 100644 --- a/src/decrypters/widevine/WVDecrypter.cpp +++ b/src/decrypters/widevine/WVDecrypter.cpp @@ -103,7 +103,7 @@ bool CWVDecrypter::OpenDRMSystem(std::string_view licenseURL, Adaptive_CencSingleSampleDecrypter* CWVDecrypter::CreateSingleSampleDecrypter( std::vector& initData, std::string_view optionalKeyParameter, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, std::string_view licenseUrl, bool skipSessionMessage, CryptoMode cryptoMode) @@ -129,7 +129,7 @@ void CWVDecrypter::DestroySingleSampleDecrypter(Adaptive_CencSingleSampleDecrypt } void CWVDecrypter::GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId, + const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps) { @@ -143,7 +143,7 @@ void CWVDecrypter::GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter } bool CWVDecrypter::HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId) + const std::vector& keyId) { if (decrypter) return static_cast(decrypter)->HasKeyId(keyId); diff --git a/src/decrypters/widevine/WVDecrypter.h b/src/decrypters/widevine/WVDecrypter.h index 3f30f7cf8..357cc7116 100644 --- a/src/decrypters/widevine/WVDecrypter.h +++ b/src/decrypters/widevine/WVDecrypter.h @@ -34,17 +34,17 @@ class ATTR_DLL_LOCAL CWVDecrypter : public IDecrypter virtual Adaptive_CencSingleSampleDecrypter* CreateSingleSampleDecrypter( std::vector& initData, std::string_view optionalKeyParameter, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, std::string_view licenseUrl, bool skipSessionMessage, CryptoMode cryptoMode) override; virtual void DestroySingleSampleDecrypter(Adaptive_CencSingleSampleDecrypter* decrypter) override; virtual void GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId, + const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps) override; virtual bool HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId) override; + const std::vector& keyId) override; virtual bool IsInitialised() override { return m_WVCdmAdapter != nullptr; } virtual std::string GetChallengeB64Data(Adaptive_CencSingleSampleDecrypter* decrypter) override; virtual bool OpenVideoDecoder(Adaptive_CencSingleSampleDecrypter* decrypter, diff --git a/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp b/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp index af9d75bac..caf0a9f0c 100644 --- a/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp +++ b/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp @@ -13,6 +13,7 @@ #include "WVCdmAdapter.h" #include "WVDecrypter.h" #include "jsmn.h" +#include "decrypters/Helpers.h" #include "utils/Base64Utils.h" #include "utils/CurlUtils.h" #include "utils/DigestMD5Utils.h" @@ -29,7 +30,7 @@ using namespace kodi::tools; CWVCencSingleSampleDecrypterA::CWVCencSingleSampleDecrypterA(CWVCdmAdapterA& drm, std::vector& pssh, std::string_view optionalKeyParameter, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, CWVDecrypterA* host) : m_mediaDrm(drm), m_isProvisioningRequested(false), @@ -173,14 +174,14 @@ std::vector CWVCencSingleSampleDecrypterA::GetChallengeData() return m_keyRequestData; } -bool CWVCencSingleSampleDecrypterA::HasLicenseKey(std::string_view keyId) +bool CWVCencSingleSampleDecrypterA::HasLicenseKey(const std::vector& keyId) { // true = one session for all streams, false = one sessions per stream // false fixes pixaltion issues on some devices when manifest has multiple encrypted streams return true; } -void CWVCencSingleSampleDecrypterA::GetCapabilities(std::string_view keyId, +void CWVCencSingleSampleDecrypterA::GetCapabilities(const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps) { @@ -503,12 +504,12 @@ bool CWVCencSingleSampleDecrypterA::SendSessionMessage(const std::vector& { if (blocks[2][kidPos - 1] == 'H') { - std::string keyIdUUID{StringUtils::ToHexadecimal(m_defaultKeyId)}; + std::string keyIdUUID{STRING::ToHexadecimal(m_defaultKeyId)}; blocks[2].replace(kidPos - 1, 6, keyIdUUID.c_str(), 32); } else { - std::string kidUUID{ConvertKIDtoUUID(m_defaultKeyId)}; + std::string kidUUID{DRM::ConvertKidBytesToUUID(m_defaultKeyId)}; blocks[2].replace(kidPos, 5, kidUUID.c_str(), 36); kidPlaceholderLen = 5; } diff --git a/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.h b/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.h index 8c24aa512..65ec495b6 100644 --- a/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.h +++ b/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.h @@ -25,7 +25,7 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypterA : public Adaptive_CencSingleS CWVCencSingleSampleDecrypterA(CWVCdmAdapterA& drm, std::vector& pssh, std::string_view optionalKeyParameter, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, CWVDecrypterA* host); virtual ~CWVCencSingleSampleDecrypterA(); @@ -33,7 +33,7 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypterA : public Adaptive_CencSingleS const std::vector& GetSessionIdRaw() { return m_sessionId; }; virtual const char* GetSessionId() override; std::vector GetChallengeData(); - virtual bool HasLicenseKey(std::string_view keyId); + virtual bool HasLicenseKey(const std::vector& keyId); virtual AP4_Result SetFragmentInfo(AP4_UI32 poolId, const std::vector& keyId, @@ -61,7 +61,7 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypterA : public Adaptive_CencSingleS // array of integers. NULL if subsample_count is 0 const AP4_UI32* bytesOfEncryptedData) override; - void GetCapabilities(std::string_view keyId, + void GetCapabilities(const std::vector& keyId, uint32_t media, DRM::DecrypterCapabilites& caps); @@ -87,7 +87,7 @@ class ATTR_DLL_LOCAL CWVCencSingleSampleDecrypterA : public Adaptive_CencSingleS bool m_isProvisioningRequested; bool m_isKeyUpdateRequested; - std::string m_defaultKeyId; + std::vector m_defaultKeyId; struct FINFO { diff --git a/src/decrypters/widevineandroid/WVDecrypter.cpp b/src/decrypters/widevineandroid/WVDecrypter.cpp index 30d1a547e..131841af2 100644 --- a/src/decrypters/widevineandroid/WVDecrypter.cpp +++ b/src/decrypters/widevineandroid/WVDecrypter.cpp @@ -127,7 +127,7 @@ bool CWVDecrypterA::OpenDRMSystem(std::string_view licenseURL, Adaptive_CencSingleSampleDecrypter* CWVDecrypterA::CreateSingleSampleDecrypter( std::vector& initData, std::string_view optionalKeyParameter, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, std::string_view licenseUrl, bool skipSessionMessage, CryptoMode cryptoMode) @@ -164,7 +164,7 @@ void CWVDecrypterA::DestroySingleSampleDecrypter(Adaptive_CencSingleSampleDecryp } void CWVDecrypterA::GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId, + const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps) { @@ -175,7 +175,7 @@ void CWVDecrypterA::GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypte } bool CWVDecrypterA::HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId) + const std::vector& keyId) { if (decrypter) return static_cast(decrypter)->HasLicenseKey(keyId); diff --git a/src/decrypters/widevineandroid/WVDecrypter.h b/src/decrypters/widevineandroid/WVDecrypter.h index cf5b50082..070bd16b3 100644 --- a/src/decrypters/widevineandroid/WVDecrypter.h +++ b/src/decrypters/widevineandroid/WVDecrypter.h @@ -90,7 +90,7 @@ class ATTR_DLL_LOCAL CWVDecrypterA : public IDecrypter, public CMediaDrmOnEventC virtual Adaptive_CencSingleSampleDecrypter* CreateSingleSampleDecrypter( std::vector& initData, std::string_view optionalKeyParameter, - std::string_view defaultKeyId, + const std::vector& defaultKeyId, std::string_view licenseUrl, bool skipSessionMessage, CryptoMode cryptoMode) override; @@ -98,12 +98,12 @@ class ATTR_DLL_LOCAL CWVDecrypterA : public IDecrypter, public CMediaDrmOnEventC virtual void DestroySingleSampleDecrypter(Adaptive_CencSingleSampleDecrypter* decrypter) override; virtual void GetCapabilities(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId, + const std::vector& keyId, uint32_t media, DecrypterCapabilites& caps) override; virtual bool HasLicenseKey(Adaptive_CencSingleSampleDecrypter* decrypter, - std::string_view keyId) override; + const std::vector& keyId) override; virtual std::string GetChallengeB64Data(Adaptive_CencSingleSampleDecrypter* decrypter) override; diff --git a/src/parser/DASHTree.cpp b/src/parser/DASHTree.cpp index 783b25a0d..a0cd6b022 100644 --- a/src/parser/DASHTree.cpp +++ b/src/parser/DASHTree.cpp @@ -1287,7 +1287,7 @@ void adaptive::CDashTree::ParseTagContentProtection( { PRProtectionParser parser; if (parser.ParseHeader(node.child_value())) - protScheme.kid = parser.GetKID(); + protScheme.kid = STRING::ToHexadecimal(parser.GetKID()); } } @@ -1363,27 +1363,9 @@ bool adaptive::CDashTree::GetProtectionData( if (!selectedPssh.empty()) pssh = BASE64::Decode(selectedPssh); - if (!selectedKid.empty()) - { - if (selectedKid.size() == 36) - { - const char* selectedKidPtr = selectedKid.c_str(); - kid.resize(16); - for (size_t i{0}; i < 16; i++) - { - if (i == 4 || i == 6 || i == 8 || i == 10) - selectedKidPtr++; - kid[i] = STRING::ToHexNibble(*selectedKidPtr) << 4; - selectedKidPtr++; - kid[i] |= STRING::ToHexNibble(*selectedKidPtr); - selectedKidPtr++; - } - } - else - { - kid = selectedKid; - } - } + // There are no constraints on the Kid format, it is recommended to be as UUID but not mandatory + STRING::ReplaceAll(selectedKid, "-", ""); + kid = selectedKid; return isEncrypted; } diff --git a/src/parser/HLSTree.cpp b/src/parser/HLSTree.cpp index b8be17fe3..978c8eda7 100644 --- a/src/parser/HLSTree.cpp +++ b/src/parser/HLSTree.cpp @@ -1249,16 +1249,13 @@ PLAYLIST::EncryptionType adaptive::CHLSTree::ProcessEncryption( if (STRING::KeyExists(attribs, "KEYID")) { - std::string keyid = attribs["KEYID"].substr(2); - const char* defaultKID = keyid.c_str(); - m_currentDefaultKID.resize(16); - for (unsigned int i(0); i < 16; ++i) - { - m_currentDefaultKID[i] = STRING::ToHexNibble(*defaultKID) << 4; - ++defaultKID; - m_currentDefaultKID[i] |= STRING::ToHexNibble(*defaultKID); - ++defaultKID; - } + std::string keyid = attribs["KEYID"]; + STRING::ToLower(keyid); + + if (STRING::StartsWith(keyid, "0x")) + m_currentDefaultKID = keyid.substr(2); // To remove "0x" + else + LOG::LogF(LOGERROR, "Incorrect KEYID tag format"); } // If there is no KID, try to get it from pssh data @@ -1266,7 +1263,7 @@ PLAYLIST::EncryptionType adaptive::CHLSTree::ProcessEncryption( { CPsshParser parser; if (parser.Parse(m_currentPssh) && parser.GetKeyIds().size() > 0) - m_currentDefaultKID = parser.GetKeyIds()[0]; + m_currentDefaultKID = STRING::ToHexadecimal(parser.GetKeyIds()[0]); } if (encryptMethod == "SAMPLE-AES-CTR") @@ -1300,19 +1297,16 @@ PLAYLIST::EncryptionType adaptive::CHLSTree::ProcessEncryption( if (STRING::KeyExists(attribs, "KEYID")) { - std::string keyid = attribs["KEYID"].substr(2); - const char* defaultKID = keyid.c_str(); - m_currentDefaultKID.resize(16); - for (unsigned int i(0); i < 16; ++i) - { - m_currentDefaultKID[i] = STRING::ToHexNibble(*defaultKID) << 4; - ++defaultKID; - m_currentDefaultKID[i] |= STRING::ToHexNibble(*defaultKID); - ++defaultKID; - } + std::string keyid = attribs["KEYID"]; + STRING::ToLower(keyid); + + if (STRING::StartsWith(keyid, "0x")) + m_currentDefaultKID = keyid.substr(2); // To remove "0x" + else + LOG::LogF(LOGERROR, "Incorret KEYID tag format"); } else if (uriUrl.empty()) // No kid provided, assume key == kid - m_currentDefaultKID.assign(uriData.begin(), uriData.end()); + m_currentDefaultKID = STRING::ToHexadecimal(uriData); if (encryptMethod == "SAMPLE-AES-CTR") m_cryptoMode = CryptoMode::AES_CTR; diff --git a/src/parser/PRProtectionParser.cpp b/src/parser/PRProtectionParser.cpp index cebccffbc..6649bdee4 100644 --- a/src/parser/PRProtectionParser.cpp +++ b/src/parser/PRProtectionParser.cpp @@ -8,10 +8,10 @@ #include "PRProtectionParser.h" +#include "decrypters/Helpers.h" #include "utils/Base64Utils.h" #include "utils/CharArrayParser.h" #include "utils/StringUtils.h" -#include "utils/Utils.h" #include "utils/XMLUtils.h" #include "utils/log.h" #include "pugixml.hpp" @@ -141,13 +141,13 @@ bool adaptive::PRProtectionParser::ParseHeader(std::string_view prHeader) if (!kidBase64.empty()) { - std::string kid = BASE64::DecodeToStr(kidBase64); - if (kid.size() == 16) + std::vector prKid = BASE64::Decode(kidBase64); + if (prKid.size() == 16) { - m_KID = ConvertKIDtoWVKID(kid); + m_KID = DRM::ConvertPrKidtoWvKid(prKid); } else - LOG::LogF(LOGWARNING, "KID size %zu instead of 16, KID ignored.", kid.size()); + LOG::LogF(LOGWARNING, "KID size %zu instead of 16, KID ignored.", prKid.size()); } xml_node nodeLAURL = nodeDATA.child("LA_URL"); @@ -196,8 +196,11 @@ bool adaptive::CPsshParser::Parse(const std::vector& data) { if (charParser.CharsLeft() < 16) return false; - std::string kid = charParser.ReadNextString(16); - m_keyIds.emplace_back(kid); + + std::vector kid; + if (charParser.ReadNextArray(16, kid)) + m_keyIds.emplace_back(kid); + kidCount--; } } diff --git a/src/parser/PRProtectionParser.h b/src/parser/PRProtectionParser.h index 007c070cb..0b78a1916 100644 --- a/src/parser/PRProtectionParser.h +++ b/src/parser/PRProtectionParser.h @@ -39,12 +39,15 @@ class ATTR_DLL_LOCAL PRProtectionParser */ bool HasProtection() const { return !m_PSSH.empty(); } - std::string_view GetKID() const { return m_KID; } + /*! + * \brief Get keyid as 16 bytes format (converted for Widevine DRM) + */ + const std::vector& GetKID() const { return m_KID; } std::string_view GetLicenseURL() const { return m_licenseURL; } - std::vector GetPSSH() const { return m_PSSH; } + const std::vector& GetPSSH() const { return m_PSSH; } private: - std::string m_KID; + std::vector m_KID; std::string m_licenseURL; std::vector m_PSSH; }; @@ -56,7 +59,11 @@ class ATTR_DLL_LOCAL CPsshParser bool Parse(const std::vector& data); const std::vector& GetSystemId() const { return m_systemId; } - const std::vector& GetKeyIds() const { return m_keyIds; } + + /*! + * \brief Get keyid's as 16 bytes format + */ + const std::vector>& GetKeyIds() const { return m_keyIds; } const std::vector& GetData() const { return m_data; } private: @@ -64,7 +71,7 @@ class ATTR_DLL_LOCAL CPsshParser uint8_t m_version{0}; uint32_t m_flags{0}; std::vector m_systemId; - std::vector m_keyIds; + std::vector> m_keyIds; std::vector m_data; }; diff --git a/src/parser/SmoothTree.cpp b/src/parser/SmoothTree.cpp index c7e16abb4..25abe0d34 100644 --- a/src/parser/SmoothTree.cpp +++ b/src/parser/SmoothTree.cpp @@ -189,8 +189,8 @@ void adaptive::CSmoothTree::ParseTagStreamIndex(pugi::xml_node nodeSI, if (protParser.HasProtection() && (adpSet->GetStreamType() == StreamType::VIDEO || adpSet->GetStreamType() == StreamType::AUDIO)) { - psshSetPos = InsertPsshSet(StreamType::VIDEO_AUDIO, period, adpSet.get(), - protParser.GetPSSH(), protParser.GetKID()); + psshSetPos = InsertPsshSet(StreamType::VIDEO_AUDIO, period, adpSet.get(), protParser.GetPSSH(), + STRING::ToHexadecimal(protParser.GetKID())); } adpSet->SetLanguage(XML::GetAttrib(nodeSI, "Language")); diff --git a/src/test/TestDASHTree.cpp b/src/test/TestDASHTree.cpp index 78160e9c2..1ca45f2f2 100644 --- a/src/test/TestDASHTree.cpp +++ b/src/test/TestDASHTree.cpp @@ -395,11 +395,12 @@ TEST_F(DASHTreeTest, CalculatePsshDefaultKid) const std::vector pssh1 = BASE64::Decode("AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQblodJidXR9eARuql0dNLWg=="); EXPECT_EQ(tree->m_periods[0]->GetPSSHSets()[1].pssh_, pssh1); - EXPECT_EQ(tree->m_periods[0]->GetPSSHSets()[1].defaultKID_.size(), 16); + // The following KID on manifest is represented as UUID and dashes must be deleted (string size 36 to 32) + EXPECT_EQ(tree->m_periods[0]->GetPSSHSets()[1].defaultKID_.size(), 32); const std::vector pssh2 = BASE64::Decode("AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQnrQFDeRLSAKTLifXUIPiZg=="); EXPECT_EQ(tree->m_periods[0]->GetPSSHSets()[2].pssh_, pssh2); - EXPECT_EQ(tree->m_periods[0]->GetPSSHSets()[2].defaultKID_.size(), 16); + EXPECT_EQ(tree->m_periods[0]->GetPSSHSets()[2].defaultKID_.size(), 32); } TEST_F(DASHTreeAdaptiveStreamTest, subtitles) diff --git a/src/test/manifests/mpd/pssh_default_kid.mpd b/src/test/manifests/mpd/pssh_default_kid.mpd index 9ad193f5a..e46e3421a 100644 --- a/src/test/manifests/mpd/pssh_default_kid.mpd +++ b/src/test/manifests/mpd/pssh_default_kid.mpd @@ -22,7 +22,7 @@ - + AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQnrQFDeRLSAKTLifXUIPiZg== diff --git a/src/utils/StringUtils.cpp b/src/utils/StringUtils.cpp index c051dc63f..7dfd9344c 100644 --- a/src/utils/StringUtils.cpp +++ b/src/utils/StringUtils.cpp @@ -306,6 +306,22 @@ std::string UTILS::STRING::ToHexadecimal(std::string_view str) return ss.str(); } +std::string UTILS::STRING::ToHexadecimal(const uint8_t* str, const size_t size) +{ + std::ostringstream ss; + ss << std::hex; + for (size_t i = 0; i < size; ++i) + { + ss << std::setw(2) << std::setfill('0') << static_cast(str[i]); + } + return ss.str(); +} + +std::string UTILS::STRING::ToHexadecimal(const std::vector data) +{ + return ToHexadecimal(data.data(), data.size()); +} + std::string UTILS::STRING::Trim(std::string value) { StringUtils::Trim(value); diff --git a/src/utils/StringUtils.h b/src/utils/StringUtils.h index 7342de3cd..fbe4918fb 100644 --- a/src/utils/StringUtils.h +++ b/src/utils/StringUtils.h @@ -224,6 +224,26 @@ std::vector ToVecUint8(std::string_view str); */ std::string ToHexadecimal(std::string_view str); +/*! + * \brief Convert each character in the array to its hexadecimal + * representation and return the concatenated result. + * Example: "abc" -> "616263" + * \param str The array to be converted + * \param size The size of the array + * \return The string on its hexadecimal representation + */ +std::string ToHexadecimal(const uint8_t* str, const size_t size); + +/*! + * \brief Convert each character in the vector to its hexadecimal + * representation and return the concatenated result. + * Example: "abc" -> "616263" + * \param str The array to be converted + * \param size The size of the array + * \return The string on its hexadecimal representation + */ +std::string ToHexadecimal(const std::vector data); + /*! * \brief Trim a string with remove of not wanted spaces at begin and end of string. * \param value The string to be trimmed diff --git a/src/utils/Utils.cpp b/src/utils/Utils.cpp index 8507faa1c..e0012ac10 100644 --- a/src/utils/Utils.cpp +++ b/src/utils/Utils.cpp @@ -213,104 +213,6 @@ std::vector UTILS::AvcToAnnexb(const std::vector& avc) return {buffer.begin(), buffer.begin() + buffer_size}; } -std::string UTILS::ConvertKIDtoWVKID(std::string_view kid) -{ - std::string remapped; - static const size_t remap[16] = {3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15}; - for (size_t i{0}; i < 16; ++i) - { - remapped += kid[remap[i]]; - } - return remapped; -} - -std::string UTILS::ConvertKIDtoUUID(std::string_view kid) -{ - static char hexDigits[] = "0123456789abcdef"; - std::string uuid; - for (size_t i{0}; i < 16; ++i) - { - if (i == 4 || i == 6 || i == 8 || i == 10) - uuid += '-'; - uuid += hexDigits[static_cast(kid[i]) >> 4]; - uuid += hexDigits[static_cast(kid[i]) & 15]; - } - return uuid; -} - -bool UTILS::CreateISMlicense(std::string_view key, - std::string_view licenseData, - std::vector& initData) -{ - if (key.size() != 16 || licenseData.empty()) - { - initData.clear(); - return false; - } - - std::string decLicData = BASE64::DecodeToStr(licenseData); - size_t origLicenseSize = decLicData.size(); - - const uint8_t* kid{reinterpret_cast(std::strstr(decLicData.data(), "{KID}"))}; - const uint8_t* uuid{reinterpret_cast(std::strstr(decLicData.data(), "{UUID}"))}; - uint8_t* decLicDataUint = reinterpret_cast(decLicData.data()); - - size_t license_size = uuid ? origLicenseSize + 36 - 6 : origLicenseSize; - - //Build up proto header - initData.resize(512); - uint8_t* protoptr(initData.data()); - if (kid) - { - if (uuid && uuid < kid) - return false; - license_size -= 5; //Remove sizeof(placeholder) - std::memcpy(protoptr, decLicDataUint, kid - decLicDataUint); - protoptr += kid - decLicDataUint; - license_size -= static_cast(kid - decLicDataUint); - kid += 5; - origLicenseSize -= kid - decLicDataUint; - } - else - kid = decLicDataUint; - - *protoptr++ = 18; //id=16>>3=2, type=2(flexlen) - *protoptr++ = 16; //length of key - std::memcpy(protoptr, key.data(), 16); - protoptr += 16; - - *protoptr++ = 34; //id=32>>3=4, type=2(flexlen) - do - { - *protoptr++ = static_cast(license_size & 127); - license_size >>= 7; - if (license_size) - *(protoptr - 1) |= 128; - else - break; - } while (1); - if (uuid) - { - std::memcpy(protoptr, kid, uuid - kid); - protoptr += uuid - kid; - - std::string uuidKid{ConvertKIDtoUUID(key)}; - protoptr = reinterpret_cast(uuidKid.data()); - - size_t sizeleft = origLicenseSize - ((uuid - kid) + 6); - std::memcpy(protoptr, uuid + 6, sizeleft); - protoptr += sizeleft; - } - else - { - std::memcpy(protoptr, kid, origLicenseSize); - protoptr += origLicenseSize; - } - initData.resize(protoptr - initData.data()); - - return true; -} - void UTILS::ParseHeaderString(std::map& headerMap, const std::string& header) { diff --git a/src/utils/Utils.h b/src/utils/Utils.h index 1e5ddcad5..38526d4d1 100644 --- a/src/utils/Utils.h +++ b/src/utils/Utils.h @@ -25,11 +25,7 @@ constexpr uint32_t AP4_TRACK_ID_UNKNOWN = -1; std::vector AnnexbToHvcc(const char* b16Data); std::vector AnnexbToAvc(const char* b16Data); std::vector AvcToAnnexb(const std::vector& avc); -std::string ConvertKIDtoWVKID(std::string_view kid); -std::string ConvertKIDtoUUID(std::string_view kid); -bool CreateISMlicense(std::string_view key, - std::string_view licenseData, - std::vector& initData); + void ParseHeaderString(std::map& headerMap, const std::string& header); /*! From d5a87bf6a55c081274a9c407124c0aa47a0d19ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 07:12:22 +0000 Subject: [PATCH 12/91] changelog and version v21.5.1 (2024-08-03) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 1842af3ac..102c5c6bd 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 0b93714ef..a95a8929d 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,8 @@ +v21.5.1 (2024-08-03) +- [Dash] Fix playback stall/crash with manifest having default kid as non-UUID format +- [Dash] Fix some live streams affected by playback stop regression +- Reverted bento4 dependency improvements, that has broken Dolby Digital audio + v21.5.0 (2024-07-30) - Implemented DRM ClearKey support (for Dash, HLS only) - New property inputstream.adaptive.drm_legacy easy way to configure DRM, see details on Wiki From 9f95d9074a27e475d960792f29eb94c89ed0832b Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Sat, 3 Aug 2024 12:01:47 +0200 Subject: [PATCH 13/91] Fix build error with gcc 14 src/decrypters/Helpers.h:55:13: error: 'uint8_t' was not declared in this scope 55 | std::vector ConvertKidStrToBytes(std::string_view kidStr); --- src/decrypters/Helpers.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/decrypters/Helpers.h b/src/decrypters/Helpers.h index f66e15f3e..55dca4407 100644 --- a/src/decrypters/Helpers.h +++ b/src/decrypters/Helpers.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include #include From 4e0d03c7ba38feb9f54be542f6f4c1bf5251b546 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 9 Aug 2024 17:47:46 +0200 Subject: [PATCH 14/91] [ADTSReader] Return false when id3tagparsr fails CADTSSampleReader::ReadSample call ADTSReader::ReadPacket each time kodi request buffer data but when the stream buffer reach the end the m_id3TagParser.parse cannot read data from m_stream by returning ID3TAG::PARSE_FAIL this was breaking the while loop and return true since return true was causing that CADTSSampleReader::ReadSample to return AP4_SUCCESS with bad data where instead was needed to check for waitingForSegment and mark the m_eos as true, this to allow stop the playback and so avoid flooding kodi demuxer of bad package data --- src/demuxers/ADTSReader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/demuxers/ADTSReader.cpp b/src/demuxers/ADTSReader.cpp index a9eb85372..9d8f87b84 100644 --- a/src/demuxers/ADTSReader.cpp +++ b/src/demuxers/ADTSReader.cpp @@ -429,7 +429,7 @@ bool ADTSReader::ReadPacket() if ((id3Ret = m_id3TagParser.parse(m_stream)) == ID3TAG::PARSE_SUCCESS) continue; else if (id3Ret == ID3TAG::PARSE_FAIL) - break; + return false; if (m_id3TagParser.getPts(m_basePts)) m_frameParser.resetFrameCount(); From 98279881d05cef397840e84aec3aa8d327ab40e9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 10 Aug 2024 09:08:33 +0000 Subject: [PATCH 15/91] changelog and version v21.5.2 (2024-08-10) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 102c5c6bd..e0976dbf5 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index a95a8929d..7d404ff76 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,7 @@ +v21.5.2 (2024-08-10) +[HLS] Fix playback stop problem with some AAC streams +Fix builds with GCC-14 + v21.5.1 (2024-08-03) - [Dash] Fix playback stall/crash with manifest having default kid as non-UUID format - [Dash] Fix some live streams affected by playback stop regression From addac6b94d6b4ec9bf4398d31192f7cd5c40aa21 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 11 Aug 2024 08:59:07 +0200 Subject: [PATCH 16/91] [Session] Restored licenseData variable on for loop This variable is modified within the for loop so place it outside will cause that sideeffects because the variable is assigned by some conditions --- src/Session.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Session.cpp b/src/Session.cpp index 7ef176758..d0856bff4 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -388,7 +388,6 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) } } - std::string_view licenseData = CSrvBroker::GetKodiProps().GetLicenseData(); std::string_view licenseType = CSrvBroker::GetKodiProps().GetLicenseType(); // cdmSession 0 is reserved for unencrypted streams @@ -401,7 +400,9 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) if (sessionPsshset.adaptation_set_->GetStreamType() == StreamType::NOTYPE) continue; - + + std::string_view licenseData = CSrvBroker::GetKodiProps().GetLicenseData(); + if (m_adaptiveTree->GetTreeType() == adaptive::TreeType::SMOOTH_STREAMING) { if (licenseType == "com.widevine.alpha") From 0176d00e21e6a0b60f49be3ff9c031e2c05217e7 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 15 Aug 2024 15:56:48 +0200 Subject: [PATCH 17/91] [DRM][ClearKey] Add support to licenseUrl by prop --- src/CompKodiProps.cpp | 29 +++++++++++-------- src/CompKodiProps.h | 10 ++++++- src/Session.cpp | 3 +- .../ClearKeyCencSingleSampleDecrypter.cpp | 7 ++++- .../ClearKeyCencSingleSampleDecrypter.h | 1 + src/decrypters/clearkey/ClearKeyDecrypter.cpp | 13 ++++++--- 6 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/CompKodiProps.cpp b/src/CompKodiProps.cpp index bb72a3487..25264706b 100644 --- a/src/CompKodiProps.cpp +++ b/src/CompKodiProps.cpp @@ -416,7 +416,7 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmConfig(const std::string& data) for (auto const& keyid : jDictLic["keyids"].GetObject()) { if (keyid.name.IsString() && keyid.value.IsString()) - drmCfg.m_keys[keyid.name.GetString()] = (keyid.value.GetString()); + drmCfg.license.keys[keyid.name.GetString()] = (keyid.value.GetString()); } } } @@ -460,15 +460,13 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmLegacyConfig(const std::string& da } m_licenseType = keySystem; - - // Clear existing value to prevent possible mix with other similar properties - m_licenseKey.clear(); + std::string licenseUrl; if (!licenseStr.empty()) { if (URL::IsValidUrl(licenseStr)) // License server URL { - m_licenseKey = licenseStr; + licenseUrl = licenseStr; } else // Assume are keyid's for ClearKey DRM { @@ -484,17 +482,24 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmLegacyConfig(const std::string& da LOG::LogF(LOGERROR, "Ignored malformed ClearKey kid/key pair"); continue; } - drmCfg.m_keys[STRING::Trim(keyPair[0])] = STRING::Trim(keyPair[1]); + drmCfg.license.keys[STRING::Trim(keyPair[0])] = STRING::Trim(keyPair[1]); } } } - //! @todo: temporary stored default DRM values here just for convenience - //! since we need to construct the "license key" string - //! these values are stored also on DRM's implementation, - //! they must be placed in an appropriate place with the future DRM config rework - if (licenseHeaders.empty()) + if (keySystem == DRM::KS_CLEARKEY) + { + DrmCfg& drmCfg = m_drmConfigs[keySystem]; + + drmCfg.license.serverUrl = licenseUrl; + ParseHeaderString(drmCfg.license.reqHeaders, licenseHeaders); + } + else if (licenseHeaders.empty()) { + //! @todo: temporary stored default DRM values here just for convenience + //! since we need to construct the "license key" string + //! these values are stored also on DRM's implementation, + //! they must be placed in an appropriate place with the future DRM config rework if (keySystem == DRM::KS_WIDEVINE) licenseHeaders = "Content-Type=application%2Foctet-stream"; else if (keySystem == DRM::KS_PLAYREADY) @@ -504,6 +509,6 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmLegacyConfig(const std::string& da licenseHeaders = "Content-Type=application/json"; } - m_licenseKey += "|" + licenseHeaders + "|R{SSM}|R"; + m_licenseKey = licenseUrl + "|" + licenseHeaders + "|R{SSM}|R"; return true; } diff --git a/src/CompKodiProps.h b/src/CompKodiProps.h index 69f37ca46..e207cd029 100644 --- a/src/CompKodiProps.h +++ b/src/CompKodiProps.h @@ -70,7 +70,15 @@ struct ManifestConfig struct DrmCfg { - std::map m_keys; + struct License + { + std::string serverUrl; + std::map reqHeaders; + + std::map keys; // Clearkeys kid / key + }; + + License license; // The license configuration }; class ATTR_DLL_LOCAL CCompKodiProps diff --git a/src/Session.cpp b/src/Session.cpp index d0856bff4..8ff6d7d8f 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -454,9 +454,10 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) // Use the init data provided by manifest (e.g. PSSH) initData = sessionPsshset.pssh_; } - else + else if (licenseType != DRM::KS_CLEARKEY) { // Try extract the PSSH/KID from the stream + // only if clearkeys are not used (use case e.g. Widevine manifest tested with ClearKey DRM) if (!ExtractStreamProtectionData(sessionPsshset, initData, m_adaptiveTree->m_supportedKeySystems)) LOG::Log(LOGERROR, "License data: Cannot extract PSSH/KID data from the stream"); } diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index ee17c5d66..789837415 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -26,7 +26,10 @@ using namespace UTILS; CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( - std::string_view licenseUrl, const std::vector& defaultKeyId, CClearKeyDecrypter* host) + std::string_view licenseUrl, + const std::map& licenseHeaders, + const std::vector& defaultKeyId, + CClearKeyDecrypter* host) : m_host(host) { if (licenseUrl.empty()) @@ -47,6 +50,8 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( CURL::CUrl curl{licenseUrl}; curl.AddHeader("Accept", "application/json"); curl.AddHeader("Content-Type", "application/json"); + curl.AddHeaders(licenseHeaders); + curl.AddHeader("postdata", UTILS::BASE64::Encode(postData)); std::string response; diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h index 724fae69b..f707859f3 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.h @@ -17,6 +17,7 @@ class CClearKeyCencSingleSampleDecrypter : public Adaptive_CencSingleSampleDecry { public: CClearKeyCencSingleSampleDecrypter(std::string_view licenseUrl, + const std::map& licenseHeaders, const std::vector& defaultKeyId, CClearKeyDecrypter* host); CClearKeyCencSingleSampleDecrypter(const std::vector& initdata, diff --git a/src/decrypters/clearkey/ClearKeyDecrypter.cpp b/src/decrypters/clearkey/ClearKeyDecrypter.cpp index aea35c5b4..08944445c 100644 --- a/src/decrypters/clearkey/ClearKeyDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyDecrypter.cpp @@ -40,15 +40,20 @@ Adaptive_CencSingleSampleDecrypter* CClearKeyDecrypter::CreateSingleSampleDecryp CryptoMode cryptoMode) { CClearKeyCencSingleSampleDecrypter* decrypter = nullptr; - auto& keys = CSrvBroker::GetKodiProps().GetDrmConfig(std::string(DRM::KS_CLEARKEY)).m_keys; + auto& cfgLic = CSrvBroker::GetKodiProps().GetDrmConfig(std::string(DRM::KS_CLEARKEY)).license; - if (!keys.empty() || !initData.empty()) // Keys provided from manifest or Kodi property + // If keys / license url are provided by Kodi property, those of the manifest will be overwritten + + if (!cfgLic.serverUrl.empty()) + licenseUrl = cfgLic.serverUrl; + + if ((!cfgLic.keys.empty() || !initData.empty()) && cfgLic.serverUrl.empty()) // Keys provided from manifest or Kodi property { - decrypter = new CClearKeyCencSingleSampleDecrypter(initData, defaultkeyid, keys, this); + decrypter = new CClearKeyCencSingleSampleDecrypter(initData, defaultkeyid, cfgLic.keys, this); } else // Clearkey license server URL provided { - decrypter = new CClearKeyCencSingleSampleDecrypter(licenseUrl, defaultkeyid, this); + decrypter = new CClearKeyCencSingleSampleDecrypter(licenseUrl, cfgLic.reqHeaders, defaultkeyid, this); } if (!decrypter->HasKeys()) From 275a4ae53e356ce79fb7dcfd62b5085dafaa43b2 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 15 Aug 2024 15:57:35 +0200 Subject: [PATCH 18/91] [HLSTree] If ClearKey as KS, parse Widevine KID This should allow play Widevine streams by using ClearKey DRM untested since i havent found a sample --- src/parser/HLSTree.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/parser/HLSTree.cpp b/src/parser/HLSTree.cpp index 978c8eda7..dee9a9c6a 100644 --- a/src/parser/HLSTree.cpp +++ b/src/parser/HLSTree.cpp @@ -1295,6 +1295,13 @@ PLAYLIST::EncryptionType adaptive::CHLSTree::ProcessEncryption( m_currentPssh = STRING::ToVecUint8(resp.data); } + if (uriUrl.empty()) // No kid provided, assume key == kid + m_currentDefaultKID = STRING::ToHexadecimal(uriData); + + } + else if (STRING::CompareNoCase(keyFormat, DRM::URN_WIDEVINE)) + { + // Take only the KID if (STRING::KeyExists(attribs, "KEYID")) { std::string keyid = attribs["KEYID"]; @@ -1305,16 +1312,14 @@ PLAYLIST::EncryptionType adaptive::CHLSTree::ProcessEncryption( else LOG::LogF(LOGERROR, "Incorret KEYID tag format"); } - else if (uriUrl.empty()) // No kid provided, assume key == kid - m_currentDefaultKID = STRING::ToHexadecimal(uriData); + } - if (encryptMethod == "SAMPLE-AES-CTR") - m_cryptoMode = CryptoMode::AES_CTR; - else if (encryptMethod == "SAMPLE-AES") - m_cryptoMode = CryptoMode::AES_CBC; + if (encryptMethod == "SAMPLE-AES-CTR") + m_cryptoMode = CryptoMode::AES_CTR; + else if (encryptMethod == "SAMPLE-AES") + m_cryptoMode = CryptoMode::AES_CBC; - return EncryptionType::CLEARKEY; - } + return EncryptionType::CLEARKEY; } // Unsupported encryption From 5ff652f409ce1187d3f4b4cd775adf2eeb990782 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 15 Aug 2024 16:47:18 +0200 Subject: [PATCH 19/91] [DRM][ClearKey] Removed hardcoded key size and cast --- .../clearkey/ClearKeyCencSingleSampleDecrypter.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index 789837415..9538ea504 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -88,10 +88,10 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( return; } - std::vector keyBytes = BASE64::Decode(m_keyPairs[b64DefaultKeyId]); + const std::vector keyBytes = BASE64::Decode(m_keyPairs[b64DefaultKeyId]); if (AP4_FAILED(AP4_CencSingleSampleDecrypter::Create(AP4_CENC_CIPHER_AES_128_CTR, keyBytes.data(), - 16, 0, 0, nullptr, false, - m_singleSampleDecrypter))) + static_cast(keyBytes.size()), 0, 0, + nullptr, false, m_singleSampleDecrypter))) { LOG::LogF(LOGERROR, "Failed to create AP4_CencSingleSampleDecrypter"); } @@ -122,9 +122,9 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( LOG::LogF(LOGERROR, "Missing KeyId \"%s\" on DRM configuration", defaultKeyId.data()); } - const AP4_UI08* ap4Key = reinterpret_cast(hexKey.data()); - AP4_CencSingleSampleDecrypter::Create(AP4_CENC_CIPHER_AES_128_CTR, ap4Key, 16, 0, 0, nullptr, - false, m_singleSampleDecrypter); + AP4_CencSingleSampleDecrypter::Create(AP4_CENC_CIPHER_AES_128_CTR, hexKey.data(), + static_cast(hexKey.size()), 0, 0, nullptr, false, + m_singleSampleDecrypter); SetParentIsOwner(false); AddSessionKey(defaultKeyId); } From f2e9bdd42d6cca645b6c956ad4affc54d9d3497c Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 15 Aug 2024 16:53:33 +0200 Subject: [PATCH 20/91] [Base64Utils] Add Encode padding condition --- src/utils/Base64Utils.cpp | 36 ++++++++++++++++++++++-------------- src/utils/Base64Utils.h | 10 +++++----- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/utils/Base64Utils.cpp b/src/utils/Base64Utils.cpp index 0842e41cc..ca0a2db0f 100644 --- a/src/utils/Base64Utils.cpp +++ b/src/utils/Base64Utils.cpp @@ -44,7 +44,10 @@ constexpr unsigned char BASE64_TABLE[] = { // clang-format on } // namespace -void UTILS::BASE64::Encode(const uint8_t* input, const size_t length, std::string& output) +void UTILS::BASE64::Encode(const uint8_t* input, + const size_t length, + std::string& output, + const bool padding /* = true */) { if (input == nullptr || length == 0) return; @@ -68,40 +71,45 @@ void UTILS::BASE64::Encode(const uint8_t* input, const size_t length, std::strin output.push_back(CHARACTERS[(l >> 0) & 0x3F]); } - int left = 3 - (length % 3); - - if (length % 3) + if (padding) { - for (int i = 0; i < left; i++) - output.push_back(PADDING); + const int left = 3 - (length % 3); + + if (length % 3) + { + for (int i = 0; i < left; ++i) + output.push_back(PADDING); + } } } -std::string UTILS::BASE64::Encode(const uint8_t* input, const size_t length) +std::string UTILS::BASE64::Encode(const uint8_t* input, + const size_t length, + const bool padding /* = true */) { std::string output; - Encode(input, length, output); + Encode(input, length, output, padding); return output; } -std::string UTILS::BASE64::Encode(const std::vector& input) +std::string UTILS::BASE64::Encode(const std::vector& input, const bool padding /* = true */) { std::string output; - Encode(input.data(), input.size(), output); + Encode(input.data(), input.size(), output, padding); return output; } -std::string UTILS::BASE64::Encode(const std::vector& input) +std::string UTILS::BASE64::Encode(const std::vector& input, const bool padding /* = true */) { std::string output; - Encode(reinterpret_cast(input.data()), input.size(), output); + Encode(reinterpret_cast(input.data()), input.size(), output, padding); return output; } -std::string UTILS::BASE64::Encode(const std::string& inputStr) +std::string UTILS::BASE64::Encode(const std::string& inputStr, const bool padding /* = true */) { std::string output; - Encode(reinterpret_cast(inputStr.data()), inputStr.size(), output); + Encode(reinterpret_cast(inputStr.data()), inputStr.size(), output, padding); return output; } diff --git a/src/utils/Base64Utils.h b/src/utils/Base64Utils.h index 1b6457d95..c4fc602f6 100644 --- a/src/utils/Base64Utils.h +++ b/src/utils/Base64Utils.h @@ -18,11 +18,11 @@ namespace UTILS namespace BASE64 { -void Encode(const uint8_t* input, const size_t length, std::string& output); -std::string Encode(const uint8_t* input, const size_t length); -std::string Encode(const std::vector& input); -std::string Encode(const std::vector& input); -std::string Encode(const std::string& input); +void Encode(const uint8_t* input, const size_t length, std::string& output, const bool padding = true); +std::string Encode(const uint8_t* input, const size_t length, const bool padding = true); +std::string Encode(const std::vector& input, const bool padding = true); +std::string Encode(const std::vector& input, const bool padding = true); +std::string Encode(const std::string& input, const bool padding = true); void Decode(const char* input, const size_t length, std::vector& output); std::vector Decode(std::string_view input); From 219144e9196930fbb12d1276dc5e86d1e3187f56 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 15 Aug 2024 16:55:20 +0200 Subject: [PATCH 21/91] [DRM][ClearKey] Encode KID without padding --- src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index 9538ea504..6a798961e 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -178,8 +178,7 @@ std::string CClearKeyCencSingleSampleDecrypter::CreateLicenseRequest( * "type":"temporary" } */ - std::string b64Kid = UTILS::BASE64::Encode(defaultKeyId); - UTILS::STRING::ReplaceAll(b64Kid, "=", ""); + std::string b64Kid = UTILS::BASE64::Encode(defaultKeyId, false); rapidjson::Document jDoc; jDoc.SetObject(); From e4de8b22d326646ae482ec8027111f7067b292e8 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 15 Aug 2024 17:12:26 +0200 Subject: [PATCH 22/91] [CurlUtils] Add constructor for POST request --- src/utils/CurlUtils.cpp | 9 +++++++++ src/utils/CurlUtils.h | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/src/utils/CurlUtils.cpp b/src/utils/CurlUtils.cpp index 2809db300..1f747ea52 100644 --- a/src/utils/CurlUtils.cpp +++ b/src/utils/CurlUtils.cpp @@ -8,6 +8,7 @@ #include "CurlUtils.h" +#include "Base64Utils.h" #include "StringUtils.h" #include "UrlUtils.h" #include "Utils.h" @@ -201,6 +202,14 @@ UTILS::CURL::CUrl::CUrl(std::string_view url) } } +UTILS::CURL::CUrl::CUrl(std::string_view url, const std::string& postData) : CUrl::CUrl(url) +{ + if (m_file.IsOpen() && !postData.empty()) + { + m_file.CURLAddOption(ADDON_CURL_OPTION_PROTOCOL, "postdata", BASE64::Encode(postData)); + } +} + UTILS::CURL::CUrl::~CUrl() { if (CSrvBroker::GetKodiProps().GetConfig().internalCookies) diff --git a/src/utils/CurlUtils.h b/src/utils/CurlUtils.h index 788a79f33..22759bb1d 100644 --- a/src/utils/CurlUtils.h +++ b/src/utils/CurlUtils.h @@ -42,6 +42,13 @@ class ATTR_DLL_LOCAL CUrl * \param url The url of the file to download */ CUrl(std::string_view url); + + /*! + * \brief Create CUrl for POST request, if the data are empty, GET will be performed. + * \param url The request url + * \param postData The data for the POST request + */ + CUrl(std::string_view url, const std::string& postData); ~CUrl(); /*! From c7c74d3fcb6c1833b1e9980ba8d8af6f7a7c5fbf Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 15 Aug 2024 17:16:02 +0200 Subject: [PATCH 23/91] [Cleanup] Use CUrl constructor for post requests --- src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp | 4 +--- src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index 6a798961e..f3f96f87a 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -47,13 +47,11 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( FILESYS::SaveFile(debugFilePath, postData.c_str(), true); } - CURL::CUrl curl{licenseUrl}; + CURL::CUrl curl{licenseUrl, postData}; curl.AddHeader("Accept", "application/json"); curl.AddHeader("Content-Type", "application/json"); curl.AddHeaders(licenseHeaders); - curl.AddHeader("postdata", UTILS::BASE64::Encode(postData)); - std::string response; int statusCode = curl.Open(); if (statusCode == -1 || statusCode >= 400) diff --git a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp index 7ea559640..51923e047 100644 --- a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp +++ b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp @@ -459,6 +459,7 @@ bool CWVCencSingleSampleDecrypter::SendSessionMessage() } std::string encData{BASE64::Encode(blocks[2])}; + //! @todo: inappropriate use of "postdata" header, use CURL::CUrl for post request file.AddHeader("postdata", encData.c_str()); } From a3cde33b4d0d14cfe2a831c6767ec806fc2e2acc Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 16 Aug 2024 15:41:01 +0200 Subject: [PATCH 24/91] [KodiProps] DrmLegacyConfig, dont set m_licenseKey with clearkey --- src/CompKodiProps.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CompKodiProps.cpp b/src/CompKodiProps.cpp index 25264706b..2594ea339 100644 --- a/src/CompKodiProps.cpp +++ b/src/CompKodiProps.cpp @@ -493,6 +493,9 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmLegacyConfig(const std::string& da drmCfg.license.serverUrl = licenseUrl; ParseHeaderString(drmCfg.license.reqHeaders, licenseHeaders); + // Until the future DRM config rework only the ClearKey DRM use the new properties + // so return now to keep m_licenseKey empty + return true; } else if (licenseHeaders.empty()) { From 51b72ce9d2a65b6f3e08e6c1338bb59092cfff84 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 19 Aug 2024 11:45:29 +0200 Subject: [PATCH 25/91] [KodiProps] Some cleanup/fixes Mainly: - Avoid use of mixed DRM properties - Make working new "drm" property, in a temporary limited way for test --- src/CompKodiProps.cpp | 21 ++++++++++++++++++++- src/utils/StringUtils.h | 6 ++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/CompKodiProps.cpp b/src/CompKodiProps.cpp index 2594ea339..0334b8b0a 100644 --- a/src/CompKodiProps.cpp +++ b/src/CompKodiProps.cpp @@ -72,6 +72,18 @@ ADP::KODI_PROPS::CCompKodiProps::CCompKodiProps(const std::map}, + * "license": dict, + * ... }, * "keysystem_name_2" : { ... }} */ rapidjson::Document jDoc; @@ -397,6 +410,9 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmConfig(const std::string& data) continue; } + //! @todo: m_licenseType temporarily assigned, to remove with the DRM config rework + m_licenseType = keySystem; + DrmCfg& drmCfg = m_drmConfigs[keySystem]; auto& jDictVal = jChildObj.value; @@ -420,6 +436,9 @@ bool ADP::KODI_PROPS::CCompKodiProps::ParseDrmConfig(const std::string& data) } } } + + //! @todo: temporary support only one DRM config + break; } return true; diff --git a/src/utils/StringUtils.h b/src/utils/StringUtils.h index fbe4918fb..aac37c2db 100644 --- a/src/utils/StringUtils.h +++ b/src/utils/StringUtils.h @@ -27,6 +27,12 @@ bool KeyExists(const T& container, const Key& key) return container.find(key) != std::end(container); } +template +bool KeyExists(const T& container, const std::string_view key) +{ + return container.find(key.data()) != std::end(container); +} + /*! * \brief Get map value of the specified key * \param map The map where find the value From 1db862304dd579d4511258dd110ad21e54d6ec67 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 18 Aug 2024 18:08:25 +0200 Subject: [PATCH 26/91] [DashTree] Workaround to always get KID for ClearKey --- src/parser/DASHTree.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/parser/DASHTree.cpp b/src/parser/DASHTree.cpp index a0cd6b022..efb2a47ed 100644 --- a/src/parser/DASHTree.cpp +++ b/src/parser/DASHTree.cpp @@ -12,6 +12,7 @@ #include "PRProtectionParser.h" #include "SrvBroker.h" #include "common/Period.h" +#include "decrypters/Helpers.h" #include "utils/Base64Utils.h" #include "utils/CurlUtils.h" #include "utils/StringUtils.h" @@ -1336,6 +1337,34 @@ bool adaptive::CDashTree::GetProtectionData( } } + // Workaround for ClearKey: + // if license type ClearKey is set and a manifest dont contains ClearKey protection scheme + // in any case the KID is required to allow decryption (with clear keys or license URLs provided by Kodi props) + //! @todo: this should not be a task of parser, moreover missing an appropriate KID extraction from mp4 box + auto& kodiProps = CSrvBroker::GetKodiProps(); + ProtectionScheme ckProtScheme; + if (!protSelected && !protCommon && kodiProps.GetLicenseType() == DRM::KS_CLEARKEY) + { + for (const ProtectionScheme& protScheme : reprProtSchemes) + { + if (!protScheme.kid.empty()) + { + ckProtScheme.kid = protScheme.kid; + break; + } + } + if (ckProtScheme.kid.empty()) + { + for (const ProtectionScheme& protScheme : adpProtSchemes) + { + ckProtScheme.kid = protScheme.kid; + break; + } + } + if (!ckProtScheme.kid.empty()) + protCommon = &ckProtScheme; + } + bool isEncrypted{false}; std::string selectedKid; std::string selectedPssh; From 32eb73a889008421eed49f666710f694cf28b8c8 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 18 Aug 2024 18:14:55 +0200 Subject: [PATCH 27/91] [ClearKey] Allow only "cenc" encryption --- src/decrypters/clearkey/ClearKeyDecrypter.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/decrypters/clearkey/ClearKeyDecrypter.cpp b/src/decrypters/clearkey/ClearKeyDecrypter.cpp index 08944445c..cceaf61cc 100644 --- a/src/decrypters/clearkey/ClearKeyDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyDecrypter.cpp @@ -12,6 +12,7 @@ #include "CompKodiProps.h" #include "SrvBroker.h" #include "decrypters/Helpers.h" +#include "utils/log.h" std::vector CClearKeyDecrypter::SelectKeySystems(std::string_view keySystem) { @@ -39,6 +40,12 @@ Adaptive_CencSingleSampleDecrypter* CClearKeyDecrypter::CreateSingleSampleDecryp bool skipSessionMessage, CryptoMode cryptoMode) { + if (cryptoMode != CryptoMode::AES_CTR) + { + LOG::LogF(LOGERROR, "Cannot initialize ClearKey DRM. Only \"cenc\" encryption supported."); + return nullptr; + } + CClearKeyCencSingleSampleDecrypter* decrypter = nullptr; auto& cfgLic = CSrvBroker::GetKodiProps().GetDrmConfig(std::string(DRM::KS_CLEARKEY)).license; From ac5dbe340b481a7a64ec6b0e511549410fc63c75 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Wed, 21 Aug 2024 14:23:59 +0200 Subject: [PATCH 28/91] [AdaptiveUtils] Fix defaultkid to tenc atom on CreateMovieAtom --- src/common/AdaptiveUtils.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/common/AdaptiveUtils.cpp b/src/common/AdaptiveUtils.cpp index 7fe9ab667..63024cffd 100644 --- a/src/common/AdaptiveUtils.cpp +++ b/src/common/AdaptiveUtils.cpp @@ -10,6 +10,7 @@ #include "AdaptiveStream.h" #include "Representation.h" +#include "decrypters/Helpers.h" #include "utils/log.h" #include "utils/Utils.h" @@ -125,14 +126,14 @@ AP4_Movie* PLAYLIST::CreateMovieAtom(adaptive::AdaptiveStream& adStream, const PLAYLIST::CPeriod::PSSHSet& psshSet = adStream.getPeriod()->GetPSSHSets()[repr->GetPsshSetPos()]; - const AP4_UI08* kid = nullptr; + std::vector defaultKid; if (psshSet.defaultKID_.empty()) - kid = DEFAULT_KEYID; + defaultKid.assign(DEFAULT_KEYID, DEFAULT_KEYID + 16); else - kid = reinterpret_cast(psshSet.defaultKID_.data()); + defaultKid = DRM::ConvertKidStrToBytes(psshSet.defaultKID_); AP4_ContainerAtom schi{AP4_ATOM_TYPE_SCHI}; - schi.AddChild(new AP4_TencAtom(AP4_CENC_CIPHER_AES_128_CTR, 8, kid)); + schi.AddChild(new AP4_TencAtom(AP4_CENC_CIPHER_AES_128_CTR, 8, defaultKid.data())); sampleDesc = new AP4_ProtectedSampleDescription(0, sampleDesc, 0, AP4_PROTECTION_SCHEME_TYPE_PIFF, 0, "", &schi); } From 818faadb9ef155bf11feb6c049896a59c37d8b1e Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 22 Aug 2024 09:51:32 +0200 Subject: [PATCH 29/91] [PRProtectionParser] Fix KID parsing --- src/parser/PRProtectionParser.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/parser/PRProtectionParser.cpp b/src/parser/PRProtectionParser.cpp index 6649bdee4..0a6d87357 100644 --- a/src/parser/PRProtectionParser.cpp +++ b/src/parser/PRProtectionParser.cpp @@ -123,18 +123,30 @@ bool adaptive::PRProtectionParser::ParseHeader(std::string_view prHeader) } else { - // Versions > 4.0 can contains one or more optionals KID's within DATA/PROTECTINFO/KIDS tag + // Versions > 4.0 can contains: + // DATA/PROTECTINFO/KID tag or multiple KID tags on DATA/PROTECTINFO/KIDS xml_node nodePROTECTINFO = nodeDATA.child("PROTECTINFO"); if (nodePROTECTINFO) { - xml_node nodeKIDS = nodePROTECTINFO.child("KIDS"); - if (nodeKIDS) + xml_node nodeKID = nodePROTECTINFO.child("KID"); + if (nodeKID) { - LOG::Log(LOGDEBUG, "Playready header contains %zu KID's.", - XML::CountChilds(nodeKIDS, "KID")); - // We get the first KID - xml_node nodeKID = nodeKIDS.child("KID"); - kidBase64 = nodeKID.child_value(); + kidBase64 = nodeKID.attribute("VALUE").as_string(); + } + else + { + xml_node nodeKIDS = nodePROTECTINFO.child("KIDS"); + if (nodeKIDS) + { + LOG::Log(LOGDEBUG, "Playready header contains %zu KID's.", + XML::CountChilds(nodeKIDS, "KID")); + // We get the first KID + xml_node nodeKID = nodeKIDS.child("KID"); + if (nodeKID) + { + kidBase64 = nodeKID.attribute("VALUE").as_string(); + } + } } } } From 22c7dd692dd02c3322dc1ffd5d642dba085f19a8 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Wed, 21 Aug 2024 17:15:47 +0200 Subject: [PATCH 30/91] [DashTree] Improved clearkey defaultkid workaround --- src/parser/DASHTree.cpp | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/parser/DASHTree.cpp b/src/parser/DASHTree.cpp index efb2a47ed..18261c1e3 100644 --- a/src/parser/DASHTree.cpp +++ b/src/parser/DASHTree.cpp @@ -1343,26 +1343,41 @@ bool adaptive::CDashTree::GetProtectionData( //! @todo: this should not be a task of parser, moreover missing an appropriate KID extraction from mp4 box auto& kodiProps = CSrvBroker::GetKodiProps(); ProtectionScheme ckProtScheme; - if (!protSelected && !protCommon && kodiProps.GetLicenseType() == DRM::KS_CLEARKEY) + if (kodiProps.GetLicenseType() == DRM::KS_CLEARKEY) { - for (const ProtectionScheme& protScheme : reprProtSchemes) + std::string_view defaultKid; + if (protSelected) + defaultKid = protSelected->kid; + if (defaultKid.empty() && protCommon) + defaultKid = protCommon->kid; + + if (defaultKid.empty()) { - if (!protScheme.kid.empty()) + for (const ProtectionScheme& protScheme : reprProtSchemes) { - ckProtScheme.kid = protScheme.kid; - break; + if (!protScheme.kid.empty()) + { + defaultKid = protScheme.kid; + break; + } } - } - if (ckProtScheme.kid.empty()) - { - for (const ProtectionScheme& protScheme : adpProtSchemes) + if (defaultKid.empty()) { - ckProtScheme.kid = protScheme.kid; - break; + for (const ProtectionScheme& protScheme : adpProtSchemes) + { + if (!protScheme.kid.empty()) + { + defaultKid = protScheme.kid; + break; + } + } } - } - if (!ckProtScheme.kid.empty()) + if (protCommon) + ckProtScheme = *protCommon; + + ckProtScheme.kid = defaultKid; protCommon = &ckProtScheme; + } } bool isEncrypted{false}; From ea0cb85b90b9af17a2428e9500d684ee31a01083 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 22 Aug 2024 09:45:57 +0200 Subject: [PATCH 31/91] Force delete streams, when decrypter is not initialized --- src/Session.cpp | 8 +++++++- src/Session.h | 2 ++ src/main.cpp | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/Session.cpp b/src/Session.cpp index 8ff6d7d8f..fd6814914 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -65,7 +65,7 @@ CSession::CSession(const std::string& manifestUrl) : m_manifestUrl(manifestUrl) CSession::~CSession() { LOG::Log(LOGDEBUG, "CSession::~CSession()"); - m_streams.clear(); + DeleteStreams(); DisposeDecrypter(); if (m_adaptiveTree) @@ -79,6 +79,12 @@ CSession::~CSession() m_reprChooser = nullptr; } +void SESSION::CSession::DeleteStreams() +{ + LOG::Log(LOGDEBUG, "CSession::DeleteStreams()"); + m_streams.clear(); +} + void CSession::SetSupportedDecrypterURN(std::vector& keySystems) { std::string decrypterPath = CSrvBroker::GetSettings().GetDecrypterPath(); diff --git a/src/Session.h b/src/Session.h index 0e6aa3147..3d06779d3 100644 --- a/src/Session.h +++ b/src/Session.h @@ -30,6 +30,8 @@ class ATTR_DLL_LOCAL CSession : public adaptive::AdaptiveStreamObserver CSession(const std::string& manifestUrl); virtual ~CSession(); + void DeleteStreams(); + /*! \brief Initialize the session * \return True if has success, false otherwise */ diff --git a/src/main.cpp b/src/main.cpp index 964dd0d42..4d8217d83 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -136,6 +136,27 @@ bool CInputStreamAdaptive::GetStream(int streamid, kodi::addon::InputstreamInfo& if (stream) { + // If the stream is encrypted, verify if the decrypter has been initialized + // this is important for HLS because the DRM it is initialized at later time + // so on the OpenStream, instead of CSession::Initialize->InitializePeriod->InitializeDRM + // Since kodi initialize one single stream at time, can happens that or another stream + // has been opened before this one, or another stream will be opened after this one (e.g. unencrypted) + // so if you dont delete all streams, the kodi demux reader still starts + // and a corrupted playback will starts. + // NOTE: GetStream is called by Kodi twice times, before and after OpenStream, on HLS + // the first time all streams are unencrypted because child manifest has not been downloaded + const uint16_t psshSetPos = stream->m_adStream.getRepresentation()->m_psshSetPos; + if (psshSetPos != PSSHSET_POS_DEFAULT || + stream->m_adStream.getPeriod()->GetEncryptionState() == EncryptionState::NOT_SUPPORTED) + { + if (!m_session->GetSingleSampleDecryptor(psshSetPos)) + { + LOG::Log(LOGERROR, "GetStream(%d): Decrypter for the stream not found"); + m_session->DeleteStreams(); + return false; + } + } + info = stream->m_info; return true; } From 37dfe8fa9cddeb113486c65a2999f342fe877b88 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 24 Aug 2024 14:38:15 +0000 Subject: [PATCH 32/91] changelog and version v21.5.3 (2024-08-24) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index e0976dbf5..6506198a6 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 7d404ff76..5117126d4 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,12 @@ +v21.5.3 (2024-08-24) +- INFO: Playback problems with PlayReady DRM are known, we are investigating for a solution +- [ClearKey] Add support to set license server url from drm_legacy property +- [ClearKey] Add support to set license server headers from drm_legacy property +- [ClearKey] Improved compatibility to override manifests with other DRM's +- [HLS] Fix non-stop playback problem when the decrypter is not initialised for some problem +- Fix a license data regression with smooth streaming +- Fix a smooth streaming regression that caused decryption problems + v21.5.2 (2024-08-10) [HLS] Fix playback stop problem with some AAC streams Fix builds with GCC-14 From 26e90c6688ab6ab97c4b8221018402a02e6343cd Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 25 Aug 2024 10:14:35 +0200 Subject: [PATCH 33/91] [ClearKey] Fix base64 encoding/decoding --- .../ClearKeyCencSingleSampleDecrypter.cpp | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index f3f96f87a..14cc94756 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -25,6 +25,21 @@ using namespace UTILS; +namespace +{ +void CkB64Encode(std::string& str) +{ + STRING::ReplaceAll(str, "+", "-"); + STRING::ReplaceAll(str, "/", "_"); +} + +void CkB64Decode(std::string& str) +{ + STRING::ReplaceAll(str, "-", "+"); + STRING::ReplaceAll(str, "_", "/"); +} +} + CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( std::string_view licenseUrl, const std::map& licenseHeaders, @@ -177,6 +192,7 @@ std::string CClearKeyCencSingleSampleDecrypter::CreateLicenseRequest( */ std::string b64Kid = UTILS::BASE64::Encode(defaultKeyId, false); + CkB64Encode(b64Kid); rapidjson::Document jDoc; jDoc.SetObject(); @@ -253,8 +269,8 @@ bool CClearKeyCencSingleSampleDecrypter::ParseLicenseResponse(std::string data) if (!b64Key.empty() && !b64KeyId.empty()) { - UTILS::STRING::ReplaceAll(b64Key, "-", "+"); - UTILS::STRING::ReplaceAll(b64KeyId, "-", "+"); + CkB64Decode(b64Key); + CkB64Decode(b64KeyId); // pad b64 int left = 4 - (b64Key.length() % 4); From e02150633628e0bec3d9aad0dcb592c9ebd46634 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 25 Aug 2024 10:43:20 +0200 Subject: [PATCH 34/91] [ClearKey] Moved padding method to BASE64 utils --- .../ClearKeyCencSingleSampleDecrypter.cpp | 22 +++---------------- src/utils/Base64Utils.cpp | 14 ++++++++++++ src/utils/Base64Utils.h | 2 ++ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index 14cc94756..a6b63a357 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -270,26 +270,10 @@ bool CClearKeyCencSingleSampleDecrypter::ParseLicenseResponse(std::string data) if (!b64Key.empty() && !b64KeyId.empty()) { CkB64Decode(b64Key); - CkB64Decode(b64KeyId); + BASE64::AddPadding(b64Key); - // pad b64 - int left = 4 - (b64Key.length() % 4); - if (b64Key.length() % 4) - { - for (int i = 0; i < left; i++) - { - b64Key.push_back('='); - } - } - - left = 4 - (b64KeyId.length() % 4); - if (b64KeyId.length() % 4) - { - for (int i = 0; i < left; i++) - { - b64KeyId.push_back('='); - } - } + CkB64Decode(b64KeyId); + BASE64::AddPadding(b64KeyId); m_keyPairs.emplace(b64KeyId, b64Key); break; diff --git a/src/utils/Base64Utils.cpp b/src/utils/Base64Utils.cpp index ca0a2db0f..6a07d5b40 100644 --- a/src/utils/Base64Utils.cpp +++ b/src/utils/Base64Utils.cpp @@ -217,3 +217,17 @@ bool UTILS::BASE64::IsValidBase64(const std::string& input) std::regex base64Regex(REGEX.data()); return std::regex_match(input, base64Regex); } + +bool UTILS::BASE64::AddPadding(std::string& base64str) +{ + const int mod = static_cast(base64str.length() % 4); + if (mod > 0) + { + for (int i = 4 - mod; i > 0; --i) + { + base64str.push_back(PADDING); + } + return true; + } + return false; +} diff --git a/src/utils/Base64Utils.h b/src/utils/Base64Utils.h index c4fc602f6..d155ff9d7 100644 --- a/src/utils/Base64Utils.h +++ b/src/utils/Base64Utils.h @@ -30,5 +30,7 @@ std::string DecodeToStr(std::string_view input); bool IsValidBase64(const std::string& input); +bool AddPadding(std::string& base64str); + } // namespace BASE64 } // namespace UTILS From 2001365f2b24aa53bd20ccaf464c97f48b5cbeaf Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 25 Aug 2024 10:52:53 +0200 Subject: [PATCH 35/91] [ClearKey][cleanup] Removed unneeded namespace --- .../clearkey/ClearKeyCencSingleSampleDecrypter.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp index a6b63a357..bb31e8dde 100644 --- a/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp +++ b/src/decrypters/clearkey/ClearKeyCencSingleSampleDecrypter.cpp @@ -94,7 +94,7 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( return; } - const std::string b64DefaultKeyId = UTILS::BASE64::Encode(defaultKeyId); + const std::string b64DefaultKeyId = BASE64::Encode(defaultKeyId); if (!STRING::KeyExists(m_keyPairs, b64DefaultKeyId)) { LOG::LogF(LOGERROR, "Key not found on license server response"); @@ -127,10 +127,10 @@ CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter( } else // Key provided in Kodi props { - const std::string hexDefKid = UTILS::STRING::ToHexadecimal(defaultKeyId); + const std::string hexDefKid = STRING::ToHexadecimal(defaultKeyId); if (STRING::KeyExists(keys, hexDefKid)) - UTILS::STRING::ToHexBytes(keys.at(hexDefKid), hexKey); + STRING::ToHexBytes(keys.at(hexDefKid), hexKey); else LOG::LogF(LOGERROR, "Missing KeyId \"%s\" on DRM configuration", defaultKeyId.data()); } @@ -191,7 +191,7 @@ std::string CClearKeyCencSingleSampleDecrypter::CreateLicenseRequest( * "type":"temporary" } */ - std::string b64Kid = UTILS::BASE64::Encode(defaultKeyId, false); + std::string b64Kid = BASE64::Encode(defaultKeyId, false); CkB64Encode(b64Kid); rapidjson::Document jDoc; From bb3f554119fb908f8d09154cdf8a24bc52a0e348 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Wed, 28 Aug 2024 09:23:08 +0200 Subject: [PATCH 36/91] [Session] Fix wrong KID conversion --- src/Session.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Session.cpp b/src/Session.cpp index fd6814914..6d20389b9 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -1501,7 +1501,7 @@ bool CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet& sessionPs { if (pssh[i].GetKid(0)) { - sessionPsshset.defaultKID_ = std::string((const char*)pssh[i].GetKid(0), 16); + sessionPsshset.defaultKID_ = STRING::ToHexadecimal(pssh[i].GetKid(0), 16); } else if (AP4_Track* track = movie->GetTrack( static_cast(stream.m_adStream.GetTrackType()))) From 0a19583bd7fd947997f7d78ef613b6fb11a190c2 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 27 Aug 2024 16:22:06 +0200 Subject: [PATCH 37/91] [AdaptiveTree] Fix spurious wakeups on TreeUpdateThread This problem was causing a delay on manifest updates due to wrong timings was due to spurious wakeups where the previous wait_for was exiting early by returning std::cv_status::no_timeout and so the while loop restarted, and the interval also each time restarted --- src/common/AdaptiveTree.cpp | 43 +++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/common/AdaptiveTree.cpp b/src/common/AdaptiveTree.cpp index c2c8e9109..223d47306 100644 --- a/src/common/AdaptiveTree.cpp +++ b/src/common/AdaptiveTree.cpp @@ -279,24 +279,31 @@ namespace adaptive while (m_tree->m_updateInterval != NO_VALUE && m_tree->m_updateInterval > 0 && !m_threadStop) { - if (m_cvUpdInterval.wait_for(updLck, std::chrono::milliseconds(m_tree->m_updateInterval)) == - std::cv_status::timeout) - { - updLck.unlock(); - // If paused, wait until last "Resume" will be called - std::unique_lock lckWait(m_waitMutex); - m_cvWait.wait(lckWait, [&] { return m_waitQueue == 0; }); - if (m_threadStop) - break; - - updLck.lock(); - - // Reset interval value to allow forced update from manifest - if (m_resetInterval) - m_tree->m_updateInterval = PLAYLIST::NO_VALUE; - - m_tree->OnUpdateSegments(); - } + auto nowTime = std::chrono::steady_clock::now(); + + std::chrono::milliseconds intervalMs = std::chrono::milliseconds(m_tree->m_updateInterval); + // Wait for the interval time, the predicate method is used to avoid spurious wakeups + // and to allow exit early when notify_all is called to force stop operations + m_cvUpdInterval.wait_for(updLck, intervalMs, + [&nowTime, &intervalMs, this] { + return std::chrono::steady_clock::now() - nowTime >= intervalMs || + m_threadStop; + }); + + updLck.unlock(); + // If paused, wait until last "Resume" will be called + std::unique_lock lckWait(m_waitMutex); + m_cvWait.wait(lckWait, [&] { return m_waitQueue == 0; }); + if (m_threadStop) + break; + + updLck.lock(); + + // Reset interval value to allow forced update from manifest + if (m_resetInterval) + m_tree->m_updateInterval = PLAYLIST::NO_VALUE; + + m_tree->OnUpdateSegments(); } } From 8880c54e25034bd837f83e446b39cfeccef154e0 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 19 Aug 2024 10:37:06 +0200 Subject: [PATCH 38/91] [Session] Reworked pssh generation for smoothstreaming --- src/Session.cpp | 26 +++-- src/decrypters/Helpers.cpp | 199 ++++++++++++++++++++++++++----------- src/decrypters/Helpers.h | 38 ++++++- 3 files changed, 191 insertions(+), 72 deletions(-) diff --git a/src/Session.cpp b/src/Session.cpp index 6d20389b9..3974e3710 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -407,7 +407,8 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) if (sessionPsshset.adaptation_set_->GetStreamType() == StreamType::NOTYPE) continue; - std::string_view licenseData = CSrvBroker::GetKodiProps().GetLicenseData(); + const std::vector defaultKid = DRM::ConvertKidStrToBytes(sessionPsshset.defaultKID_); + std::string_view licenseDataStr = CSrvBroker::GetKodiProps().GetLicenseData(); if (m_adaptiveTree->GetTreeType() == adaptive::TreeType::SMOOTH_STREAMING) { @@ -417,17 +418,21 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) //! @todo: CreateISMlicense accept placeholders {KID} and {UUID} but its not wiki documented //! we should continue allow create custom pssh with placeholders? //! see also todo's below - if (licenseData.empty()) + std::vector licenseData = BASE64::Decode(licenseDataStr); + + if (DRM::IsValidPsshHeader(licenseData)) { - LOG::Log(LOGDEBUG, "License data: Create Widevine PSSH for SmoothStreaming"); - licenseData = "e0tJRH0="; // {KID} + initData = licenseData; } else { - LOG::Log(LOGDEBUG, "License data: Create Widevine PSSH for SmoothStreaming, based on " - "license data property"); + LOG::Log(LOGDEBUG, "License data: Create Widevine PSSH for SmoothStreaming %s", + licenseData.empty() ? "" : "(with custom data)"); + + std::vector wvPsshData; + if (DRM::MakeWidevinePsshData(defaultKid, licenseData, wvPsshData)) + DRM::MakePssh(DRM::ID_WIDEVINE, wvPsshData, initData); } - DRM::CreateISMlicense(sessionPsshset.defaultKID_, licenseData, initData); } else if (licenseType == "com.microsoft.playready") { @@ -441,16 +446,16 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) //! As first decoupling things and allowing to have a way to set DRM optional parameters in a extensible way //! for future other use cases, and not limited to Playready only. //! To take in account that license_data property is also used on DASH parser to bypass ContentProtection tags. - drmOptionalKeyParam = licenseData; + drmOptionalKeyParam = licenseDataStr; } } - else if (!licenseData.empty()) + else if (!licenseDataStr.empty()) { // Custom license PSSH data provided from property // This can allow to initialize a DRM that could be also not specified // as supported in the manifest (e.g. missing DASH ContentProtection tags) LOG::Log(LOGDEBUG, "License data: Use PSSH data provided by the license data property"); - initData = BASE64::Decode(licenseData); + initData = BASE64::Decode(licenseDataStr); } if (initData.empty() && sessionPsshset.m_licenseUrl.empty()) @@ -470,7 +475,6 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) } CCdmSession& session{m_cdmSessions[ses]}; - const std::vector defaultKid = DRM::ConvertKidStrToBytes(sessionPsshset.defaultKID_); if (addDefaultKID && ses == 1 && session.m_cencSingleSampleDecrypter) { diff --git a/src/decrypters/Helpers.cpp b/src/decrypters/Helpers.cpp index 43232001b..10c1cf979 100644 --- a/src/decrypters/Helpers.cpp +++ b/src/decrypters/Helpers.cpp @@ -14,8 +14,65 @@ #include "utils/UrlUtils.h" #include "utils/log.h" +#include + using namespace UTILS; +namespace +{ +constexpr uint8_t PSSHBOX_HEADER_PSSH[4] = {0x70, 0x73, 0x73, 0x68}; +constexpr uint8_t PSSHBOX_HEADER_VER0[4] = {0x00, 0x00, 0x00, 0x00}; + +/*! + * \brief Make a protobuf tag. + * \param fieldNumber The field number + * \param wireType The wire type: + * 0 = varint (int32, int64, uint32, uint64, sint32, sint64, bool, enum) + * 1 = 64 bit (fixed64, sfixed64, double) + * 2 = Length-delimited (string, bytes, embedded messages, packed repeated fields) + * 5 = 32 bit (fixed32, sfixed32, float) + * \return The tag. + */ +int MakeProtobufTag(int fieldNumber, int wireType) +{ + return (fieldNumber << 3) | wireType; +} + +// \brief Write the size value to the data as varint format +void WriteProtobufVarintSize(std::vector& data, int size) +{ + do + { + uint8_t byte = size & 127; + size >>= 7; + if (size > 0) + byte |= 128; // Varint continuation + data.emplace_back(byte); + } while (size > 0); +} + +/*! + * \brief Replace in a vector, a sequence of vector data with another one. + * \param data The data to be modified + * \param sequence The sequence of data to be searched + * \param replace The data used to replace the sequence + * \return True if the data has been modified, otherwise false. + */ +bool ReplaceVectorSeq(std::vector& data, + const std::vector& sequence, + const std::vector& replace) +{ + auto it = std::search(data.begin(), data.end(), sequence.begin(), sequence.end()); + if (it != data.end()) + { + it = data.erase(it, it + sequence.size()); + data.insert(it, replace.begin(), replace.end()); + return true; + } + return false; +} +} // unnamed namespace + std::string DRM::GenerateUrlDomainHash(std::string_view url) { std::string baseDomain = URL::GetBaseDomain(url.data()); @@ -107,6 +164,27 @@ std::string DRM::ConvertKidBytesToUUID(std::vector kid) return uuid; } +std::vector DRM::ConvertKidToUUIDVec(const std::vector& kid) +{ + if (kid.size() != 16) + return {}; + + static char hexDigits[] = "0123456789abcdef"; + std::vector uuid; + uuid.reserve(32); + + for (size_t i = 0; i < 16; ++i) + { + if (i == 4 || i == 6 || i == 8 || i == 10) + uuid.emplace_back('-'); + + uuid.emplace_back(hexDigits[kid[i] >> 4]); + uuid.emplace_back(hexDigits[kid[i] & 15]); + } + + return uuid; +} + std::vector DRM::ConvertPrKidtoWvKid(std::vector kid) { if (kid.size() != 16) @@ -122,77 +200,82 @@ std::vector DRM::ConvertPrKidtoWvKid(std::vector kid) return remapped; } -bool DRM::CreateISMlicense(std::string_view kidStr, - std::string_view licenseData, - std::vector& initData) +bool DRM::IsValidPsshHeader(const std::vector& pssh) { - std::vector kidBytes = ConvertKidStrToBytes(kidStr); + return pssh.size() >= 8 && std::equal(pssh.begin() + 4, pssh.begin() + 8, PSSHBOX_HEADER_PSSH); +} - if (kidBytes.size() != 16 || licenseData.empty()) - { - initData.clear(); - return false; - } +bool DRM::MakeWidevinePsshData(const std::vector& kid, + std::vector contentIdData, + std::vector& wvPsshData) +{ + wvPsshData.clear(); - std::string decLicData = BASE64::DecodeToStr(licenseData); - size_t origLicenseSize = decLicData.size(); + if (kid.empty()) + return false; - const uint8_t* kid{reinterpret_cast(std::strstr(decLicData.data(), "{KID}"))}; - const uint8_t* uuid{reinterpret_cast(std::strstr(decLicData.data(), "{UUID}"))}; - uint8_t* decLicDataUint = reinterpret_cast(decLicData.data()); + // The generated synthesized Widevine PSSH box require minimal contents: + // - The key_id field set with the KID + // - The content_id field copied from the key_id field (but we allow custom content) - size_t license_size = uuid ? origLicenseSize + 36 - 6 : origLicenseSize; + // Create "key_id" field, id: 2 (can be repeated if multiples) + wvPsshData.push_back(MakeProtobufTag(2, 2)); + WriteProtobufVarintSize(wvPsshData, static_cast(kid.size())); + wvPsshData.insert(wvPsshData.end(), kid.begin(), kid.end()); - //Build up proto header - initData.resize(512); - uint8_t* protoptr(initData.data()); - if (kid) + // Prepare "content_id" data + if (contentIdData.empty()) // If no data, by default add the KID { - if (uuid && uuid < kid) - return false; - license_size -= 5; //Remove sizeof(placeholder) - std::memcpy(protoptr, decLicDataUint, kid - decLicDataUint); - protoptr += kid - decLicDataUint; - license_size -= static_cast(kid - decLicDataUint); - kid += 5; - origLicenseSize -= kid - decLicDataUint; + contentIdData.insert(contentIdData.end(), kid.begin(), kid.end()); } else - kid = decLicDataUint; + { + // Replace placeholders if needed + static const std::vector phKid = {'{', 'K', 'I', 'D', '}'}; + ReplaceVectorSeq(contentIdData, phKid, kid); - *protoptr++ = 18; //id=16>>3=2, type=2(flexlen) - *protoptr++ = 16; //length of key - std::memcpy(protoptr, kidBytes.data(), 16); - protoptr += 16; + static const std::vector phUuid = {'{', 'U', 'U', 'I', 'D', '}'}; + const std::vector kidUuid = ConvertKidToUUIDVec(kid); + ReplaceVectorSeq(contentIdData, phUuid, kidUuid); + } - *protoptr++ = 34; //id=32>>3=4, type=2(flexlen) - do - { - *protoptr++ = static_cast(license_size & 127); - license_size >>= 7; - if (license_size) - *(protoptr - 1) |= 128; - else - break; - } while (1); - if (uuid) - { - std::memcpy(protoptr, kid, uuid - kid); - protoptr += uuid - kid; + // Create "content_id" field, id: 4 + wvPsshData.push_back(MakeProtobufTag(4, 2)); + WriteProtobufVarintSize(wvPsshData, static_cast(contentIdData.size())); + wvPsshData.insert(wvPsshData.end(), contentIdData.begin(), contentIdData.end()); - std::string uuidKid{ConvertKidBytesToUUID(kidBytes)}; - protoptr = reinterpret_cast(uuidKid.data()); + return true; +} - size_t sizeleft = origLicenseSize - ((uuid - kid) + 6); - std::memcpy(protoptr, uuid + 6, sizeleft); - protoptr += sizeleft; - } - else - { - std::memcpy(protoptr, kid, origLicenseSize); - protoptr += origLicenseSize; - } - initData.resize(protoptr - initData.data()); +bool DRM::MakePssh(const uint8_t* systemId, + const std::vector& initData, + std::vector& psshData) +{ + if (!systemId) + return false; + + psshData.clear(); + psshData.resize(4, 0); // Size field 4 bytes (updated later) + psshData.insert(psshData.end(), PSSHBOX_HEADER_PSSH, PSSHBOX_HEADER_PSSH + 4); + psshData.insert(psshData.end(), PSSHBOX_HEADER_VER0, PSSHBOX_HEADER_VER0 + 4); + psshData.insert(psshData.end(), systemId, systemId + 16); + + // Add init data size (4 bytes) + const uint32_t initDataSize = static_cast(initData.size()); + psshData.emplace_back(static_cast((initDataSize >> 24) & 0xFF)); + psshData.emplace_back(static_cast((initDataSize >> 16) & 0xFF)); + psshData.emplace_back(static_cast((initDataSize >> 8) & 0xFF)); + psshData.emplace_back(static_cast(initDataSize & 0xFF)); + + // Add init data + psshData.insert(psshData.end(), initData.begin(), initData.end()); + + // Update box size (first 4 bytes) + const uint32_t boxSize = static_cast(psshData.size()); + psshData[0] = static_cast((boxSize >> 24) & 0xFF); + psshData[1] = static_cast((boxSize >> 16) & 0xFF); + psshData[2] = static_cast((boxSize >> 8) & 0xFF); + psshData[3] = static_cast(boxSize & 0xFF); return true; } diff --git a/src/decrypters/Helpers.h b/src/decrypters/Helpers.h index 55dca4407..346eaa3b8 100644 --- a/src/decrypters/Helpers.h +++ b/src/decrypters/Helpers.h @@ -31,6 +31,11 @@ constexpr std::string_view URN_WISEPLAY = "urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c constexpr std::string_view URN_CLEARKEY = "urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e"; constexpr std::string_view URN_COMMON = "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"; +// DRM System ID's + +constexpr uint8_t ID_WIDEVINE[16] = {0xed, 0xef, 0x8b, 0xa9, 0x79, 0xd6, 0x4a, 0xce, + 0xa3, 0xc8, 0x27, 0xdc, 0xd5, 0x1d, 0x21, 0xed}; + bool IsKeySystemSupported(std::string_view keySystem); @@ -62,6 +67,8 @@ std::vector ConvertKidStrToBytes(std::string_view kidStr); */ std::string ConvertKidBytesToUUID(std::vector kid); +std::vector ConvertKidToUUIDVec(const std::vector& kid); + /*! * \brief Convert a PlayReady KeyId of 16 bytes to a Widevine KeyId. * \param kid The PlayReady KeyId @@ -69,8 +76,33 @@ std::string ConvertKidBytesToUUID(std::vector kid); */ std::vector ConvertPrKidtoWvKid(std::vector kid); -bool CreateISMlicense(std::string_view kidStr, - std::string_view licenseData, - std::vector& initData); +bool IsValidPsshHeader(const std::vector& pssh); + +/*! + * \brief Generate a synthesized Widevine PSSH. + * (WidevinePsshData as google protobuf format + * https://github.com/devine-dl/pywidevine/blob/master/pywidevine/license_protocol.proto) + * \param kid The KeyId + * \param contentIdData Custom content for the "content_id" field as bytes + * Placeholders allowed: + * {KID} To inject the KID as bytes + * {UUID} To inject the KID as UUID string format + * \param wvPsshData[OUT] The generated Widevine PSSH + * \return True if has success, otherwise false. + */ +bool MakeWidevinePsshData(const std::vector& kid, + std::vector contentIdData, + std::vector& wvPsshData); + +/*! + * \brief Generate a PSSH box (version 0, no KID's). + * \param systemUuid The DRM System ID (expected 16 bytes) + * \param initData The init data e.g. WidevinePsshData + * \param psshData[OUT] The generated PSSH + * \return True if has success, otherwise false. + */ +bool MakePssh(const uint8_t* systemId, + const std::vector& initData, + std::vector& psshData); }; // namespace DRM From b4bc549dcde5d77c03865d46f912514789b35cf5 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 18 Aug 2024 20:48:50 +0200 Subject: [PATCH 39/91] [Widevine][android] Fix missing library path for log --- src/decrypters/widevineandroid/WVDecrypter.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/decrypters/widevineandroid/WVDecrypter.h b/src/decrypters/widevineandroid/WVDecrypter.h index 070bd16b3..f009aca68 100644 --- a/src/decrypters/widevineandroid/WVDecrypter.h +++ b/src/decrypters/widevineandroid/WVDecrypter.h @@ -129,8 +129,11 @@ class ATTR_DLL_LOCAL CWVDecrypterA : public IDecrypter, public CMediaDrmOnEventC virtual void ResetVideo() override {} - virtual void SetLibraryPath(std::string_view libraryPath) override {} - virtual std::string_view GetLibraryPath() const override { return ""; } + virtual void SetLibraryPath(std::string_view libraryPath) override + { + m_libraryPath = libraryPath; + } + virtual std::string_view GetLibraryPath() const override { return m_libraryPath; } virtual void OnMediaDrmEvent(const CJNIMediaDrm& mediaDrm, const std::vector& sessionId, @@ -139,6 +142,7 @@ class ATTR_DLL_LOCAL CWVDecrypterA : public IDecrypter, public CMediaDrmOnEventC const std::vector& data) override; private: + std::string m_libraryPath; kodi::platform::CInterfaceAndroidSystem m_androidSystem; std::unique_ptr m_mediaDrmEventListener; WV_KEYSYSTEM m_keySystem; From 5cb29aeb1dcf0ac6de613f53792096f54620a4c5 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 19 Aug 2024 09:51:53 +0200 Subject: [PATCH 40/91] [Widevine] Save init data after possible changes --- .../widevine/WVCencSingleSampleDecrypter.cpp | 18 +++++++++--------- .../WVCencSingleSampleDecrypter.cpp | 17 +++++++++-------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp index 51923e047..0a2432261 100644 --- a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp +++ b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp @@ -71,15 +71,6 @@ CWVCencSingleSampleDecrypter::CWVCencSingleSampleDecrypter(CWVCdmAdapter& drm, m_wvCdmAdapter.insertssd(this); - if (CSrvBroker::GetSettings().IsDebugLicense()) - { - std::string debugFilePath = FILESYS::PathCombine(m_host->GetLibraryPath(), - "EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED.init"); - - std::string data{reinterpret_cast(pssh.data()), pssh.size()}; - UTILS::FILESYS::SaveFile(debugFilePath, data, true); - } - // No cenc init data with PSSH box format, create one if (memcmp(pssh.data() + 4, "pssh", 4) != 0) { @@ -109,6 +100,15 @@ CWVCencSingleSampleDecrypter::CWVCencSingleSampleDecrypter(CWVCdmAdapter& drm, m_pssh = psshAtom; } + if (CSrvBroker::GetSettings().IsDebugLicense()) + { + std::string debugFilePath = + FILESYS::PathCombine(m_host->GetLibraryPath(), "EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED.init"); + + std::string data{reinterpret_cast(m_pssh.data()), m_pssh.size()}; + UTILS::FILESYS::SaveFile(debugFilePath, data, true); + } + drm.GetCdmAdapter()->CreateSessionAndGenerateRequest(m_promiseId++, cdm::SessionType::kTemporary, cdm::InitDataType::kCenc, m_pssh.data(), static_cast(m_pssh.size())); diff --git a/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp b/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp index caf0a9f0c..96945725b 100644 --- a/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp +++ b/src/decrypters/widevineandroid/WVCencSingleSampleDecrypter.cpp @@ -49,14 +49,6 @@ CWVCencSingleSampleDecrypterA::CWVCencSingleSampleDecrypterA(CWVCdmAdapterA& drm return; } - if (CSrvBroker::GetSettings().IsDebugLicense()) - { - std::string debugFilePath = - FILESYS::PathCombine(m_host->GetLibraryPath(), "EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED.init"); - std::string data{reinterpret_cast(pssh.data()), pssh.size()}; - FILESYS::SaveFile(debugFilePath, data, true); - } - m_pssh = pssh; // No cenc init data with PSSH box format, create one if (memcmp(pssh.data() + 4, "pssh", 4) != 0) @@ -79,6 +71,15 @@ CWVCencSingleSampleDecrypterA::CWVCencSingleSampleDecrypterA(CWVCdmAdapterA& drm psshAtom[3] = static_cast(psshAtom.size()); m_pssh = psshAtom; } + + if (CSrvBroker::GetSettings().IsDebugLicense()) + { + std::string debugFilePath = + FILESYS::PathCombine(m_host->GetLibraryPath(), "EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED.init"); + std::string data{reinterpret_cast(m_pssh.data()), m_pssh.size()}; + FILESYS::SaveFile(debugFilePath, data, true); + } + m_initialPssh = m_pssh; if (!optionalKeyParameter.empty()) From 41661c7c0972576ea261c4ffc2f62b09ae2e2740 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 23 Aug 2024 15:22:47 +0200 Subject: [PATCH 41/91] [Session][CDM] Dont initialize already initialized sessions --- src/Session.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Session.cpp b/src/Session.cpp index 3974e3710..0abe477da 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -399,6 +399,17 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) // cdmSession 0 is reserved for unencrypted streams for (size_t ses{1}; ses < m_cdmSessions.size(); ++ses) { + CCdmSession& session{m_cdmSessions[ses]}; + + // Check if the decrypter has been previously initialized, if so skip it, + // sessions are collected and never removed and InitializeDRM can be called more times + // depending on how it is used: + // 1) CSession::Initialize->InitializePeriod->InitializeDRM - Used by DASH/SS (single call) + // 2) CInputStreamAdaptive::DemuxRead->m_session->InitializePeriod()->InitializeDRM - On chapter change (single call) + // 3) CInputStreamAdaptive::OpenStream->m_session->PrepareStream->InitializeDRM - Used by HLS (a call for each stream) + if (session.m_cencSingleSampleDecrypter) + continue; + std::vector initData; std::string drmOptionalKeyParam; @@ -474,8 +485,6 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) } } - CCdmSession& session{m_cdmSessions[ses]}; - if (addDefaultKID && ses == 1 && session.m_cencSingleSampleDecrypter) { // If the CDM has been pre-initialized, on non-android systems From 96e7ac1fbe1ea05e06e84b74d36b5c5e00002cf5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:39:11 +0000 Subject: [PATCH 42/91] changelog and version v21.5.4 (2024-08-28) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 6506198a6..103c00352 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 5117126d4..f4c8a0510 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,10 @@ +v21.5.4 (2024-08-28) +- [Widevine] Improved synthesized PSSH for smooth streaming with Playready +- [ClearKey] Fix bad license data encoding/decoding +- Fix to prevent initialize decrypters already initialized +- Fix a possible problem on KID extraction from mp4box +- Fix a problem that can cause delay to perform live streams manifest updates, causing buffering problems + v21.5.3 (2024-08-24) - INFO: Playback problems with PlayReady DRM are known, we are investigating for a solution - [ClearKey] Add support to set license server url from drm_legacy property From d64da2c02243689f586edd5c7ca863a1dcaec8fd Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 3 Oct 2024 11:08:59 +0200 Subject: [PATCH 43/91] [Base64Utils] Removed regex to validate base64 with very large strings regex can cause this error: regex_error(error_stack): There was insufficient memory to determine whether the regular expression could match the specified character sequence seem to be a common c++ library problem that happen when regex pattern is complex, so has been replaced with similar code implementation --- src/utils/Base64Utils.cpp | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/utils/Base64Utils.cpp b/src/utils/Base64Utils.cpp index 6a07d5b40..6e831edc9 100644 --- a/src/utils/Base64Utils.cpp +++ b/src/utils/Base64Utils.cpp @@ -20,7 +20,6 @@ constexpr char PADDING{'='}; constexpr std::string_view CHARACTERS{"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"}; -constexpr std::string_view REGEX("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$"); // clang-format off constexpr unsigned char BASE64_TABLE[] = { 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, @@ -214,8 +213,36 @@ std::string UTILS::BASE64::DecodeToStr(std::string_view input) bool UTILS::BASE64::IsValidBase64(const std::string& input) { - std::regex base64Regex(REGEX.data()); - return std::regex_match(input, base64Regex); + // Check for empty input or incorrect length + if (input.empty() || input.size() % 4 != 0) + return false; + + // Use a lookup table for faster character checking + bool lookup[256]{}; + for (char c : CHARACTERS) + { + lookup[static_cast(c)] = true; + } + + // Iterate over the input string and check each character + size_t paddingSize = 0; + for (size_t i = 0; i < input.size(); ++i) + { + if (input[i] == '=') + { + paddingSize++; + } // Check of characters after padding, and validity of characters + else if (paddingSize > 0 || !lookup[static_cast(input[i])]) + { + return false; // Invalid character + } + } + + // Max allowed padding chars + if (paddingSize > 2) + return false; + + return true; } bool UTILS::BASE64::AddPadding(std::string& base64str) From a761c981b08eef1b271b45d924d8b1371e121707 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 7 Oct 2024 18:13:52 +0200 Subject: [PATCH 44/91] [FragmentedSampleReader] Create senc when saio/saiz/senc are missing --- src/samplereader/FragmentedSampleReader.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index 3adc07b1c..1cfdeba85 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -22,6 +22,8 @@ #include "utils/Utils.h" #include "utils/log.h" +#include + using namespace UTILS; namespace @@ -386,6 +388,14 @@ AP4_Result CFragmentedSampleReader::ProcessMoof(AP4_ContainerAtom* moof, if (!m_protectedDesc || !traf) return AP4_ERROR_INVALID_FORMAT; + // If the boxes saiz, saio, senc are missing, the stream does not conform to the specs and + // may not be decrypted, so try create an empty senc where all samples will use the same default IV + if (!traf->GetChild(AP4_ATOM_TYPE_SAIO) && !traf->GetChild(AP4_ATOM_TYPE_SAIZ) && + !traf->GetChild(AP4_ATOM_TYPE_SENC)) + { + traf->AddChild(new AP4_SencAtom()); + } + bool reset_iv(false); if (AP4_FAILED(result = AP4_CencSampleInfoTable::Create(m_protectedDesc, traf, algorithm_id, reset_iv, *m_FragmentStream, From ce42852b84fd9f44c2fe128a90f58021ed7c6ba2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 07:03:33 +0000 Subject: [PATCH 45/91] changelog and version v21.5.5 (2024-10-12) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 103c00352..d91058bde 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index f4c8a0510..2d6b921fb 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,7 @@ +v21.5.5 (2024-10-12) +- Fix decoding with some out-of-spec mp4 DRM encrypted streams +- Fix crash due to regex uses + v21.5.4 (2024-08-28) - [Widevine] Improved synthesized PSSH for smooth streaming with Playready - [ClearKey] Fix bad license data encoding/decoding From e9e92feb29ad30daad4e264c8e00638d3d761479 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 1 Nov 2024 08:32:06 +0100 Subject: [PATCH 46/91] [Session] Fix m_cdmSessions out-of-range exception --- src/Session.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/Session.h | 13 +++++++++---- src/main.cpp | 35 +++++------------------------------ 3 files changed, 63 insertions(+), 34 deletions(-) diff --git a/src/Session.cpp b/src/Session.cpp index 0abe477da..71085699e 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -1004,6 +1004,18 @@ const char* SESSION::CSession::GetCDMSession(unsigned int index) return m_cdmSessions[index].m_cdmSessionStr; } +Adaptive_CencSingleSampleDecrypter* SESSION::CSession::GetSingleSampleDecryptor( + unsigned int index) const +{ + if (index >= m_cdmSessions.size()) + { + LOG::LogF(LOGERROR, "Index %u out of range, cannot get single sample decrypter", index); + return nullptr; + } + + return m_cdmSessions[index].m_cencSingleSampleDecrypter; +} + uint64_t CSession::PTSToElapsed(uint64_t pts) { if (m_timingStream) @@ -1325,6 +1337,43 @@ void CSession::OnStreamChange(adaptive::AdaptiveStream* adStream) } } +bool SESSION::CSession::OnGetStream(int streamid, kodi::addon::InputstreamInfo& info) +{ + CStream* stream(GetStream(streamid - GetPeriodId() * 1000)); + + if (stream) + { + const uint16_t psshSetPos = stream->m_adStream.getRepresentation()->m_psshSetPos; + if (psshSetPos != PSSHSET_POS_DEFAULT || + stream->m_adStream.getPeriod()->GetEncryptionState() == EncryptionState::NOT_SUPPORTED) + { + // NOTE "psshSetPos < m_cdmSessions.size()" CONDITION: + // is required because the GetNextRepresentation method called by AdaptiveStream "ensure segment" method + // can change stream quality that download new manifests, parsing new manifests may add new PSSH's, + // so there will be a higher psshSetPos value than m_cdmSessions + // this happens for HLS case because the m_cdmSessions is updated with OpenStream. + // On DEMUX_SPECIALID_STREAMCHANGE event Kodi query all streams by calling GetStream in advance + // than OpenStream so there is a higher psshSetPos value and GetSingleSampleDecryptor cannot get a ptr + if (psshSetPos < m_cdmSessions.size() && !GetSingleSampleDecryptor(psshSetPos)) + { + // If the stream is protected with a unsupported DRM, we have to stop the playback, + // since there are no ways to stop playback when Kodi request streams + // we are forced to delete all CStream's here, so that when demux reader will starts + // will have no data to process, and so stop the playback + // (other streams may have been requested/opened before this one) + LOG::Log(LOGERROR, "GetStream(%d): Decrypter for the stream not found", streamid); + DeleteStreams(); + return false; + } + } + + info = stream->m_info; + return true; + } + + return false; +} + Adaptive_CencSingleSampleDecrypter* CSession::GetSingleSampleDecrypter(std::string sessionId) { for (std::vector::iterator b(m_cdmSessions.begin() + 1), e(m_cdmSessions.end()); diff --git a/src/Session.h b/src/Session.h index 3d06779d3..c4bd77a6f 100644 --- a/src/Session.h +++ b/src/Session.h @@ -136,10 +136,7 @@ class ATTR_DLL_LOCAL CSession : public adaptive::AdaptiveStreamObserver * \param index The index (psshSet number) of the cdm session * \return The single sample decrypter */ - Adaptive_CencSingleSampleDecrypter* GetSingleSampleDecryptor(unsigned int index) const - { - return m_cdmSessions[index].m_cencSingleSampleDecrypter; - } + Adaptive_CencSingleSampleDecrypter* GetSingleSampleDecryptor(unsigned int index) const; /*! \brief Get the decrypter (DRM lib) * \return The decrypter @@ -319,6 +316,14 @@ class ATTR_DLL_LOCAL CSession : public adaptive::AdaptiveStreamObserver */ void OnStreamChange(adaptive::AdaptiveStream* adStream) override; + /*! + * \brief Callback from CInputStreamAdaptive::GetStream. + * \param streamid The requested stream id + * \param info The stream info object (can be updated) + * \return True to allow Kodi core to load the stream, otherwise false + */ + bool OnGetStream(int streamid, kodi::addon::InputstreamInfo& info); + protected: /*! \brief Check for and load decrypter module matching the supplied key system * \param key_system [OUT] Will be assigned to if a decrypter is found matching diff --git a/src/main.cpp b/src/main.cpp index 4d8217d83..0469ae0d9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -130,38 +130,13 @@ void CInputStreamAdaptive::GetCapabilities(kodi::addon::InputstreamCapabilities& bool CInputStreamAdaptive::GetStream(int streamid, kodi::addon::InputstreamInfo& info) { + // GetStream is called by Kodi twice times, before and after OpenStream. LOG::Log(LOGDEBUG, "GetStream(%d)", streamid); - CStream* stream(m_session->GetStream(streamid - m_session->GetPeriodId() * 1000)); - - if (stream) - { - // If the stream is encrypted, verify if the decrypter has been initialized - // this is important for HLS because the DRM it is initialized at later time - // so on the OpenStream, instead of CSession::Initialize->InitializePeriod->InitializeDRM - // Since kodi initialize one single stream at time, can happens that or another stream - // has been opened before this one, or another stream will be opened after this one (e.g. unencrypted) - // so if you dont delete all streams, the kodi demux reader still starts - // and a corrupted playback will starts. - // NOTE: GetStream is called by Kodi twice times, before and after OpenStream, on HLS - // the first time all streams are unencrypted because child manifest has not been downloaded - const uint16_t psshSetPos = stream->m_adStream.getRepresentation()->m_psshSetPos; - if (psshSetPos != PSSHSET_POS_DEFAULT || - stream->m_adStream.getPeriod()->GetEncryptionState() == EncryptionState::NOT_SUPPORTED) - { - if (!m_session->GetSingleSampleDecryptor(psshSetPos)) - { - LOG::Log(LOGERROR, "GetStream(%d): Decrypter for the stream not found"); - m_session->DeleteStreams(); - return false; - } - } - - info = stream->m_info; - return true; - } - - return false; + // Return false prevents this stream from loading, but does not stop playback, + // Kodi core will continue to request another stream of same type (a/v) + // as long as one is successful + return m_session->OnGetStream(streamid, info); } void CInputStreamAdaptive::UnlinkIncludedStreams(CStream* stream) From 0fd038df431044fb4dcf50ecdf62ef29f16307f6 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 1 Nov 2024 08:25:56 +0100 Subject: [PATCH 47/91] [HLSTree] Fix misaligned periods update for VOD --- src/parser/HLSTree.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/parser/HLSTree.cpp b/src/parser/HLSTree.cpp index dee9a9c6a..99a70e47f 100644 --- a/src/parser/HLSTree.cpp +++ b/src/parser/HLSTree.cpp @@ -447,6 +447,14 @@ bool adaptive::CHLSTree::ProcessChildManifest(PLAYLIST::CPeriod* period, size_t adpSetPos = GetPtrPosition(period->GetAdaptationSets(), adp); size_t reprPos = GetPtrPosition(adp->GetRepresentations(), rep); + if (!m_isLive) + { + // VOD streaming must be updated always from the first period + period = m_periods[0].get(); + adp = period->GetAdaptationSets()[adpSetPos].get(); + rep = adp->GetRepresentations()[reprPos].get(); + } + rep->SetBaseUrl(sourceUrl); EncryptionType currentEncryptionType = EncryptionType::NONE; From 4257d896746cdff6aa331020fc2903f8d0a269a8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 08:32:40 +0000 Subject: [PATCH 48/91] changelog and version v21.5.6 (2024-11-05) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index d91058bde..8f492eb2d 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 2d6b921fb..db714dbce 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,7 @@ +v21.5.6 (2024-11-05) +- [HLS] Fix VOD playback problems with periods +- [HLS] Fix possible crash on stream quality change + v21.5.5 (2024-10-12) - Fix decoding with some out-of-spec mp4 DRM encrypted streams - Fix crash due to regex uses From 6387a1a7a54f8ac583da86b1b8d2e3ccce2d461f Mon Sep 17 00:00:00 2001 From: matthuisman Date: Sun, 10 Nov 2024 21:14:07 +1300 Subject: [PATCH 49/91] [Session] extract default kid from init data if required --- src/Session.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Session.cpp b/src/Session.cpp index 0abe477da..179893822 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -17,6 +17,7 @@ #include "common/Chooser.h" #include "decrypters/DrmFactory.h" #include "decrypters/Helpers.h" +#include "parser/PRProtectionParser.h" #include "utils/Base64Utils.h" #include "utils/CurlUtils.h" #include "utils/StringUtils.h" @@ -418,7 +419,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) if (sessionPsshset.adaptation_set_->GetStreamType() == StreamType::NOTYPE) continue; - const std::vector defaultKid = DRM::ConvertKidStrToBytes(sessionPsshset.defaultKID_); + std::string defaultKidStr = sessionPsshset.defaultKID_; std::string_view licenseDataStr = CSrvBroker::GetKodiProps().GetLicenseData(); if (m_adaptiveTree->GetTreeType() == adaptive::TreeType::SMOOTH_STREAMING) @@ -441,7 +442,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) licenseData.empty() ? "" : "(with custom data)"); std::vector wvPsshData; - if (DRM::MakeWidevinePsshData(defaultKid, licenseData, wvPsshData)) + if (DRM::MakeWidevinePsshData(DRM::ConvertKidStrToBytes(defaultKidStr), licenseData, wvPsshData)) DRM::MakePssh(DRM::ID_WIDEVINE, wvPsshData, initData); } } @@ -469,6 +470,17 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) initData = BASE64::Decode(licenseDataStr); } + // If no KID, but init data, extract the KID from init data + if (!initData.empty() && defaultKidStr.empty()) + { + CPsshParser parser; + if (parser.Parse(initData) && !parser.GetKeyIds().empty()) + { + LOG::Log(LOGDEBUG, "Default KID parsed from init data"); + defaultKidStr = STRING::ToHexadecimal(parser.GetKeyIds()[0]); + } + } + if (initData.empty() && sessionPsshset.m_licenseUrl.empty()) { if (!sessionPsshset.pssh_.empty()) @@ -485,6 +497,8 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) } } + const std::vector defaultKid = DRM::ConvertKidStrToBytes(defaultKidStr); + if (addDefaultKID && ses == 1 && session.m_cencSingleSampleDecrypter) { // If the CDM has been pre-initialized, on non-android systems @@ -496,7 +510,7 @@ bool CSession::InitializeDRM(bool addDefaultKID /* = false */) if (m_decrypter && !defaultKid.empty()) { - LOG::Log(LOGDEBUG, "Initializing stream with KID: %s", sessionPsshset.defaultKID_.c_str()); + LOG::Log(LOGDEBUG, "Initializing stream with KID: %s", defaultKidStr.c_str()); for (size_t i{1}; i < ses; ++i) { From b585676accf876f29c496062a57ce55d1cd77e42 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 16 Nov 2024 08:41:09 +0000 Subject: [PATCH 50/91] changelog and version v21.5.7 (2024-11-16) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 8f492eb2d..93b9174cf 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index db714dbce..0a6013544 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.7 (2024-11-16) +- Partial backport fix to extract kid from init data + v21.5.6 (2024-11-05) - [HLS] Fix VOD playback problems with periods - [HLS] Fix possible crash on stream quality change From 51a4861f341c3f757b86f996c01cff1066383315 Mon Sep 17 00:00:00 2001 From: Christian Gade Date: Thu, 16 Feb 2023 23:30:25 +0100 Subject: [PATCH 51/91] Update translations from weblate --- inputstream.adaptive/addon.xml.in | 40 +- .../resource.language.af_za/strings.po | 294 ++++++++++-- .../resource.language.am_et/strings.po | 294 ++++++++++-- .../resource.language.ar_sa/strings.po | 294 ++++++++++-- .../resource.language.ast_es/strings.po | 294 ++++++++++-- .../resource.language.az_az/strings.po | 294 ++++++++++-- .../resource.language.be_by/strings.po | 296 ++++++++++-- .../resource.language.bg_bg/strings.po | 294 ++++++++++-- .../resource.language.bs_ba/strings.po | 294 ++++++++++-- .../resource.language.ca_es/strings.po | 418 ++++++++++++++--- .../resource.language.cs_cz/strings.po | 388 +++++++++++++-- .../resource.language.cy_gb/strings.po | 294 ++++++++++-- .../resource.language.da_dk/strings.po | 418 ++++++++++++++--- .../resource.language.de_de/strings.po | 414 +++++++++++++--- .../resource.language.el_gr/strings.po | 397 +++++++++++++--- .../resource.language.en_au/strings.po | 294 ++++++++++-- .../resource.language.en_nz/strings.po | 294 ++++++++++-- .../resource.language.en_us/strings.po | 294 ++++++++++-- .../language/resource.language.eo/strings.po | 294 ++++++++++-- .../resource.language.es_ar/strings.po | 294 ++++++++++-- .../resource.language.es_es/strings.po | 421 ++++++++++++++--- .../resource.language.es_mx/strings.po | 388 +++++++++++++-- .../resource.language.et_ee/strings.po | 344 +++++++++++--- .../resource.language.eu_es/strings.po | 294 ++++++++++-- .../resource.language.fa_af/strings.po | 294 ++++++++++-- .../resource.language.fa_ir/strings.po | 294 ++++++++++-- .../resource.language.fi_fi/strings.po | 430 ++++++++++++++--- .../resource.language.fo_fo/strings.po | 294 ++++++++++-- .../resource.language.fr_ca/strings.po | 294 ++++++++++-- .../resource.language.fr_fr/strings.po | 420 ++++++++++++++--- .../resource.language.gl_es/strings.po | 294 ++++++++++-- .../resource.language.he_il/strings.po | 418 ++++++++++++++--- .../resource.language.hi_in/strings.po | 387 ++++++++++++--- .../resource.language.hr_hr/strings.po | 440 ++++++++++++++---- .../resource.language.hu_hu/strings.po | 418 ++++++++++++++--- .../resource.language.hy_am/strings.po | 294 ++++++++++-- .../resource.language.id_id/strings.po | 294 ++++++++++-- .../resource.language.is_is/strings.po | 316 ++++++++++--- .../resource.language.it_it/strings.po | 420 ++++++++++++++--- .../resource.language.ja_jp/strings.po | 420 ++++++++++++++--- .../resource.language.kn_in/strings.po | 294 ++++++++++-- .../resource.language.ko_kr/strings.po | 418 ++++++++++++++--- .../resource.language.lt_lt/strings.po | 296 ++++++++++-- .../resource.language.lv_lv/strings.po | 388 +++++++++++++-- .../resource.language.ml_in/strings.po | 294 ++++++++++-- .../resource.language.mn_mn/strings.po | 294 ++++++++++-- .../resource.language.mt_mt/strings.po | 294 ++++++++++-- .../resource.language.my_mm/strings.po | 294 ++++++++++-- .../resource.language.nb_no/strings.po | 294 ++++++++++-- .../resource.language.nl_nl/strings.po | 416 ++++++++++++++--- .../resource.language.os_os/strings.po | 294 ++++++++++-- .../resource.language.pl_pl/strings.po | 416 ++++++++++++++--- .../resource.language.pt_br/strings.po | 340 +++++++++++--- .../resource.language.pt_pt/strings.po | 294 ++++++++++-- .../resource.language.ro_md/strings.po | 128 ----- .../resource.language.ro_ro/strings.po | 396 +++++++++++++--- .../resource.language.ru_ru/strings.po | 416 ++++++++++++++--- .../language/resource.language.scn/strings.po | 128 ----- .../resource.language.si_lk/strings.po | 294 ++++++++++-- .../resource.language.sk_sk/strings.po | 400 +++++++++++++--- .../resource.language.sq_al/strings.po | 294 ++++++++++-- .../resource.language.sr_rs/strings.po | 294 ++++++++++-- .../resource.language.sr_rs@latin/strings.po | 296 ++++++++++-- .../resource.language.sv_se/strings.po | 397 +++++++++++++--- .../language/resource.language.szl/strings.po | 294 ++++++++++-- .../resource.language.ta_in/strings.po | 294 ++++++++++-- .../resource.language.tg_tj/strings.po | 294 ++++++++++-- .../resource.language.th_th/strings.po | 294 ++++++++++-- .../resource.language.tr_tr/strings.po | 294 ++++++++++-- .../resource.language.uk_ua/strings.po | 294 ++++++++++-- .../resource.language.uz_uz/strings.po | 294 ++++++++++-- .../resource.language.vi_vn/strings.po | 331 ++++++++++--- .../resource.language.zh_cn/strings.po | 388 +++++++++++++-- .../resource.language.zh_tw/strings.po | 294 ++++++++++-- 74 files changed, 20028 insertions(+), 4079 deletions(-) delete mode 100644 inputstream.adaptive/resources/language/resource.language.ro_md/strings.po delete mode 100644 inputstream.adaptive/resources/language/resource.language.scn/strings.po diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 93b9174cf..879d3345e 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -21,26 +21,46 @@ fanart.jpg Client InputStream per a transmissions adaptatives + Klient adaptivnГ­ch tokЕЇ protokolu InputStream InputStream-klient til adaptive streams InputStream-Client fГјr adaptive Streams InputStream client for adaptive streams - Cliente InputStream para flujo de datos adaptativos + Cliente InputStream para transmisiones adaptativas + Cliente InputStream para transmisiones adaptativas + InputStream klient kohanduvate voogude jaoks + InputStream-asiakas mukautuville mediavirroille + Client InputStream pour les flux adaptatifs ЧњЧ§Ч•Ч— InputStream ЧњЧЄЧ–ЧЁЧ™ЧћЧ™Чќ ЧћЧЎЧЄЧ’ЧњЧ™Чќ - InputStream klijent za adaptivne tokove + InputStream klijent za prilagodljiva strujanja InputStream kliens az adaptГ­v streamekhez - к°ЂліЂ мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream нЃґлќјмќґм–ёнЉё + InputStream-biГ°lari fyrir aГ°laganleg streymi + Client InputStream per flussi adattivi + м Ѓмќ‘н• мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream нЃґлќјмќґм–ёнЉё + InputStream klients adaptД«vДЃm straumД“m + InputStream client voor adaptive streams Klient InputStream dla strumieni adaptacyjnych - InputStream клиент для адаптивных трансляций + Cliente InputStream para transmissГµes adaptГЎveis + Клиент InputStream для адаптивных потоков + з”ЁдєЋи‡ЄйЂ‚еє”жµЃзљ„ InputStream е®ўж€·з«Ї Client InputStream per a transmissions adaptatives + Klient adaptivnГ­ch tokЕЇ protokolu InputStream InputStream-klient til adaptive streams - InputStream-Client fГјr adaptive Streams + InputStream-Client fГјr adaptive Streams. UnterstГјtzt werden Streamingprotokolle wie MPEG-DASH, HLS und Microsoft Smooth Streaming.[CR][CR] Das Addon unterstГјtzt ebenfalls DRM-geschГјtzte Streams, wie Google Widevine, Microsoft Playready und andere.[CR][CR]FГјr Dokumentation https://github.com/xbmc/inputstream.adaptive besuchen InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive - Cliente InputStream para flujo de datos adaptativos + Cliente InputStream para transmisiones de datos adaptativos. Se admiten protocolos de transmisiГіn comunes como MPEG-DASH, HLS y Microsoft Smooth Streaming.[CR][CR]El complemento tambiГ©n es compatible con transmisiones protegidas por DRM, como Google Widevine, Microsoft PlayReady y otros.[CR][CR]Para consultar la documentaciГіn, visite: https://github.com/xbmc/inputstream.adaptive + Cliente InputStream para transmisiones adaptativas + InputStream klient adaptiivsete voogude jaoks. Toetatakse levinud voogedastusprotokolle, nagu MPEG-DASH, HLS ja Microsoft Smooth Streaming.[CR][CR]Lisamoodul toetab ka DRM-iga kaitstud vooge, nagu Google Widevine, Microsoft PlayReady ja teised.[CR][CR][CR] ]Dokumentatsiooni saamiseks kГјlasta aadressi https://github.com/xbmc/inputstream.adaptive + InputStream-asiakas mukautuville mediavirroille, joka tukee yleisiГ¤ suoratoistoprotokollia, kuten MPEG-DASH, HLS ja Microsoft Smooth Streaming.[CR][CR]Tukee myГ¶s mm. Google Widevine ja Microsoft PlayReady -tekniikoilla DRM-suojattua suoratoistoa.[CR][CR]Ohjeita lГ¶ydГ¤t osoitteesta https://github.com/xbmc/inputstream.adaptive. + Client InputStream pour les flux adaptatifs. Les protocoles de streaming courants tels que MPEG-DASH, HLS et Microsoft Smooth Streaming sont pris en charge.[CR][CR]Le module complГ©mentaire prend Г©galement en charge les flux protГ©gГ©s par DRM, tels que Google Widevine, Microsoft PlayReady et autres.[CR][CR] Pour la documentation, visitez : https://github.com/xbmc/inputstream.adaptive ЧњЧ§Ч•Ч— InputStream ЧњЧЄЧ–ЧЁЧ™ЧћЧ™Чќ ЧћЧЎЧЄЧ’ЧњЧ™Чќ - InputStream klijent za adaptivne tokove + InputStream klijent za prilagodljiva strujanja InputStream kliens az adaptГ­v streamekhez - к°ЂліЂ мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream нЃґлќјмќґм–ёнЉё - Klient InputStream dla strumieni adaptacyjnych - InputStream клиент для адаптивных трансляций + Client InputStream per flussi adattivi. Sono supportati protocolli di streaming comuni come MPEG-DASH, HLS e Microsoft Smooth Streaming.[CR][CR]L'add-on supporta anche flussi protetti da DRM, come Google Widevine, Microsoft PlayReady e altri.[CR][CR] ]Per la documentazione visita: https://github.com/xbmc/inputstream.adaptive + м Ѓмќ‘н• мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream 클라이언트입니다. MPEG-DASH, HLS л°Џ Microsoft Smooth Streamingкіј к°™мќЂ мќјл°м Ѓмќё 스트리밍 н”„лЎњн† мЅњмќґ 지원됩니다.[CR][CR]м¶”к°Ђ кё°лЉҐмќЂ Google Widevine, Microsoft PlayReady л“±кіј к°™мќЂ DRM ліґнё мЉ¤нЉёл¦јлЏ„ 지원합니다.[CR][CR ]문서를 ліґл ¤л©ґ https://github.com/xbmc/inputstream.adaptive를 л°©л¬ён•м„ёмљ” + InputStream klients adaptД«vДЃm straumД“m + Klient InputStream dla strumieni adaptacyjnych. ObsЕ‚ugiwane sД… popularne protokoЕ‚y przesyЕ‚ania strumieniowego, takie jak MPEG-DASH, HLS i Microsoft Smooth Streaming.[CR][CR]Dodatek obsЕ‚uguje rГіwnieЕј strumienie chronione DRM, takie jak Google Widevine, Microsoft PlayReady i inne.[CR][CR] ]Dokumentacja znajduje siД™ na stronie: https://github.com/xbmc/inputstream.adaptive + Cliente InputStream para transmissГµes adaptГЎveis. HГЎ suporte para protocolos de streaming comuns, como MPEG-DASH, HLS e Microsoft Smooth Streaming.[CR][CR]O addon tambГ©m oferece suporte a transmissГµes protegidas por DRM, como Google Widevine, Microsoft PlayReady e outros.[CR][CR]Para obter a documentaГ§ГЈo, visite: https://github.com/xbmc/inputstream.adaptive + Клиент InputStream для адаптивных потоков. Поддерживаются такие распространенные потоковые протоколы, как MPEG-DASH, HLS Рё Microsoft Smooth Streaming.[CR][CR]Дополнение также поддерживает потоки, защищенные DRM, такие как Google Widevine, Microsoft PlayReady Рё РґСЂСѓРіРёРµ.[CR][CR]Для получения документации посетите: https://github.com/xbmc/inputstream.adaptive + з”ЁдєЋи‡ЄйЂ‚еє”жµЃзљ„ InputStream е®ўж€·з«Ї diff --git a/inputstream.adaptive/resources/language/resource.language.af_za/strings.po b/inputstream.adaptive/resources/language/resource.language.af_za/strings.po index 36139cb99..63c620ec0 100644 --- a/inputstream.adaptive/resources/language/resource.language.af_za/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.af_za/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Afrikaans (South Africa) \n" "Language: af_za\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.am_et/strings.po b/inputstream.adaptive/resources/language/resource.language.am_et/strings.po index 9e5c9b1fc..3a6df0639 100644 --- a/inputstream.adaptive/resources/language/resource.language.am_et/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.am_et/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Amharic (Ethiopia) \n" "Language: am_et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po b/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po index e7cb1b0d4..3fef295a5 100644 --- a/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Arabic (Saudi Arabia) \n" "Language: ar_sa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po b/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po index d62622745..c01938518 100644 --- a/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Asturian (Spain) \n" "Language: ast_es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.az_az/strings.po b/inputstream.adaptive/resources/language/resource.language.az_az/strings.po index 0389593e4..c030c1115 100644 --- a/inputstream.adaptive/resources/language/resource.language.az_az/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.az_az/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Azerbaijani \n" "Language: az_az\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.be_by/strings.po b/inputstream.adaptive/resources/language/resource.language.be_by/strings.po index f88c1ec36..c6ac74f5b 100644 --- a/inputstream.adaptive/resources/language/resource.language.be_by/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.be_by/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Christian Gade \n" +"Language-Team: Belarusian \n" "Language: be_by\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Асноўныя" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" msgstr "" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" +msgstr "" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po b/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po index a79392d82..d3c1eeee8 100644 --- a/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Bulgarian \n" "Language: bg_bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po b/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po index 0491cb5b9..8106aac33 100644 --- a/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Bosnian (Bosnia and Herzegovina) \n" "Language: bs_ba\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po b/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po index fe9af89c1..29811eaf2 100644 --- a/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-19 23:19+0000\n" -"Last-Translator: Xean \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Catalan (Spain) \n" "Language: ca_es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -23,110 +23,394 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "Client InputStream per a transmissions adaptatives" +#. Category title msgctxt "#30100" msgid "General" msgstr "General" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "Ample de banda min. (Bits/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Ample de banda mГ x. (Bits/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Ruta de desxifrat" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "MГ x. resoluciГі descodificador general" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "SelecciГі de transmissiГі" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Media" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "MГ x. ResoluciГі descodificador segur" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Substitueix l'estat HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Ignora la resoluciГі de la pantalla" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Expert" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Activeu les funcions de pre-release" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "No utilitzeu el descodificador segur si Г©s possible" - -msgctxt "#30150" -msgid "Max" -msgstr "MГ x" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" +msgid "Try avoiding the use of secure decoder" +msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Seleccionar transmissions automГ ticament" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" -msgstr "Seleccionar manualment totes les transmissions" +msgid "Audio / Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Tot" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "ГЂudio" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "VГ­deo" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" -msgstr "Seleccionar manualment la transmissiГі de vГ­deo" +msgid "Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "VГ­deo + SubtГ­tols" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Ample de banda min. (Bits/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Ample de banda mГ x. (Bits/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Ruta de desxifrat" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "MГ x. resoluciГі descodificador general" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "SelecciГі de transmissiГі" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Media" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "MГ x. ResoluciГі descodificador segur" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Substitueix l'estat HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignora la resoluciГі de la pantalla" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Activeu les funcions de pre-release" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "No utilitzeu el descodificador segur si Г©s possible" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "MГ x" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Seleccionar transmissions automГ ticament" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Seleccionar manualment totes les transmissions" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Seleccionar manualment la transmissiГі de vГ­deo" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "VГ­deo + SubtГ­tols" diff --git a/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po b/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po index 6e6f4125e..ba6287f21 100644 --- a/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Czech \n" "Language: cs_cz\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Klient adaptivnГ­ch tokЕЇ protokolu InputStream" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "Klient adaptivnГ­ch tokЕЇ protokolu InputStream" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "ObecnГ©" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" +msgstr "Expert" + +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "VЕЎechno" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Zvuk" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Obraz" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" msgstr "" -msgctxt "#30151" +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Min. ЕЎГ­Е™ka pГЎsma (b/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Max. ЕЎГ­Е™ka pГЎsma (b/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Cesta k deЕЎifrovaДЌi" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Max. rozliЕЎenГ­ obecnГ©ho dekodГ©ru" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "VГЅbД›r proudu" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "MГ©dia" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Max. rozliЕЎenГ­ zabezpeДЌenГ©ho dekodЕ•u" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "PЕ™epsat stav DHCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignorovat rozliЕЎenГ­ displeje" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Povolit nestabilnГ­ funkce" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Pokud moЕѕno nepouЕѕГ­vat zabezpeДЌenГЅ dekodГ©r" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Max" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Automaticky vybrat proudy" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "RuДЌnД› vybrat proudy" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "RuДЌnД› vybrat proud obrazu" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Obraz + titulky" diff --git a/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po b/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po index a0e035aa4..12aef7f3a 100644 --- a/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Welsh (United Kingdom) \n" "Language: cy_gb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n==0) ? 0 : (n==1) ? 1 : (n==2) ? 2 : (n==3) ? 3 :(n==6) ? 4 : 5;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po b/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po index c2d9aba2c..03dfa4ac1 100644 --- a/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-20 08:26+0000\n" -"Last-Translator: Christian Gade \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Danish \n" "Language: da_dk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -23,110 +23,394 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "InputStream-klient til adaptive streams" +#. Category title msgctxt "#30100" msgid "General" msgstr "Generel" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "Minimum bГҐndbredde (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "Mindste bГҐndbredde (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Maksimal bГҐndbredde (Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "Maksimal bГҐndbredde (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Dekrypter-sti" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Maksimal oplГёsning for generel dekoder" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Valg af stream" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Medie" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Maksimal oplГёsning for sikker dekoder" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Overskriv HDCP-status" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Ignorer skГ¦rmens oplГёsning" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Ekspert" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Aktiver funktioner fra pre-release" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "Brug ikke sikker dekoder, hvis det er muligt" - -msgctxt "#30150" -msgid "Max" -msgstr "Maksimal" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" +msgid "Try avoiding the use of secure decoder" +msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "VГ¦lg automatisk streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" -msgstr "VГ¦lg alle streams manuelt" +msgid "Audio / Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Alle" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "Lyd" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" -msgstr "VГ¦lg videostream manuelt" +msgid "Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video og undertekster" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Minimum bГҐndbredde (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Maksimal bГҐndbredde (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Dekrypter-sti" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Maksimal oplГёsning for generel afkoder" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Valg af stream" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Medie" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Maksimal oplГёsning for sikker afkoder" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Overskriv HDCP-status" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignorer skГ¦rmens oplГёsning" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Aktiver funktioner fra pre-release" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Brug ikke sikker afkoder, hvis det er muligt" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Maksimal" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "VГ¦lg automatisk streams" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "VГ¦lg alle streams manuelt" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "VГ¦lg videostream manuelt" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video og undertekster" diff --git a/inputstream.adaptive/resources/language/resource.language.de_de/strings.po b/inputstream.adaptive/resources/language/resource.language.de_de/strings.po index 5609e877a..a2df1882a 100644 --- a/inputstream.adaptive/resources/language/resource.language.de_de/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.de_de/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-07-18 08:48+0000\n" -"Last-Translator: Kai Sommerfeld \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Kai Sommerfeld \n" "Language-Team: German \n" "Language: de_de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7.1\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -21,112 +21,396 @@ msgstr "InputStream-Client fГјr adaptive Streams" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "InputStream-Client fГјr adaptive Streams" +msgstr "InputStream-Client fГјr adaptive Streams. UnterstГјtzt werden Streamingprotokolle wie MPEG-DASH, HLS und Microsoft Smooth Streaming.[CR][CR] Das Addon unterstГјtzt ebenfalls DRM-geschГјtzte Streams, wie Google Widevine, Microsoft Playready und andere.[CR][CR]FГјr Dokumentation https://github.com/xbmc/inputstream.adaptive besuchen" +#. Category title msgctxt "#30100" msgid "General" msgstr "Allgemein" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "Min. Bandbreite (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "Minimale Bandbreite (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Max. Bandbreite (Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "Maximale Bandbreite (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Decrypter-Pfad" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Hiermit wird eingestellt, dass das Bandbreitenlimit fГјr Audio- und Videostreams nicht Гјberschritten wird. Auf 0 setzen, um das Limit zu deaktivieren." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Max. AuflГ¶sung allgemeiner Decoder" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Stream-Auswahl" +msgid "Maximum resolution" +msgstr "Maximale AuflГ¶sung" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Medien" +msgid "Type of media streams played" +msgstr "Medienstreamtyp" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Max. AuflГ¶sung sicherer Decoder" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "HDCP-Status Гјberschreiben" +msgid "Maximum resolution for DRM videos" +msgstr "Maximale AuflГ¶sung fГјr DRM-Videos" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" msgstr "BildschirmauflГ¶sung ignorieren" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Wenn aktiviert, wird die BildschirmauflГ¶sung (oder FenstergrГ¶Гџe, wenn im Fenstermodus) beim AuswГ¤hlen der besten VideostreamauflГ¶sung beim Starten und wГ¤hrend der Wiedergabe nicht berГјcksichtigt." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Manueller Streamauswahlmodus" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "Festlegen, welcher Streamtyp wГ¤hrend der Wiedergabe fГјr die manuelle Auswahl im Kodi Einstellungs-OSD zur VerfГјgung gestellt werden soll." + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Experte" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Experimentelle Features aktivieren" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "Wenn mГ¶glich, sicheren Decoder nicht verwenden" +msgid "Try avoiding the use of secure decoder" +msgstr "Versuchen, Verwendung des sicheren Decoders zu vermeiden" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "Einige Android-L1-GerГ¤te funktionieren nicht korrekt, was in einem schwarzen Bildschirm wГ¤hrend der Wiedergabe resultieren kann. In diesem Fall kann Aktivieren dieser Einstellung helfen." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "Audio-/Videostreams" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Alle" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Audio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Video" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Videostreams" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "Video/Untertitel" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "Adaptiver Stream" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "WARNUNG: Das ist ein TEST-Feature, das eventuell nicht korrekt funktioniert and das sich in zukГјnftigen Versionen Г¤ndern kann." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Initiale Bandbreite automatisch ermitteln" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "Wenn aktiviert, wird die Bandbreite beim ersten Download ermittelt. Das funktiniert aber nicht immer korrekt. Wenn die VideoqualitГ¤t beim Start der Wiedergabe zu niedrig ist, kann Deaktivieren dieser Einstellung helfen." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Initiale Bandbreite (Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "Legt die initiale Bandbreite fest, falls diese nicht automatisch ermittelt werden kann. Dieser Wert kann Гјberschrieben werden mit der Einstellung fГјr die minimale Bandbreite." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "HDCP-Status ignorieren" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "Einige DRM-geschГјtzte HD-/UHD-Videos kГ¶nnen nur wiedergegeben werden, wenn der HDCP-Status ignoriert wird." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Streamauswahltyp" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Festlegen, wie Audio-/VideostreamqualitГ¤t wГ¤hrend der Wiedergabe ausgewГ¤hlt werden. Diese Einstellung kann Гјberschrieben werden vom verwendeten Video-Addon. Im Wiki sind dazu mehr Informationen zu finden." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Adaptiv (Standard)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "Manuell OSD" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "Feste AuflГ¶sung" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "QualitГ¤t erfragen" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Test" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "Zugesicherte PufferlГ¤nge (Sekunden)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "Maximale PufferlГ¤nge (Sekunden)" -msgctxt "#30150" -msgid "Max" -msgstr "Max" +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "BildschirmauflГ¶sungsГ¤nderung ignorieren" -msgctxt "#30151" +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Wenn aktiviert, wird die BildschirmauflГ¶sung (oder FenstergrГ¶Гџe, wenn im Fenstermodus) beim AuswГ¤hlen der besten VideostreamauflГ¶sung wГ¤hrend der Wiedergabe nicht berГјcksichtigt." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "Decrypter-Pfad" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Auto" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Streams automatisch auswГ¤hlen" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "Alle Streams manuell auswГ¤hlen" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "Alle" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "Videostream auswГ¤hlen" -msgctxt "#30159" -msgid "Video" -msgstr "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "Videostream {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "Testmodus" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Umschalten anhand Segmenten" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segmente" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Einstellungen Гјberschreiben" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Debugprotokollierung" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Stream-Manifeste speichern" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Speichert die wГ¤hrend der Wiedergabe heruntergeladenen Stream-Manifeste im Benutzerdatenordner von Inputstream Adaptive." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Lizenzdaten speichern" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Speichert Lizendaten, zum Beispiel initiale Daten, Challenge- und Responsedaten, im „cdm“-Ordner des Kodi-Datenordners." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Min. Bandbreite (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Max. Bandbreite (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Decrypter-Pfad" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Max. AuflГ¶sung allgemeiner Decoder" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Streamauswahl" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Medien" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Max. AuflГ¶sung sicherer Decoder" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "HDCP-Status Гјberschreiben" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "BildschirmauflГ¶sung ignorieren" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Experimentelle Features aktivieren" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Wenn mГ¶glich, sicheren Decoder nicht verwenden" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Max" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Streams automatisch auswГ¤hlen" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Alle Streams manuell auswГ¤hlen" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "Videostream manuell auswГ¤hlen" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Videostream manuell auswГ¤hlen" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video und Untertitel" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video und Untertitel" diff --git a/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po b/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po index d93a013cc..ecdbd3a0f 100644 --- a/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: Greek (Greece)\n" -"Language: en\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Greek \n" +"Language: el_gr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,377 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "О“ОµОЅО№ОєО¬" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "О¤Ої ОµО»О¬П‡О№ПѓП„Ої ОµПЌПЃОїП‚ П„Ої ОїПЂОїОЇОї ОґОµОЅ ПЂПЃО­ПЂОµО№ ОЅО± ОѕОµПЂОµПЃО±ПѓП„ОµОЇ" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "To ОјО­ОіО№ПѓП„Ої ОµПЌПЃОїП‚ П„Ої ОїПЂОїОЇОї ОґОµОЅ ПЂПЃО­ПЂОµО№ ОЅО± ОѕОµПЂОµПЃО±ПѓП„ОµОЇ. 0=О±ПЂОµПЃО№ПЊПЃО№ПѓП„Ої" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "О‘ПЂПЊО»П…П„О· ОґО№О¬ОґПЃОїОјО® П†О±ОєО­О»ОїП… ПЂОїП… ПЂОµПЃО№О­П‡ОµО№ П„ОїП…П‚ О±ПЂОїОєПЃП…ПЂП„ОїОіПЃО±П†О·П„О­П‚" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "ОњО­ОіО№ПѓП„О· О±ОЅО¬О»П…ПѓО·" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "О•ПЂО№О»ОїОіО® ПЃОїО®П‚" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "О ОїО»П…ОјО­ПѓО±" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "ОњО­ОіО№ПѓП„О· ОµПЂО№П„ПЃОµПЂП„О® О±ОЅО¬О»П…ПѓО· ПЊП„О±ОЅ О±ПЂОїОєП‰ОґО№ОєОїПЂОїО№О·ОёОµОЇ ОјО­ПѓП‰ О±ПѓП†О±О»ОїПЌП‚ ОґО№О±ОґПЃОїОјО®П‚" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "О•ПЂО№О»ОїОіО® ПЃОїПЋОЅ П‡П‰ПЃОЇП‚ ПѓОµОІО±ПѓОјПЊ П„О·П‚ ОєО±П„О¬ПѓП„О±ПѓО·П‚ П„ОїП… HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "ОќО± ОјО·ОЅ О»О·П†ОёОµОЇ П…ПЂ'ОїП€О·ОЅ О· О±ОЅО¬О»П…ПѓО· ОїОёПЊОЅО·П‚ ОєО±П„О¬ П„О·ОЅ ОµПЂО№О»ОїОіО® ПЃОїПЋОЅ" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "О•О№ОґО№ОєПЊП‚" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "О•ОЅОµПЃОіОїПЂОїОЇО·ПѓО· П‡О±ПЃО±ОєП„О·ПЃО№ПѓП„О№ОєПЋОЅ ПЂПЃОї-ОµОєОґПЊПѓОµП‰ОЅ" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "ОњО­ОіО№ПѓП„Ої" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" - -msgctxt "#30155" -msgid "Automatically select streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" +msgid "Audio / Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "ОЊО»О±" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "О‰П‡ОїП‚" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "О’ОЇОЅП„ОµОї" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" +msgid "Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "О’ОЇОЅП„ОµОї + ОҐПЂПЊП„О№П„О»ОїО№" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "О¤Ої ОµО»О¬П‡О№ПѓП„Ої ОµПЌПЃОїП‚ П„Ої ОїПЂОїОЇОї ОґОµОЅ ПЂПЃО­ПЂОµО№ ОЅО± ОѕОµПЂОµПЃО±ПѓП„ОµОЇ" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "To ОјО­ОіО№ПѓП„Ої ОµПЌПЃОїП‚ П„Ої ОїПЂОїОЇОї ОґОµОЅ ПЂПЃО­ПЂОµО№ ОЅО± ОѕОµПЂОµПЃО±ПѓП„ОµОЇ. 0=О±ПЂОµПЃО№ПЊПЃО№ПѓП„Ої" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "О‘ПЂПЊО»П…П„О· ОґО№О¬ОґПЃОїОјО® П†О±ОєО­О»ОїП… ПЂОїП… ПЂОµПЃО№О­П‡ОµО№ П„ОїП…П‚ О±ПЂОїОєПЃП…ПЂП„ОїОіПЃО±П†О·П„О­П‚" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "ОњО­ОіО№ПѓП„О· О±ОЅО¬О»П…ПѓО·" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "О•ПЂО№О»ОїОіО® ПЃОїО®П‚" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "О ОїО»П…ОјО­ПѓО±" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "ОњО­ОіО№ПѓП„О· ОµПЂО№П„ПЃОµПЂП„О® О±ОЅО¬О»П…ПѓО· ПЊП„О±ОЅ О±ПЂОїОєП‰ОґО№ОєОїПЂОїО№О·ОёОµОЇ ОјО­ПѓП‰ О±ПѓП†О±О»ОїПЌП‚ ОґО№О±ОґПЃОїОјО®П‚" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "О•ПЂО№О»ОїОіО® ПЃОїПЋОЅ П‡П‰ПЃОЇП‚ ПѓОµОІО±ПѓОјПЊ П„О·П‚ ОєО±П„О¬ПѓП„О±ПѓО·П‚ П„ОїП… HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "ОќО± ОјО·ОЅ О»О·П†ОёОµОЇ П…ПЂ'ОїП€О·ОЅ О· О±ОЅО¬О»П…ПѓО· ОїОёПЊОЅО·П‚ ОєО±П„О¬ П„О·ОЅ ОµПЂО№О»ОїОіО® ПЃОїПЋОЅ" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "О•ОЅОµПЃОіОїПЂОїОЇО·ПѓО· П‡О±ПЃО±ОєП„О·ПЃО№ПѓП„О№ОєПЋОЅ ПЂПЃОї-ОµОєОґПЊПѓОµП‰ОЅ" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "ОњО­ОіО№ПѓП„Ої" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "О’ОЇОЅП„ОµОї + ОҐПЂПЊП„О№П„О»ОїО№" diff --git a/inputstream.adaptive/resources/language/resource.language.en_au/strings.po b/inputstream.adaptive/resources/language/resource.language.en_au/strings.po index 63783a42b..258cd5f91 100644 --- a/inputstream.adaptive/resources/language/resource.language.en_au/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.en_au/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: English (Australia) \n" "Language: en_au\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po b/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po index 6d13966f3..db0ae9b0b 100644 --- a/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: English (New Zealand) \n" "Language: en_nz\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.en_us/strings.po b/inputstream.adaptive/resources/language/resource.language.en_us/strings.po index 1864b7bbc..4e5d10c4b 100644 --- a/inputstream.adaptive/resources/language/resource.language.en_us/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.en_us/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: English (United States) \n" "Language: en_us\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.eo/strings.po b/inputstream.adaptive/resources/language/resource.language.eo/strings.po index 44cf0fa01..07580de31 100644 --- a/inputstream.adaptive/resources/language/resource.language.eo/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.eo/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po b/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po index 19eab5cdd..d8448db9b 100644 --- a/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Spanish (Argentina) \n" "Language: es_ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.es_es/strings.po b/inputstream.adaptive/resources/language/resource.language.es_es/strings.po index f1e067f36..3b8188768 100644 --- a/inputstream.adaptive/resources/language/resource.language.es_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.es_es/strings.po @@ -4,126 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Last-Translator: roliverosc\n" -"Language-Team: Spanish\n" -"Language: es\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: roliverosc \n" +"Language-Team: Spanish (Spain) \n" +"Language: es_es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "Cliente InputStream para flujo de datos adaptativos" +msgstr "Cliente InputStream para transmisiones adaptativas" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "Cliente InputStream para flujo de datos adaptativos" +msgstr "Cliente InputStream para transmisiones de datos adaptativos. Se admiten protocolos de transmisiГіn comunes como MPEG-DASH, HLS y Microsoft Smooth Streaming.[CR][CR]El complemento tambiГ©n es compatible con transmisiones protegidas por DRM, como Google Widevine, Microsoft PlayReady y otros.[CR][CR]Para consultar la documentaciГіn, visite: https://github.com/xbmc/inputstream.adaptive" +#. Category title msgctxt "#30100" msgid "General" msgstr "General" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "MГ­n. Ancho de banda (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "Ancho de banda mГ­nimo (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "MГЎx. Ancho de banda (Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "Ancho de banda mГЎximo (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Ruta descodificador" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Establece el lГ­mite de ancho de banda que no se debe superar con las flujos de audio / vГ­deo. Establecer a 0 para desactivar." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "MГЎx. ResoluciГіn decodificador general" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "SelecciГіn de flujo de datos" +msgid "Maximum resolution" +msgstr "ResoluciГіn mГЎxima" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Medio" +msgid "Type of media streams played" +msgstr "Tipo de transmisiones multimedia reproducidas" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "MГЎx. ResoluciГіn descodificaciГіn segura" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Anular estado HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "ResoluciГіn mГЎxima para vГ­deos DRM" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" msgstr "Ignorar resoluciГіn de pantalla" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Si estГЎ activado, la resoluciГіn de la pantalla (o tamaГ±o de ventana cuando estГЎ en modo ventana) ya no se considerarГЎ al seleccionar la mejor resoluciГіn de transmisiГіn de vГ­deo cuando se inicie el vГ­deo y durante la reproducciГіn." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Modo de selecciГіn manual de transmisiГіn" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "Define quГ© tipo de transmisiones estarГЎn disponibles para la selecciГіn manual en los ajustes OSD de Kodi durante la reproducciГіn." + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Experto" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Habilitar funciones Pre-releases" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" +msgid "Try avoiding the use of secure decoder" +msgstr "Intentar evitar el uso de decodificador seguro" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "Es posible que algunos dispositivos Android definidos como Widevine L1 no funcionen correctamente, lo que puede provocar una pantalla negra durante la reproducciГіn. En este caso intente activarlo." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "Transmisiones de audio y vГ­deo" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Todo" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Audio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "VГ­deo" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Transmisiones de vГ­deo" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "VГ­deo / SubtГ­tulos" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "TransmisiГіn adaptativa" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "ADVERTENCIA: Esta es una funciГіn en PRUEBAS, es posible que no funcione correctamente y que pueda cambiar en versiones futuras." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Determinar automГЎticamente ancho de banda inicial" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "Si estГЎ activado, el ancho de banda lo determinarГЎ la primera descarga; sin embargo, es posible que no sea exacto. Si la calidad del vГ­deo al inicio de la reproducciГіn es demasiado baja, intente desactivarlo." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Ancho de banda inicial (Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "Define el ancho de banda inicial cuando no se puede determinar automГЎticamente. Este valor puede ser anulado por la configuraciГіn de ancho de banda mГ­nimo." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Ignorar estado de HDCP" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "Es posible que algunos vГ­deos HD/UHD protegidos por DRM solo se reproduzcan si se ignora el estado HDCP." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Tipo de selecciГіn de transmisiГіn" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Establezca cГіmo se elegirГЎ la calidad de las transmisiones de audio y vГ­deo durante la reproducciГіn. Esta configuraciГіn puede ser anulada por el complemento de vГ­deo utilizado. Consulte la Wiki para obtener mГЎs informaciГіn." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Adaptativo (por defecto)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "OSD manual" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "ResoluciГіn fija" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Solicitar calidad" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Prueba" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "DuraciГіn del bГєfer garantizado (seg)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "DuraciГіn mГЎxima del bГєfer (seg)" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Ignorar cambio de resoluciГіn de pantalla" -msgctxt "#30150" -msgid "Max" -msgstr "MГЎximo" +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Si estГЎ activado, la resoluciГіn de la pantalla (o el tamaГ±o de la ventana cuando estГЎ en modo ventana) ya no se considerarГЎ al seleccionar la mejor resoluciГіn de transmisiГіn de vГ­deo durante la reproducciГіn." -msgctxt "#30151" +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "Ruta descifrador" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Auto" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "Todo" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "Seleccionar transmisiГіn de vГ­deo" -msgctxt "#30159" -msgid "Video" -msgstr "VГ­deo" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "TransmisiГіn de vГ­deo {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "Modo de prueba" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Cambiar por segmentos" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segmentos" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Anular ajustes" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Registro de depuraciГіn" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Guardar manifiestos de transmisiГіn" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Guarda los manifiestos de transmisiГіn descargados durante la reproducciГіn en la carpeta de datos del usuario de InputStream Adaptive." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Guardar datos de licencia" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Guarda los datos de la licencia, por ejemplo: datos iniciales, datos de desafГ­o y datos de respuesta, en la carpeta \"cdm\" de la carpeta de datos de Kodi." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "MГ­n. Ancho de banda (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "MГЎx. Ancho de banda (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Ruta descodificador" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "MГЎx. ResoluciГіn decodificador general" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "SelecciГіn de flujo de datos" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Medio" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "MГЎx. ResoluciГіn descodificaciГіn segura" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Anular estado HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignorar resoluciГіn de pantalla" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Habilitar funciones Pre-releases" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "No usar decodificador seguro si es posible" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "MГЎximo" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Elegir automГЎticamente los flujos" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Elegir manualmente todos los flujos" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Elegir manualmente el flujo de video" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "VГ­deo + SubtГ­tulos" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "VГ­deo + SubtГ­tulos" diff --git a/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po b/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po index ddf5eaa96..c672a5109 100644 --- a/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Spanish (Mexico) \n" "Language: es_mx\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Cliente InputStream para transmisiones adaptativas" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "Cliente InputStream para transmisiones adaptativas" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "General" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" +msgstr "Experto" + +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Todo" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Audio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Video" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" msgstr "" -msgctxt "#30151" +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Ancho de banda mГ­nimo (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Ancho de banda mГЎximo (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Ruta absoluta a los decodificadores" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "ResoluciГіn mГЎxima del decodificador" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "SelecciГіn de flujo de datos" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Medios" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "ResoluciГіn mГЎxima del decodificador seguro" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Ignorar estado HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignorar la resoluciГіn de pantalla" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Activar caracterГ­sticas experimentales" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "No utilizar el decodificador seguro si es posible" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "MГЎx" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Seleccionar flujo de datos automГЎticamente" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Seleccionar todos los flujos manualmente" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Seleccionar flujo de video manualmente" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + SubtГ­tulos" diff --git a/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po b/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po index 4c7062e3b..d4b3c210b 100644 --- a/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po @@ -4,125 +4,325 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: rimasx \n" +"Language-Team: Estonian \n" "Language: et_ee\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream klient kohanduvate voogude jaoks" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "InputStream klient adaptiivsete voogude jaoks. Toetatakse levinud voogedastusprotokolle, nagu MPEG-DASH, HLS ja Microsoft Smooth Streaming.[CR][CR]Lisamoodul toetab ka DRM-iga kaitstud vooge, nagu Google Widevine, Microsoft PlayReady ja teised.[CR][CR][CR] ]Dokumentatsiooni saamiseks kГјlasta aadressi https://github.com/xbmc/inputstream.adaptive" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Гњldseaded" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgid "Minimum bandwidth (Kbps)" +msgstr "Minimaalne ribalaius (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgid "Maximum bandwidth (Kbps)" +msgstr "Maksimaalne ribalaius (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Kehtestab ribalaiuse piirangu, mida heli-/videovoogudega ei tohi Гјletada. Selle keelamiseks sea väärtuseks 0." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" +msgid "Maximum resolution" +msgstr "Maksimaalne eraldusvГµime" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "" +msgid "Type of media streams played" +msgstr "Esitatud meediavoogude tГјГјp" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" +msgid "Maximum resolution for DRM videos" +msgstr "Maksimaalne eraldusvГµime DRM-videote jaoks" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "" - -msgctxt "#30120" -msgid "Expert" -msgstr "" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "" - -msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" +msgid "Ignore screen resolution" +msgstr "Ignoreeri ekraani eraldusvГµimet" -msgctxt "#30150" -msgid "Max" -msgstr "" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Kui lubatud, ei vГµeta video kГ¤ivitamisel ja taasesituse ajal enam arvesse ekraani eraldusvГµimet (vГµi akna suurust aknareЕѕiimis) parima videovoo eraldusvГµime valimisel." -msgctxt "#30151" -msgid "480p" -msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Voo kГ¤sitsi valimise reЕѕiim" -msgctxt "#30152" -msgid "640p" -msgstr "" +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "Määrab, millist tГјГјpi voogusid teha Kodi OSD seadetes kГ¤sitsi valitavaks taasesituse ajal." -msgctxt "#30153" -msgid "720p" -msgstr "" +#. Category title +msgctxt "#30120" +msgid "Expert" +msgstr "Ekspert" -msgctxt "#30154" -msgid "1080p" -msgstr "" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" +msgstr "PГјГјa vГ¤ltida turvalise dekoodri kasutamist" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "MГµned Widevine L1 määratlusega Android seadmed ei pruugi korralikult tГ¶Г¶tada, mis vГµib taasesituse ajal pГµhjustada musta ekraani. Sel juhul proovi see lubada." +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" +msgid "Audio / Video streams" +msgstr "Heli-/videovood" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" -msgstr "" +msgstr "KГµik" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" -msgstr "" +msgstr "Heli" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" -msgstr "" +msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" +msgid "Video streams" +msgstr "Videovood" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" +msgid "Video / Subtitles" +msgstr "Video / Subtiitrid" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "Kohanduv voog" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "HOIATUS: See on KATSELINE funktsioon, mis ei pruugi korralikult tГ¶Г¶tada ja vГµib tulevastes versioonides muutuda." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Automaatne määrab esialgse ribalaiuse" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "Kui lubatud, määratakse ribalaius esimesel allalaadimisel, kuid see ei pruugi olla tГ¤pne. Kui video kvaliteet on taasesituse alguses liiga madal, proovi see valik keelata." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Esialgne ribalaius (Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "Määrab esialgse ribalaiuse, kui seda ei saa automaatselt määrata. Selle väärtuse saab alistada minimaalse ribalaiuse sГ¤ttega." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Eira HDCP olekut" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "MГµnda DRM kaitsega HD/UHD videot saab esitada ainult siis, kui HDCP olekut eiratakse." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Voo valiku tГјГјp" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Määra, kuidas taasesituse ajal valitakse heli-/videovoo kvaliteet. Kasutatav video lisamoodul vГµib selle sГ¤tte tГјhistada. Lisateavet leiab Wikist." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Kohanduv (vaikimisi)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "KГ¤sitsi ekraanil" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "Fikseeritud eraldusvГµime" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "KГјsi kvaliteeti" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Proovi" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "Tagatud puhvri kestus (s)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "Puhvri maksimaalne kestus (s)" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Eira ekraanilahutuse muutust" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Kui lubatud, ei vГµeta taasesituse ajal parima videovoo eraldusvГµime valimisel enam arvesse ekraani eraldusvГµimet (vГµi akna suurust aknareЕѕiimis)." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "DekrГјptija asukoht" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Automaatne" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "480p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "640p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "720p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "1080p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "Vali videovoog" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "Videovoog {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "KatsereЕѕiim" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "LГјlitu segmentide kaupa" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segmendid" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Alista seaded" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Silumise logimine" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Salvesta voomanifestid" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Salvestab taasesituse ajal allalaaditud voomanifestid rakenduse InputStream Adaptive kasutajaandmete kausta." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Salvesta litsentsiandmed" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Salvestab litsentsiandmed nГ¤iteks: algandmed, vГ¤ljakutse ja vastuse andmed Kodi kausta data/cdm." diff --git a/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po b/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po index feebdbd3a..b6e751338 100644 --- a/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Basque (Spain) \n" "Language: eu_es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po b/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po index 7a3d3170e..777d6ecca 100644 --- a/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Persian (Afghanistan) \n" "Language: fa_af\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po b/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po index 23700d946..37db0fdd9 100644 --- a/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Persian (Iran) \n" "Language: fa_ir\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po b/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po index f49baac60..7658705de 100644 --- a/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Oskari Lavinto \n" +"Language-Team: Finnish \n" "Language: fi_fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream-asiakas mukautuville mediavirroille" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "InputStream-asiakas mukautuville mediavirroille, joka tukee yleisiГ¤ suoratoistoprotokollia, kuten MPEG-DASH, HLS ja Microsoft Smooth Streaming.[CR][CR]Tukee myГ¶s mm. Google Widevine ja Microsoft PlayReady -tekniikoilla DRM-suojattua suoratoistoa.[CR][CR]Ohjeita lГ¶ydГ¤t osoitteesta https://github.com/xbmc/inputstream.adaptive." +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Yleiset" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgid "Minimum bandwidth (Kbps)" +msgstr "VГ¤himmГ¤iskaistanleveys (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgid "Maximum bandwidth (Kbps)" +msgstr "EnimmГ¤iskaistanleveys (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Asettaa kaistanleveysrajoituksen, jota ääni-/videovirrat eivГ¤t saa ylittää. Poista kГ¤ytГ¶stГ¤ asettamalla arvoksi 0." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" +msgid "Maximum resolution" +msgstr "EnimmГ¤isresoluutio" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "" +msgid "Type of media streams played" +msgstr "Toistettavien mediavirtojen tyyppi" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" +msgid "Maximum resolution for DRM videos" +msgstr "DRM-videoiden enimmГ¤istarkkuus" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "" +msgid "Ignore screen resolution" +msgstr "Г„lГ¤ huomioi nГ¤ytГ¶n resoluutiota" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "TГ¤mГ¤n ollessa kГ¤ytГ¶ssГ¤ nГ¤ytГ¶n resoluutiota (tai ikkunan kokoa ikkunatilassa) ei enää huomioida valittaessa videovirralle sopivinta resoluutiota videotoiston alkaessa ja toiston aikana." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Manuaalinen mediavirran valintatila" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "Määrittää Kodin kuvaruutuvalikosta manuaalisesti valittavissa olevat mediavirtatyypit." +#. Category title msgctxt "#30120" msgid "Expert" -msgstr "" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "" +msgstr "Asiantuntija" +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" +msgid "Try avoiding the use of secure decoder" +msgstr "Pyri vГ¤lttГ¤mään suojatun dekooderin kГ¤yttГ¶Г¤" -msgctxt "#30150" -msgid "Max" -msgstr "" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "Jotkin Widevine L1 -luokitellut Android-laitteet eivГ¤t vГ¤lttГ¤mГ¤ttГ¤ toimi oikein ja nГ¤yttГ¶ voi pimentyГ¤ toiston aikana. TГ¤mГ¤ asetus voi auttaa." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "Ääni-/videovirrat" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Kaikki" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Ääni" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Video" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Videovirrat" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "Video/tekstitykset" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "Mukautuva mediavirta" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "VAROITUS: TГ¤mГ¤ on KOKEELLINEN ominaisuus, joka ei vГ¤lttГ¤mГ¤ttГ¤ toimi oikein ja voi muuttua tulevissa versioissa." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Automaattinen määrittää aloituskaistanleveyden" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "TГ¤mГ¤n ollessa kГ¤ytГ¶ssГ¤ kaistanleveys määritetään ensimmГ¤isen latauksen perusteella, mutta tulos ei vГ¤lttГ¤mГ¤ttГ¤ ole tarkka. Jos videon laatu on toiston alussa liian heikko, kokeile asetuksen kГ¤ytГ¶stГ¤ poistoa." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Aloituskaistanleveys" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "Määrittää aloituskaistanleveyden kun sen automaattinen tunnistus ei onnistu. \"VГ¤himmГ¤iskaistanleveys\"-asetus voi ohittaa tГ¤mГ¤n arvon." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Г„lГ¤ huomioi HDCP-tilaa" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "Jotkin DRM-suojatut HD-/UHD-videot voidaan toistaa vain, jos HDCP-tilaa ei huomoida." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Mediavirran valinnan tyyppi" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Määrittää miten ääni-/videovirran laatu valitaan toiston aikana. KГ¤ytГ¶ssГ¤ oleva videolisГ¤osa voi ohittaa asetuksen. Lue lisää WikistГ¤." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Mukautuvasti (oletus)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "Manuaalisesti kuvaruutuvalikosta" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "KiinteГ¤ resoluutio" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Kysy laatua" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Kokeile" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "Puskurin varmennettu kesto (s)" -msgctxt "#30151" +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "Puskurin enimmГ¤iskesto (s)" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Г„lГ¤ huomioi nГ¤ytГ¶n resoluutiomuutosta" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "TГ¤mГ¤n ollessa kГ¤ytГ¶ssГ¤ nГ¤ytГ¶n resoluutiota (tai ikkunan kokoa ikkunatilassa) ei enää huomioida valittaessa parasta videovirran resoluutiota toiston aikana." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "Salauksen purkaimen sijainti" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Automaattinen" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" -msgstr "" +msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" -msgstr "" +msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" -msgstr "" +msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" -msgstr "" +msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "Valitse videovirta" -msgctxt "#30159" -msgid "Video" -msgstr "" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "Videovirta {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "Testitila" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Vaihda segmenttien perusteella" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segmentit" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Г„lГ¤ huomioi asetuksia" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Vianselvitysloki" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Tallenna mediavirtojen manifest-tiedostot" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Tallentaa toiston aikana ladatut mediavirtojen manifest-tiedostot InputStream Adaptiven \"userdata\"-kansioon." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Tallenna lisenssitiedot" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Tallentaa lisenssitiedot kuten aloitus-, haaste- ja vastaustiedot Kodin tietokansion \"cdm\"-kansioon." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "VГ¤himmГ¤iskaistanleveys (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "EnimmГ¤iskaistanleveys (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Salauksen purkaimen sijainti" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Yleisen dekoodauksen enimmГ¤istresoluutio" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Mediavirran valinta" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Media" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Suojatun dekoodauksen enimmГ¤istresoluutio" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Ohita HDCP-tila" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Г„lГ¤ huomioi nГ¤ytГ¶n resoluutiota" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "KГ¤ytГ¤ testiominaisuuksia" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Г„lГ¤ kГ¤ytГ¤ suojattua dekoodausta, jos mahdollista" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "EnimmГ¤is" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Valitse mediavirrat automaattisesti" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Valitse kaikki mediavirrat manuaalisesti" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Valitse videovirta manuaalisesti" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + Tekstitykset" diff --git a/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po b/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po index f0e015f04..24b8408f2 100644 --- a/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Faroese \n" "Language: fo_fo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po b/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po index 4af9c15e9..b0ef123c3 100644 --- a/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: French (Canada) \n" "Language: fr_ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po b/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po index 72ac0ddec..31a41bc65 100644 --- a/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: FranГ§ais\n" -"Language: fr\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: skypichat \n" +"Language-Team: French (France) \n" +"Language: fr_fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Client InputStream pour les flux adaptatifs" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "Client InputStream pour les flux adaptatifs. Les protocoles de streaming courants tels que MPEG-DASH, HLS et Microsoft Smooth Streaming sont pris en charge.[CR][CR]Le module complГ©mentaire prend Г©galement en charge les flux protГ©gГ©s par DRM, tels que Google Widevine, Microsoft PlayReady et autres.[CR][CR] Pour la documentation, visitez : https://github.com/xbmc/inputstream.adaptive" +#. Category title msgctxt "#30100" msgid "General" msgstr "GГ©nГ©ral" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "La bande passante minimale qui ne devrait pas ГЄtre rГ©duite." +msgid "Minimum bandwidth (Kbps)" +msgstr "Bande passante minimale (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "La bande passante maximale qui ne devrait pas ГЄtre dГ©passГ©e. 0=illimitГ©e" +msgid "Maximum bandwidth (Kbps)" +msgstr "Bande passante maximale (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Chemin absolu du rГ©pertoire contenant le dГ©codeur" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Г‰tablit la limite de bande passante Г  ne pas dГ©passer avec les flux audio/vidГ©o. Mettre Г  0 pour le dГ©sactiver." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "RГ©solution maximale du dГ©codeur" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "SГ©lection du flux" +msgid "Maximum resolution" +msgstr "RГ©solution maximale" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "MГ©dia" +msgid "Type of media streams played" +msgstr "Type de flux multimГ©dias lus" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "RГ©solution maximale autorisГ©e si le dГ©codage est rГ©alisГ© par une voie sГ©curisГ©e" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "SГ©lection du flux sans tenir compte du status HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "RГ©solution maximale pour les vidГ©os DRM" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Ne pas tenir compte de la rГ©solution d'Г©cran lors de la sГ©lection du flux" +msgid "Ignore screen resolution" +msgstr "Ignorer la rГ©solution de l'Г©cran" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Si activГ©e, la rГ©solution de l'Г©cran (ou la taille de la fenГЄtre en mode fenГЄtrГ©) ne sera plus prise en compte lors de la sГ©lection de la meilleure rГ©solution de flux vidГ©o au dГ©marrage de la vidГ©o et pendant la lecture." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Mode de sГ©lection manuelle du flux" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "DГ©finit le type de flux Г  rendre disponible pour la sГ©lection manuelle sur les paramГЁtres Kodi OSD pendant la lecture." +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Expert" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Activer les fonctions exprГ©rimentales" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" +msgid "Try avoiding the use of secure decoder" +msgstr "Essayer d'Г©viter l'utilisation d'un dГ©codeur sГ©curisГ©" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "Certains appareils Android dГ©finis comme Widevine L1 peuvent ne pas fonctionner correctement, ce qui peut entraГ®ner un Г©cran noir pendant la lecture. Dans ce cas essayez de l'activer." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "Flux audio / vidГ©o" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Tous" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Audio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "VidГ©o" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Flux vidГ©o" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "VidГ©o / Sous-titres" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "Flux adaptatif" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "AVERTISSEMENT : Il s'agit d'une fonctionnalitГ© de TEST, qui peut ne pas fonctionner correctement et peut changer dans les futures versions." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Auto dГ©termine la bande passante initiale" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "Si activГ©e, la bande passante sera dГ©terminГ©e par le premier tГ©lГ©chargement, mais elle peut ne pas ГЄtre prГ©cise. Si la qualitГ© vidГ©o au dГ©but de la lecture est trop faible, essayez de la dГ©sactiver." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Bande passante initiale (Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "DГ©finit la bande passante initiale lorsqu'elle ne peut pas ГЄtre dГ©terminГ©e automatiquement. Cette valeur peut ГЄtre remplacГ©e par le paramГЁtre de bande passante minimale." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Ignorer l'Г©tat HDCP" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "Certaines vidГ©os HD/UHD protГ©gГ©es par DRM ne peuvent ГЄtre lues que si l'Г©tat HDCP est ignorГ©." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Type de sГ©lection de flux" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "DГ©finir comment la qualitГ© des flux audio/vidГ©o sera choisie pendant la lecture. Ce paramГЁtre peut ГЄtre remplacГ© par le module complГ©mentaire vidГ©o utilisГ©. Voir le Wiki pour plus d'informations." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Adaptatif (par dГ©faut)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "OSD manuel" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "RГ©solution fixe" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Demander la qualitГ©" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Test" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "DurГ©e du tampon assurГ©e (sec)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "DurГ©e maximale de la mГ©moire tampon (sec)" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Ignorer le changement de rГ©solution de l'Г©cran" -msgctxt "#30150" -msgid "Max" -msgstr "Maximum" +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Si activГ©e, la rГ©solution de l'Г©cran (ou la taille de la fenГЄtre en mode fenГЄtrГ©) ne sera plus prise en compte lors de la sГ©lection de la meilleure rГ©solution de flux vidГ©o pendant la lecture." -msgctxt "#30151" +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "Chemin du dГ©crypteur" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Auto" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "Tous" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "SГ©lectionner le flux vidГ©o" -msgctxt "#30159" -msgid "Video" -msgstr "VidГ©o" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "Flux vidГ©o {codec} {qualitГ©}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "Mode essai" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Basculer par segments" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segments" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Remplacer les paramГЁtres" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Journalisation du dГ©bogage" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Enregistrer les manifestes de flux" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Enregistre les manifestes de flux tГ©lГ©chargГ©s pendant la lecture dans le dossier de donnГ©es utilisateur d'InputStream Adaptive." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Enregistrer les donnГ©es de licence" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Enregistre les donnГ©es de licence par exemple : donnГ©es initiales, donnГ©es de dГ©fi et donnГ©es de rГ©ponse, dans le dossier \"cdm\" du dossier de donnГ©es Kodi." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Bande passante min (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Bande passante max (Bit/s) 0=illimitГ©e" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "RГ©pertoire du dГ©codeur" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "RГ©solution maximale du dГ©codeur" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "SГ©lection du flux" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "MГ©dia" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "RГ©solution maximale dГ©codage sГ©curisГ©" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Outrepasser statut HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignorer la rГ©solution d'Г©cran" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Activer les fonctions expГ©rimentales" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Pas de dГ©codeur sГ©curisГ© si possible" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Maximum" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "SГ©lection automatique des flux" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "SГ©lectionner manuellement tous les flux" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "SГ©lectionner manuellement le flux vidГ©o" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "VidГ©o + Sous-titres" diff --git a/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po b/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po index cc1b0ec55..b94d33273 100644 --- a/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Galician (Spain) \n" "Language: gl_es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.he_il/strings.po b/inputstream.adaptive/resources/language/resource.language.he_il/strings.po index 2f01831be..da9fbcb88 100644 --- a/inputstream.adaptive/resources/language/resource.language.he_il/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.he_il/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-16 15:29+0000\n" -"Last-Translator: Yaron Shahrabani \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Hebrew (Israel) \n" "Language: he_il\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -23,110 +23,394 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "ЧњЧ§Ч•Ч— InputStream ЧњЧЄЧ–ЧЁЧ™ЧћЧ™Чќ ЧћЧЎЧЄЧ’ЧњЧ™Чќ" +#. Category title msgctxt "#30100" msgid "General" msgstr "Ч›ЧњЧњЧ™" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "ЧЁЧ•Ч—Ч‘ Ч¤ЧЎ ЧћЧ™Ч Ч™ЧћЧњЧ™ (Ч‘Ч™ЧЧ™Чќ ЧњЧ©Ч Ч™Ч™Ч”)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "ЧЁЧ•Ч—Ч‘ Ч¤ЧЎ ЧћЧ§ЧЎЧ™ЧћЧњЧ™ (Ч‘Ч™ЧЧ™Чќ ЧњЧ©Ч Ч™Ч™Ч”)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Ч ЧЄЧ™Ч‘ Ч”ЧћЧ¤ЧўЧ Ч—" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "ЧЁЧ–Ч•ЧњЧ•Ч¦Ч™Ч™ЧЄ ЧћЧ§ЧЎЧ™ЧћЧ•Чќ ЧњЧћЧ¤ЧўЧ Ч— Ч”Ч›ЧњЧњЧ™" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч–ЧЁЧќ" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "ЧћЧ“Ч™Ч”" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "ЧЁЧ–Ч•ЧњЧ•Ч¦Ч™Ч™ЧЄ ЧћЧ§ЧЎЧ™ЧћЧ•Чќ ЧњЧћЧ¤ЧўЧ Ч— Ч”ЧћЧђЧ•Ч‘ЧЧ—" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "ЧўЧ§Ч™Ч¤ЧЄ ЧћЧ¦Ч‘ HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Ч”ЧЄЧўЧњЧќ ЧћЧЁЧ–Ч•ЧњЧ•Ч¦Ч™Ч™ЧЄ Ч”ЧЄЧ¦Ч•Ч’Ч”" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" msgstr "ЧћЧ•ЧћЧ—Ч”" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Ч”Ч¤ЧўЧњЧЄ ЧЄЧ›Ч•Ч Ч•ЧЄ Ч©ЧЧЁЧќ Ч©Ч•Ч—ЧЁЧЁЧ•" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "ЧњЧђ ЧњЧ”Ч©ЧЄЧћЧ© Ч‘ЧћЧ¤ЧўЧ Ч— ЧћЧђЧ•Ч‘ЧЧ— ЧђЧќ Ч Ч™ЧЄЧџ" - -msgctxt "#30150" -msgid "Max" -msgstr "ЧћЧ§ЧЎЧ™ЧћЧ•Чќ" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" +msgid "Try avoiding the use of secure decoder" +msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч–ЧЁЧќ ЧђЧ•ЧЧ•ЧћЧЧ™ЧЄ" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" -msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч›Чњ Ч”Ч–ЧЁЧћЧ™Чќ Ч™Ч“Ч Ч™ЧЄ" +msgid "Audio / Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Ч”Ч›Чњ" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "Ч©ЧћЧў" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Ч•Ч™Ч“ЧђЧ•" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" -msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч–ЧЁЧќ Ч”Ч•Ч™Ч“ЧђЧ• Ч™Ч“Ч Ч™ЧЄ" +msgid "Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Ч•Ч™Ч“ЧђЧ• + Ч›ЧЄЧ•Ч‘Ч™Ч•ЧЄ" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "ЧЁЧ•Ч—Ч‘ Ч¤ЧЎ ЧћЧ™Ч Ч™ЧћЧњЧ™ (Ч‘Ч™ЧЧ™Чќ ЧњЧ©Ч Ч™Ч™Ч”)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "ЧЁЧ•Ч—Ч‘ Ч¤ЧЎ ЧћЧ§ЧЎЧ™ЧћЧњЧ™ (Ч‘Ч™ЧЧ™Чќ ЧњЧ©Ч Ч™Ч™Ч”)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Ч ЧЄЧ™Ч‘ Ч”ЧћЧ¤ЧўЧ Ч—" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "ЧЁЧ–Ч•ЧњЧ•Ч¦Ч™Ч™ЧЄ ЧћЧ§ЧЎЧ™ЧћЧ•Чќ ЧњЧћЧ¤ЧўЧ Ч— Ч”Ч›ЧњЧњЧ™" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч–ЧЁЧќ" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "ЧћЧ“Ч™Ч”" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "ЧЁЧ–Ч•ЧњЧ•Ч¦Ч™Ч™ЧЄ ЧћЧ§ЧЎЧ™ЧћЧ•Чќ ЧњЧћЧ¤ЧўЧ Ч— Ч”ЧћЧђЧ•Ч‘ЧЧ—" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "ЧўЧ§Ч™Ч¤ЧЄ ЧћЧ¦Ч‘ HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ч”ЧЄЧўЧњЧќ ЧћЧЁЧ–Ч•ЧњЧ•Ч¦Ч™Ч™ЧЄ Ч”ЧЄЧ¦Ч•Ч’Ч”" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Ч”Ч¤ЧўЧњЧЄ ЧЄЧ›Ч•Ч Ч•ЧЄ Ч©ЧЧЁЧќ Ч©Ч•Ч—ЧЁЧЁЧ•" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "ЧњЧђ ЧњЧ”Ч©ЧЄЧћЧ© Ч‘ЧћЧ¤ЧўЧ Ч— ЧћЧђЧ•Ч‘ЧЧ— ЧђЧќ Ч Ч™ЧЄЧџ" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "ЧћЧ§ЧЎЧ™ЧћЧ•Чќ" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч–ЧЁЧќ ЧђЧ•ЧЧ•ЧћЧЧ™ЧЄ" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч›Чњ Ч”Ч–ЧЁЧћЧ™Чќ Ч™Ч“Ч Ч™ЧЄ" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Ч‘Ч—Ч™ЧЁЧЄ Ч–ЧЁЧќ Ч”Ч•Ч™Ч“ЧђЧ• Ч™Ч“Ч Ч™ЧЄ" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Ч•Ч™Ч“ЧђЧ• + Ч›ЧЄЧ•Ч‘Ч™Ч•ЧЄ" diff --git a/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po b/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po index 16daa26b7..af750c632 100644 --- a/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-07-17 10:36+0000\n" -"Last-Translator: Christian Gade \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Hindi (India) \n" "Language: hi_in\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.7.1\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -23,110 +23,373 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "सामान्य" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "न्यूनतम बैंडविड्थ (बिट/सेकंड)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "अधिकतम बैंडविड्थ (बिट/सेकंड)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "डिक्रिप्ट पथ" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "अधिकतम उत्तमता सामान्य विकोडक" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "वीडियो उत्तमता а¤ља¤Їа¤Ё" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "संचार माध्यम" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "अधिकतम उत्तमता सुरक्षित विकोडक" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "रद्द/बदले HDCP स्थिति" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "नज़रअंदाज़ करे प्रदर्शित रेसोलुशन" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "विशेषज्ञ" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "पूर्व-रिलीज़ सुविधाएँ सक्षम करें" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "ज़्यादा से ज़्यादा" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" - -msgctxt "#30155" -msgid "Automatically select streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" +msgid "Audio / Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "सब" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "ऑडियो" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "वीडियो" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" +msgid "Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "न्यूनतम बैंडविड्थ (बिट/सेकंड)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "अधिकतम बैंडविड्थ (बिट/सेकंड)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "डिक्रिप्ट पथ" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "अधिकतम उत्तमता सामान्य विकोडक" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "वीडियो उत्तमता а¤ља¤Їа¤Ё" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "संचार माध्यम" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "अधिकतम उत्तमता सुरक्षित विकोडक" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "रद्द/बदले HDCP स्थिति" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "नज़रअंदाज़ करे प्रदर्शित रेसोलुशन" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "पूर्व-रिलीज़ सुविधाएँ सक्षम करें" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "ज़्यादा से ज़्यादा" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" diff --git a/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po b/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po index 2d2dda4a3..28b54d712 100644 --- a/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po @@ -5,144 +5,414 @@ msgid "" msgstr "" "Project-Id-Version: inputstream.adaptive\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-10-16 22:28+0200\n" -"Last-Translator: dsardelic\n" -"Language-Team: Croatian\n" -"Language: hr_HR\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Croatian \n" +"Language: hr_hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "InputStream klijent za adaptivne tokove" +msgstr "InputStream klijent za prilagodljiva strujanja" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "InputStream klijent za adaptivne tokove" +msgstr "InputStream klijent za prilagodljiva strujanja" +#. Category title msgctxt "#30100" msgid "General" -msgstr "OpД‡e" +msgstr "OpД‡enito" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "Min. propusnost (bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Maks. propusnost (bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Putanja prema mapi s dekripterima" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Maks. razluДЌivost opД‡eg dekodera" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Odabir toka" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Mediji" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Maks. razluДЌivost sigurnog dekodera" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "NadjaДЌaj HDCP status" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Zanemari razluДЌivost zaslona" - -msgctxt "#30120" -msgid "Expert" -msgstr "StruДЌne" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "OmoguД‡i joЕЎ neobjavljene znaДЌajke" - -msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "Ukoliko je moguД‡e, ne koristi sigurni dekoder" +msgid "Ignore screen resolution" +msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "Maks" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" -msgctxt "#30151" -msgid "480p" -msgstr "480p" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" -msgctxt "#30152" -msgid "640p" -msgstr "640p" +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" -msgctxt "#30153" -msgid "720p" -msgstr "720p" +#. Category title +msgctxt "#30120" +msgid "Expert" +msgstr "StruДЌno" -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" +msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Automatski odaberi tokove" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" -msgstr "RuДЌno odaberi sve tokove" +msgid "Audio / Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" -msgstr "Sve" +msgstr "Svi" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" -msgstr "Audio" +msgstr "Zvuk" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" -msgstr "RuДЌno odaberi video tok" +msgid "Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video + Titlovi" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" -# Assured buffer length duration (seconds) +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) msgctxt "#30200" -msgid "Assured Buffer Duration (sec)" -msgstr "Osigurano trajanje meД‘uspremnika (sek)" +msgid "Assured buffer duration (sec)" +msgstr "" -# Max buffer length duration (seconds) +#. Max buffer length duration (seconds) msgctxt "#30201" -msgid "Max Buffer Duration (sec)" -msgstr "Maks. trajanje meД‘uspremnika (sek)" +msgid "Maximum buffer duration (sec)" +msgstr "" -# Ignore Window Display Resolution Change +#. Ignore screen resolution change e.g. window resize msgctxt "#30202" -msgid "Ignore Window Change" -msgstr "Ignoriraj promjenu prozora" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Najmanja propusnost (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "NajveД‡a propusnost (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Putanja do dekГґdera" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "NajveД‡a razluДЌivost opД‡eg dekГґdera" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Odabir strujanja" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Mediji" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "NajveД‡a razluДЌivost sigurnog dekГґdera" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "ZaobiД‘i HDCP stanje" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Zanemari razluДЌivost zaslona" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "OmoguД‡i znaДЌajke predizdanja" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Ako je moguД‡e, ne koristi sigurni dekГґder" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "NajveД‡a" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Automatski odabir strujanja" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "RuДЌni odabir svih strujanja" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "RuДЌni odabir video strujanja" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + Podnaslovi" diff --git a/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po b/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po index a22587b6e..3d24742f5 100644 --- a/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-09-03 08:29+0000\n" -"Last-Translator: Frodo19 \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Hungarian \n" "Language: hu_hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -23,110 +23,394 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "InputStream kliens az adaptГ­v streamekhez" +#. Category title msgctxt "#30100" msgid "General" msgstr "ГЃltalГЎnos" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "MinimГЎlis sГЎvszГ©lessГ©g (Bit/s), ami alГЎ nem csГ¶kkenhet." +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "MaximГЎlis sГЎvszГ©lessГ©g (Bit/s), amelyet nem lГ©p tГєl. 0=vГ©gtelen" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Mappa a decrypterek tГЎrolГЎsГЎra" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "MaximГЎlis felbontГЎs ГЎltalГЎnos dekГіder" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Stream vГЎlasztГЎs" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "MГ©dia" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "MaximГЎlis felbontГЎs a secure dekГіderrel" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Stream vГЎlasztГЎsnГЎl figyelmen kГ­vГјl hagyja a HDCP stГЎtuszt" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "KijelzЕ‘ felbontГЎst figyelmen kГ­vГјl hagyja" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" msgstr "HaladГі" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "KiadГЎs elЕ‘tti funkciГіk engedГ©lyezГ©se" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "Ne hasznГЎlj secure dekГіdert ha lehetsГ©ges" - -msgctxt "#30150" -msgid "Max" -msgstr "Max" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" +msgid "Try avoiding the use of secure decoder" +msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Automatikus stream vГЎlasztГЎs" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" -msgstr "KГ©zi stream vГЎlasztГЎs" +msgid "Audio / Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Minden" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "Hang" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "VideГі" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" -msgstr "KГ©zi videГі stream vГЎlasztГЎs" +msgid "Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "VideГі + feliratok" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "MinimГЎlis sГЎvszГ©lessГ©g (Bit/s), ami alГЎ nem csГ¶kkenhet." + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "MaximГЎlis sГЎvszГ©lessГ©g (Bit/s), amelyet nem lГ©p tГєl. 0=vГ©gtelen" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Mappa a decrypterek tГЎrolГЎsГЎra" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "MaximГЎlis felbontГЎs ГЎltalГЎnos dekГіder" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Stream vГЎlasztГЎs" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "MГ©dia" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "MaximГЎlis felbontГЎs a secure dekГіderrel" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Stream vГЎlasztГЎsnГЎl figyelmen kГ­vГјl hagyja a HDCP stГЎtuszt" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "KijelzЕ‘ felbontГЎst figyelmen kГ­vГјl hagyja" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "KiadГЎs elЕ‘tti funkciГіk engedГ©lyezГ©se" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Ne hasznГЎlj secure dekГіdert ha lehetsГ©ges" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Max" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Automatikus stream vГЎlasztГЎs" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "KГ©zi stream vГЎlasztГЎs" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "KГ©zi videГі stream vГЎlasztГЎs" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "VideГі + feliratok" diff --git a/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po b/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po index 0268e035b..f82e2d032 100644 --- a/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Armenian \n" "Language: hy_am\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.id_id/strings.po b/inputstream.adaptive/resources/language/resource.language.id_id/strings.po index 200d8b1bd..03659fee2 100644 --- a/inputstream.adaptive/resources/language/resource.language.id_id/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.id_id/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Indonesian \n" "Language: id_id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.is_is/strings.po b/inputstream.adaptive/resources/language/resource.language.is_is/strings.po index f434f977d..c8b1212a0 100644 --- a/inputstream.adaptive/resources/language/resource.language.is_is/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.is_is/strings.po @@ -4,125 +4,325 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Icelandic \n" "Language: is_is\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream-biГ°lari fyrir aГ°laganleg streymi" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Almennt" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgid "Minimum bandwidth (Kbps)" +msgstr "LГЎgmarks-bandbreidd (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgid "Maximum bandwidth (Kbps)" +msgstr "HГЎmarks-bandbreidd (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" +msgid "Maximum resolution" +msgstr "HГЎmarksupplausn" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "" +msgid "Type of media streams played" +msgstr "Tegund myndstreymis Г­ spilun" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" +msgid "Maximum resolution for DRM videos" +msgstr "HГЎmarksupplausn fyrir DRM-myndskeiГ°" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "Hunsa skjГЎupplausn" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Handvirkt val streymis" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" +msgstr "ГЌtarlegt" + +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "Mynd / hljГіГ°streymi" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Allt" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "HljГіГ°" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Myndmerki" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Myndstreymi" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "Myndmerki / SkjГЎtextar" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "AГ°laganlegt streymi" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." msgstr "" -msgctxt "#30150" -msgid "Max" +msgctxt "#30168" +msgid "Auto determines initial bandwidth" msgstr "" -msgctxt "#30151" -msgid "480p" +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." msgstr "" -msgctxt "#30152" -msgid "640p" +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" msgstr "" -msgctxt "#30153" -msgid "720p" +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." msgstr "" -msgctxt "#30154" -msgid "1080p" +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Hunsa HDCP-stГ¶Г°u" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "AГ°laganlegt (sjГЎlfgefiГ°)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "Handvirkir OSD-stjГіrntextar" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "FГ¶st upplausn" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Spyrja um gæði" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "PrГіfa" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" msgstr "" -msgctxt "#30158" -msgid "Audio" +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "SlГіГ° afkГіГ°ara" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "SjГЎlfvirkt" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "480p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "640p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "720p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "1080p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "Veldu myndstreymi" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "Myndstreymi {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "PrГіfunarhamur" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Skipta eftir bГєtum" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "BГєtar" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Taka fram yfir stillingar" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "AtvikaskrГЎning" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Vista gГ¶gn notkunarleyfis" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.it_it/strings.po b/inputstream.adaptive/resources/language/resource.language.it_it/strings.po index 9d1355da2..d9b74611a 100644 --- a/inputstream.adaptive/resources/language/resource.language.it_it/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.it_it/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: Italian\n" -"Language: it\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Massimo Pissarello \n" +"Language-Team: Italian \n" +"Language: it_it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Client InputStream per flussi adattivi" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "Client InputStream per flussi adattivi. Sono supportati protocolli di streaming comuni come MPEG-DASH, HLS e Microsoft Smooth Streaming.[CR][CR]L'add-on supporta anche flussi protetti da DRM, come Google Widevine, Microsoft PlayReady e altri.[CR][CR] ]Per la documentazione visita: https://github.com/xbmc/inputstream.adaptive" +#. Category title msgctxt "#30100" msgid "General" msgstr "Generale" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "La larghezza di banda minima (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "Larghezza di banda minima (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "La larghezza di banda massima (Bit/s) 0=illimitato" +msgid "Maximum bandwidth (Kbps)" +msgstr "Larghezza di banda massima (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Percorso decrittatore" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Stabilisce il limite di banda da non superare con i flussi audio/video. Impostare su 0 per disabilitarlo." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Risoluzione massima per il decoder generico" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Selezione dei flussi" +msgid "Maximum resolution" +msgstr "Risoluzione massima" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Media riprodotti" +msgid "Type of media streams played" +msgstr "Tipo di flussi multimediali riprodotti" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Risoluzione massima per il decoder sicuro" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Sovrascrivi stato HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "Risoluzione massima per video DRM" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" msgstr "Ignora la risoluzione dello schermo" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Se abilitata, la risoluzione dello schermo (o la dimensione della finestra in modalitГ  finestra) non verrГ  piГ№ considerata quando si seleziona la migliore risoluzione del flusso video all'avvio del video e durante la riproduzione." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "ModalitГ  di selezione manuale del flusso" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "Definisce il tipo di flussi da rendere disponibili per la selezione manuale nelle impostazioni dell'OSD di Kodi durante la riproduzione." + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Esperto" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Abilita le funzionalitГ  Pre-Release" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" +msgid "Try avoiding the use of secure decoder" +msgstr "Cerca di evitare l'uso di un decoder sicuro" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "Alcuni dispositivi Android definiti come Widevine L1 potrebbero non funzionare correttamente, il che potrebbe causare una schermata nera durante la riproduzione. In questo caso prova ad abilitarlo." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "Flussi audio/video" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Tutti" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Audio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Video" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Flussi video" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "Video / Sottotitoli" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "Flusso adattivo" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "ATTENZIONE: questa ГЁ una funzionalitГ  di PROVA, potrebbe non funzionare correttamente e potrebbe cambiare nelle versioni future." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Determina automaticamente la larghezza di banda iniziale" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "Se abilitata, la larghezza di banda sarГ  determinata dal primo download, tuttavia potrebbe non essere precisa. Se la qualitГ  del video all'inizio della riproduzione ГЁ troppo bassa, prova a disabilitarla." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Larghezza di banda iniziale (Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "Definisce la larghezza di banda iniziale quando non puГІ essere determinata automaticamente. Questo valore puГІ essere sostituito dall'impostazione della larghezza di banda minima." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Ignora lo stato HDCP" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "Alcuni video HD/UHD protetti da DRM possono essere riprodotti solo se lo stato HDCP viene ignorato." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Tipo di selezione del flusso" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Imposta come verrГ  scelta la qualitГ  dei flussi audio/video durante la riproduzione. Questa impostazione puГІ essere sovrascritta dall'add-on usato. Vedi Wiki per ulteriori informazioni." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Adattivo (predefinito)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "OSD manuale" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "Risoluzione fissa" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Chiedi qualitГ " + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Test" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "Durata garantita buffer (sec)" -msgctxt "#30150" -msgid "Max" -msgstr "Massima" +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "Durata massima buffer (sec)" -msgctxt "#30151" +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Ignora modifica risoluzione dello schermo" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Se abilitata, la risoluzione dello schermo (o la dimensione della finestra in modalitГ  finestra) non verrГ  piГ№ considerata quando si seleziona la migliore risoluzione del flusso video durante la riproduzione." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "Percorso decifratore" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Auto" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Selezione dei flussi automatica" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "Selezione manuale di tutti i flussi" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "Tutti" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "Solo audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "Seleziona flusso video" -msgctxt "#30159" -msgid "Video" -msgstr "Solo video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "Flusso video {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "ModalitГ  di prova" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Cambia in base ai segmenti" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segmenti" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Sovrascrivi impostazioni" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Registrazione debug" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Salva manifest del flusso" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Salva i manifest del flusso scaricati durante la riproduzione nella cartella dei dati utente di InputStream Adaptive." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Salva dati della licenza" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Salva i dati della licenza, ad esempio: dati iniziali, dati di sfida e dati di risposta, nella cartella \"cdm\" della cartella dei dati di Kodi." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Larghezza di banda minima (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Larghezza di banda massima (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Percorso decodificatore" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Risoluzione massima per decodificatore generale" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Selezione stream" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Media" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Risoluzione massima per decodificatore sicuro" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Sovrascrivi stato HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignora risoluzione schermo" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Abilita funzionalitГ  prima del rilascio" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Non utilizzare decoder sicuro se possibile" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Massima" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Seleziona automaticamente stream" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Seleziona manualmente tutti gli stream" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "Selezione manuale del flusso video" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Seleziona manualmente gli stream video" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video + Sottotitoli" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + Sottotitoli" diff --git a/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po b/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po index b8f8decce..c8a64ceea 100644 --- a/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: Japanese\n" -"Language: ja\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Japanese \n" +"Language: ja_jp\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,394 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "一般" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "жњЂе°ЏеёЇеџџ(Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "最大帯域(Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "еѕ©еЏ·еЊ–ж©џгѓ‘гѓјг‚№" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "一般デコーダによる最大解像度" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "г‚№гѓ€гѓЄгѓјгѓ йЃёжЉћ" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "гѓЎгѓ‡г‚Јг‚ў" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "セキュアデコーダによる最大解像度" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "HDCPиЁ­е®љг‚’з„Ўи¦–гЃ™г‚‹гЂ‚" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "з”»йќўгЃ®и§ЈеѓЏеє¦г‚’з„Ўи¦–гЃ™г‚‹гЂ‚" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" msgstr "г‚Ёг‚­г‚№гѓ‘гѓјгѓ€" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "гѓ—гѓ¬гѓЄгѓЄгѓјг‚№ж©џиѓЅг‚’дЅїгЃ†гЂ‚" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "可能な限りセキュアデコーダを使わない" - -msgctxt "#30150" -msgid "Max" -msgstr "最大" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" +msgid "Try avoiding the use of secure decoder" +msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "и‡Єе‹•йЃёжЉћ" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" -msgstr "手動選択" +msgid "Audio / Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "е…ЁйѓЁ" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "г‚Єгѓјгѓ‡г‚Јг‚Є" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "гѓ“гѓ‡г‚Є" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" -msgstr "ビデオストリーム手動選択" +msgid "Video streams" +msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "ビデオと字幕" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "жњЂе°ЏеёЇеџџ(Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "最大帯域(Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "еѕ©еЏ·еЊ–ж©џгѓ‘гѓјг‚№" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "一般デコーダによる最大解像度" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "г‚№гѓ€гѓЄгѓјгѓ йЃёжЉћ" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "гѓЎгѓ‡г‚Јг‚ў" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "セキュアデコーダによる最大解像度" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "HDCPиЁ­е®љг‚’з„Ўи¦–гЃ™г‚‹гЂ‚" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "з”»йќўгЃ®и§ЈеѓЏеє¦г‚’з„Ўи¦–гЃ™г‚‹гЂ‚" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "гѓ—гѓ¬гѓЄгѓЄгѓјг‚№ж©џиѓЅг‚’дЅїгЃ†гЂ‚" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "可能な限りセキュアデコーダを使わない" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "最大" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "и‡Єе‹•йЃёжЉћ" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "手動選択" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "ビデオストリーム手動選択" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "ビデオと字幕" diff --git a/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po b/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po index c21676ddf..e008b9022 100644 --- a/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Kannada (India) \n" "Language: kn_in\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po b/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po index 226ea3e0a..2704c2158 100644 --- a/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po @@ -5,128 +5,412 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-01 09:42+0000\n" -"Last-Translator: Joe Baek \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Minho Park \n" "Language-Team: Korean \n" "Language: ko_kr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "к°ЂліЂ мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream нЃґлќјмќґм–ёнЉё" +msgstr "м Ѓмќ‘н• мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream нЃґлќјмќґм–ёнЉё" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "к°ЂліЂ мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream нЃґлќјмќґм–ёнЉё" +msgstr "м Ѓмќ‘н• мЉ¤нЉёл¦јмќ„ мњ„н•њ InputStream 클라이언트입니다. MPEG-DASH, HLS л°Џ Microsoft Smooth Streamingкіј к°™мќЂ мќјл°м Ѓмќё 스트리밍 н”„лЎњн† мЅњмќґ 지원됩니다.[CR][CR]м¶”к°Ђ кё°лЉҐмќЂ Google Widevine, Microsoft PlayReady л“±кіј к°™мќЂ DRM ліґнё мЉ¤нЉёл¦јлЏ„ 지원합니다.[CR][CR ]문서를 ліґл ¤л©ґ https://github.com/xbmc/inputstream.adaptive를 л°©л¬ён•м„ёмљ”" +#. Category title msgctxt "#30100" msgid "General" msgstr "мќјл°" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "мµњм†ЊлЊЂм—­нЏ­(Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "мµњм†Њ лЊЂм—­нЏ­(Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "мµњлЊЂлЊЂм—­нЏ­(Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "мµњлЊЂ лЊЂм—­нЏ­(Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "ліµнён™”кё° кІЅлЎњ" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "м¤л””м¤/л№„л””м¤ мЉ¤нЉёл¦јмќґ 초과лђм§Ђ м•ЉлЏ„лЎќ лЊЂм—­нЏ­ м њн•њмќ„ 설정합니다. 사용н•м§Ђ м•Љмњјл ¤л©ґ 0мњјлЎњ 설정н•м‹­м‹њм¤." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "мќјл° ліµнён™”кё°мќ мµњлЊЂ н•ґмѓЃлЏ„" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "мЉ¤нЉёл¦јм„ нѓќ" +msgid "Maximum resolution" +msgstr "мµњлЊЂ н•ґмѓЃлЏ„" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "лЇёл””м–ґ" +msgid "Type of media streams played" +msgstr "мћ¬мѓќлђлЉ” лЇёл””м–ґ мЉ¤нЉёл¦ј мњ н•" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "ліґм•€ ліµнён™”кё°мќ мµњлЊЂ н•ґмѓЃлЏ„" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "HDCP설정을 무시" +msgid "Maximum resolution for DRM videos" +msgstr "DRM 비디м¤мќ мµњлЊЂ н•ґмѓЃлЏ„" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "화면해상도를 무시" +msgid "Ignore screen resolution" +msgstr "н™”л©ґ н•ґмѓЃлЏ„ 무시" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "사용н•л©ґ 비디м¤к°Ђ м‹њмћ‘лђ  л•Њм™Ђ мћ¬мѓќ 중에 мµњмѓЃмќ л№„л””м¤ мЉ¤нЉёл¦ј 해상도를 м„ нѓќн•  л•Њ н™”л©ґ н•ґмѓЃлЏ„(лђлЉ” м°Ѕ лЄЁл“њмќ м°Ѕ нЃ¬кё°)к°Ђ лЌ” мќґмѓЃ кі л ¤лђм§Ђ 않습니다." +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "м€лЏ™ мЉ¤нЉёл¦ј м„ нѓќ лЄЁл“њ" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "мћ¬мѓќ 중 Kodi OSD 설정에서 м€лЏ™ м„ нѓќм—ђ 사용할 м€ мћ€лЉ” мЉ¤нЉёл¦ј мњ н•мќ„ м •мќн•©л‹€л‹¤." + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "м „л¬ёк°Ђ" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "кіµк°њ м „ кё°лЉҐ н™њм„±н™”" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "к°ЂлЉҐн•л©ґ ліґм•€ ліµнён™”кё° 사용 м•ЉмќЊ" +msgid "Try avoiding the use of secure decoder" +msgstr "ліґм•€ 디코더를 사용н•м§Ђ м•ЉмќЊ" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "Widevine L1лЎњ м •мќлђњ мќјл¶Ђ Android кё°кё°лЉ” м њлЊЂлЎњ мћ‘лЏ™н•м§Ђ м•Љмќ„ м€ мћ€мњјл©°, мќґлЎњ мќён•ґ мћ¬мѓќ 중에 кІЂмќЂмѓ‰ н™”л©ґмќґ л‚нѓЂл‚  м€ мћ€мЉµл‹€л‹¤. мќґ кІЅмљ° 사용н•м‹­м‹њм¤." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "м¤л””м¤/л№„л””м¤ мЉ¤нЉёл¦ј" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "лЄЁл‘ђ" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "м¤л””м¤" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "비디м¤" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "л№„л””м¤ мЉ¤нЉёл¦ј" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "мЃмѓЃ/자막" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "м Ѓмќ‘н• мЉ¤нЉёл¦ј" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "кІЅкі : н…ЊмЉ¤нЉё кё°лЉҐмњјлЎњ, м њлЊЂлЎњ мћ‘лЏ™н•м§Ђ м•Љк±°л‚ н–Ґн›„ лІ„м „м—ђм„њ ліЂкІЅлђ  м€ мћ€мЉµл‹€л‹¤." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "мћђлЏ™мњјлЎњ 초기 лЊЂм—­нЏ­ кІ°м •" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "사용н•л©ґ лЊЂм—­нЏ­мќЂ мІ« лІ€м§ё 다운로드에 мќн•ґ кІ°м •лђм§Ђл§Њ м •н™•н•м§Ђ м•Љмќ„ м€ мћ€мЉµл‹€л‹¤. мћ¬мѓќ м‹њмћ‘ м‹њ л№„л””м¤ н’€м§€мќґ 너무 л‚®мњјл©ґ 사용н•м§Ђ л§€м‹­м‹њм¤." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "초기 лЊЂм—­нЏ­(Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "мћђлЏ™мњјлЎњ кІ°м •н•  м€ м—†лЉ” кІЅмљ° 초기 лЊЂм—­нЏ­мќ„ м •мќн•©л‹€л‹¤. мќґ к°’мќЂ мµњм†Њ лЊЂм—­нЏ­ 설정으로 л°”лЂ” м€ мћ€мЉµл‹€л‹¤." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "HDCP мѓЃнѓњ 무시" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "мќјл¶Ђ DRM ліґнё HD/UHD лЏ™мЃмѓЃмќЂ HDCP мѓЃнѓњк°Ђ 무시лђлЉ” кІЅмљ°м—ђл§Њ мћ¬мѓќлђ  м€ мћ€мЉµл‹€л‹¤." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "мЉ¤нЉёл¦ј м„ нѓќ мњ н•" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "мћ¬мѓќ 중에 м¤л””м¤/л№„л””м¤ мЉ¤нЉёл¦ј н’€м§€мќ„ м„ нѓќн•лЉ” л°©лІ•мќ„ 설정합니다. мќґ 설정은 사용된 л№„л””м¤ м¶”к°Ђ кё°лЉҐм—ђ мќн•ґ л°”лЂ” м€ мћ€мЉµл‹€л‹¤. мћђм„ён•њ л‚ґмљ©мќЂ 위키를 м°ёмЎ°н•м‹­м‹њм¤." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "м Ѓмќ‘н•(кё°ліёк°’)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "м€лЏ™ OSD" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "кі м • н•ґмѓЃлЏ„" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "н’€м§€ н™•мќё" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "м‹њн—" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "보장된 лІ„нЌј м§Ђм†Ќ м‹њк°„(초)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "мµњлЊЂ лІ„нЌј м§Ђм†Ќ м‹њк°„(초)" -msgctxt "#30150" -msgid "Max" -msgstr "мµњлЊЂ" +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "н™”л©ґ н•ґмѓЃлЏ„ ліЂкІЅ 무시" -msgctxt "#30151" +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "사용н•л©ґ мћ¬мѓќ 중에 мµњмѓЃмќ л№„л””м¤ мЉ¤нЉёл¦ј 해상도를 м„ нѓќн•  л•Њ н™”л©ґ н•ґмѓЃлЏ„(лђлЉ” м°Ѕ лЄЁл“њмќё кІЅмљ° м°Ѕ нЃ¬кё°)к°Ђ лЌ” мќґмѓЃ кі л ¤лђм§Ђ 않습니다." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "м•”нё н•ґлЏ…кё° кІЅлЎњ" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "мћђлЏ™" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "мћђлЏ™мњјлЎњ мЉ¤нЉёл¦ј м„ нѓќ" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "м€лЏ™мњјлЎњ лЄЁл“  мЉ¤нЉёл¦ј м„ нѓќ" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "лЄЁл‘ђ" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "м¤л””м¤" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "л№„л””м¤ мЉ¤нЉёл¦ј м„ нѓќ" -msgctxt "#30159" -msgid "Video" -msgstr "비디м¤" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "л№„л””м¤ мЉ¤нЉёл¦ј {мЅ”лЌ±} {н’€м§€}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "м‹њн— лЄЁл“њ" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "м„ёк·ёлЁјнЉёлЎњ м „н™" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "м„ёк·ёлЁјнЉё" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "설정 л°”кѕёкё°" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "л””лІ„к·ё лЎњк·ё" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "мЉ¤нЉёл¦ј лЄ©лЎќ 저장" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "мћ¬мѓќ 중에 л‚ґл ¤л°›мќЂ мЉ¤нЉёл¦ј лЄ©лЎќмќ„ InputStream Adaptiveмќ м‚¬мљ©мћђ лЌ°мќґн„° нЏґлЌ”м—ђ 저장합니다." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "лќјмќґм„ мЉ¤ лЌ°мќґн„° 저장" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "м€лҐј 들어 초기 лЌ°мќґн„°, м±Њл¦°м§Ђ лЌ°мќґн„° л°Џ мќ‘л‹µ лЌ°мќґн„°м™Ђ к°™мќЂ лќјмќґм„ мЉ¤ 데이터를 Kodi лЌ°мќґн„° нЏґлЌ”мќ \"cdm\" нЏґлЌ”м—ђ 저장합니다." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "мµњм†ЊлЊЂм—­нЏ­(Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "мµњлЊЂлЊЂм—­нЏ­(Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "ліµнён™”кё° кІЅлЎњ" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "мќјл° ліµнён™”кё°мќ мµњлЊЂ н•ґмѓЃлЏ„" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "мЉ¤нЉёл¦јм„ нѓќ" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "лЇёл””м–ґ" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "ліґм•€ ліµнён™”кё°мќ мµњлЊЂ н•ґмѓЃлЏ„" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "HDCP설정을 무시" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "화면해상도를 무시" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "кіµк°њ м „ кё°лЉҐ н™њм„±н™”" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "к°ЂлЉҐн•л©ґ ліґм•€ ліµнён™”кё° 사용 м•ЉмќЊ" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "мµњлЊЂ" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "мћђлЏ™мњјлЎњ мЉ¤нЉёл¦ј м„ нѓќ" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "м€лЏ™мњјлЎњ лЄЁл“  мЉ¤нЉёл¦ј м„ нѓќ" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "м€лЏ™мњјлЎњ л№„л””м¤ мЉ¤нЉёл¦ј м„ нѓќ" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "м€лЏ™мњјлЎњ л№„л””м¤ мЉ¤нЉёл¦ј м„ нѓќ" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "л№„л””м¤ + 자막" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "л№„л””м¤ + 자막" diff --git a/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po b/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po index 79c8670e7..abc12a029 100644 --- a/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Lithuanian \n" "Language: lt_lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po b/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po index 8a74761cc..3b4f53823 100644 --- a/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Latvian \n" "Language: lv_lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream klients adaptД«vДЃm straumД“m" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "InputStream klients adaptД«vДЃm straumД“m" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "VispДЃrД«gie" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" +msgstr "Eksperts" + +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Visi" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Audio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Video" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" msgstr "" -msgctxt "#30151" +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Min. caurlaidspД“ja (biti sekundД“)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Maks. caurlaidspД“ja (biti sekundД“)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "CeДјЕЎ uz dekoderi" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Maks. galvenДЃ dekodera izЕЎД·irtspД“ja" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Straumes izvД“le" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Multimedija" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Maks. droЕЎДЃ dekodera izЕЎД·irtspД“ja" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "IgnorД“t HDCP statusu" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "IgnorД“t ekrДЃna izЕЎД·irtspД“ju" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "IespД“jot pirmsizlaides funkcijas" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Ja iespД“jams, neizmantot droЕЎo dekoderi" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Maks" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "AutomДЃtiski izvД“lД“ties straumes" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "ManuДЃli IzvД“lД“ties visas straumes" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "ManuДЃli izvД“lД“ties video straumi" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + Subtitri" diff --git a/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po b/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po index 79a97321e..40245dfa9 100644 --- a/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Malayalam (India) \n" "Language: ml_in\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po b/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po index 20d36ae43..84736bb6f 100644 --- a/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Mongolian \n" "Language: mn_mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po b/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po index 0c9b98a91..10c8bbfc4 100644 --- a/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Maltese \n" "Language: mt_mt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po b/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po index 340a72d27..9d33d5a15 100644 --- a/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Burmese \n" "Language: my_mm\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po b/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po index 764c9dc12..2720351b5 100644 --- a/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Norwegian BokmГҐl \n" "Language: nb_no\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po b/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po index 17b37a076..34844cde5 100644 --- a/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: Dutch\n" -"Language: nl\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Robin \n" +"Language-Team: Dutch \n" +"Language: nl_nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "InputStream client voor adaptive streams" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "Algemeen" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "Minimum bandbreedte (bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Maximum bandbreedte (bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Decrypter-pad" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Maximum resolutie algemene decoder" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Streamselectie" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Media" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Maximum resolutie beveiligde decoder" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Negeer HDCP-status" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Negeer schermresolutie" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Expert" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Pre-release features inschakelen" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "Max" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" - -msgctxt "#30155" -msgid "Automatically select streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" +msgid "Audio / Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Alles" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "Audio" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" +msgid "Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video + ondertiteling" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Minimum bandbreedte (bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Maximum bandbreedte (bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Decrypter-pad" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Maximum resolutie algemene decoder" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Streamselectie" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Media" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Maximum resolutie beveiligde decoder" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Negeer HDCP-status" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Negeer schermresolutie" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Pre-release features inschakelen" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Beveiligde decoder niet gebruiken indien mogelijk" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Max" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Automatisch streams selecteren" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Handmatig alle streams selecteren" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Handmatig videostream selecteren" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + ondertiteling" diff --git a/inputstream.adaptive/resources/language/resource.language.os_os/strings.po b/inputstream.adaptive/resources/language/resource.language.os_os/strings.po index c90420fd4..ab1fdd9d4 100644 --- a/inputstream.adaptive/resources/language/resource.language.os_os/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.os_os/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Ossetian \n" "Language: os_os\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po b/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po index 91431c2b3..4ebc78cf6 100644 --- a/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-16 15:29+0000\n" -"Last-Translator: Marek Adamski \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Christian Gade \n" "Language-Team: Polish \n" "Language: pl_pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -21,112 +21,396 @@ msgstr "Klient InputStream dla strumieni adaptacyjnych" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "Klient InputStream dla strumieni adaptacyjnych" +msgstr "Klient InputStream dla strumieni adaptacyjnych. ObsЕ‚ugiwane sД… popularne protokoЕ‚y przesyЕ‚ania strumieniowego, takie jak MPEG-DASH, HLS i Microsoft Smooth Streaming.[CR][CR]Dodatek obsЕ‚uguje rГіwnieЕј strumienie chronione DRM, takie jak Google Widevine, Microsoft PlayReady i inne.[CR][CR] ]Dokumentacja znajduje siД™ na stronie: https://github.com/xbmc/inputstream.adaptive" +#. Category title msgctxt "#30100" msgid "General" msgstr "GЕ‚Гіwne" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "Min. przepustowoЕ›Д‡ (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "Minimalna przepustowoЕ›Д‡ (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Maks. przepustowoЕ›Д‡ (Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "Maksymalna przepustowoЕ›Д‡ (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Lokalizacja dekodera" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Ustala limit pasma, ktГіrego nie naleЕјy przekraczaД‡ przy strumieniach audio/wideo. Ustaw na 0, aby go wyЕ‚Д…czyД‡." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Maks. rozdzielczoЕ›Д‡ ogГіlnego dekodera" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "WybГіr strumienia" +msgid "Maximum resolution" +msgstr "Maksymalna rozdzielczoЕ›Д‡" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Media" +msgid "Type of media streams played" +msgstr "Typ odtwarzanych strumieni multimedialnych" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Maks. rozdzielczoЕ›Д‡ zabezpieczonego dekodera" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "ZastД…p status HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "Maksymalna rozdzielczoЕ›Д‡ dla video z DRM" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Zignoruj rozdzielczoЕ›Д‡ ekranu" +msgid "Ignore screen resolution" +msgstr "Ignoruj rozdzielczoЕ›Д‡ ekranu" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Po wЕ‚Д…czeniu tej opcji rozdzielczoЕ›Д‡ ekranu (lub rozmiar okna w trybie okienkowym) nie bД™dzie juЕј brana pod uwagД™ przy wyborze najlepszej rozdzielczoЕ›ci strumienia wideo podczas uruchamiania i odtwarzania wideo." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "RД™czny tryb wyboru strumienia" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "OkreЕ›la, ktГіre rodzaje strumieni majД… byД‡ dostД™pne do rД™cznego wyboru w ustawieniach OSD Kodi podczas odtwarzania." +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Eksperckie" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "WЕ‚Д…cz funkcje wydaЕ„ niestabilnych" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "Nie uЕјywaj bezpiecznego dekodera, jeЕ›li to moЕјliwe" +msgid "Try avoiding the use of secure decoder" +msgstr "SprГіbuj uniknД…Д‡ uЕјywania bezpiecznego dekodera" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "NiektГіre urzД…dzenia z systemem Android zdefiniowanym jako Widevine L1, mogД… nie dziaЕ‚aД‡ prawidЕ‚owo, co moЕјe skutkowaД‡ czarnym ekranem podczas odtwarzania. W takim przypadku sprГіbuj wЕ‚Д…czyД‡ tД™ funkcjД™." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "Strumienie audio / wideo" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Wszystkie" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "Audio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Wideo" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Strumienie wideo" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "Wideo / Napisy" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "StrumieЕ„ adaptacyjny" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "Widevine DRM" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "OSTRZEЕ»ENIE: To jest funkcja TESTOWA, moЕјe nie dziaЕ‚aД‡ odpowiednio i moЕјe siД™ zmieniД‡ w przyszЕ‚ych wersjach." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Automatycznie okreЕ›la poczД…tkowД… przepustowoЕ›Д‡" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "JeЕ›li jest wЕ‚Д…czona, przepustowoЕ›Д‡ zostanie okreЕ›lona na podstawie pierwszego pobrania, jednak moЕјe nie byД‡ dokЕ‚adna. JeЕ›li jakoЕ›Д‡ wideo na poczД…tku odtwarzania jest zbyt niska sprГіbuj jД… wyЕ‚Д…czyД‡." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "PoczД…tkowa przepustowoЕ›Д‡ (Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "OkreЕ›la poczД…tkowД… przepustowoЕ›Д‡, gdy nie moЕјe byД‡ ona okreЕ›lona automatycznie. Ta wartoЕ›Д‡ moЕјe zostaД‡ zastД…piona przez ustawienie minimalnej przepustowoЕ›ci." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Ignoruj status HDCP" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "NiektГіre filmy HD / UHD chronione przez DRM mogД… byД‡ odtwarzane tylko wtedy, gdy stan HDCP jest ignorowany." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Typ wyboru strumienia" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Ustawienie sposobu wyboru jakoЕ›ci strumieni audio/wideo podczas odtwarzania. To ustawienie moЕјe byД‡ nadpisane przez uЕјywany dodatek wideo. Zobacz Wiki, aby uzyskaД‡ wiД™cej informacji." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Adaptacyjny (domyЕ›lnie)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "RД™czne OSD" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "StaЕ‚a rozdzielczoЕ›Д‡" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Pytaj o jakoЕ›Д‡" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Testowy" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "Czas trwania bufora (sek.)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "Maksymalny czas trwania bufora (s)" -msgctxt "#30150" -msgid "Max" -msgstr "Maks." +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Ignoruj zmiany rozdzielczoЕ›ci ekranu" -msgctxt "#30151" +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Po wЕ‚Д…czeniu tej opcji rozdzielczoЕ›Д‡ ekranu (lub rozmiar okna w trybie okienkowym) nie bД™dzie juЕј brana pod uwagД™ przy wyborze najlepszej rozdzielczoЕ›ci strumienia wideo podczas odtwarzania." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "ЕљcieЕјka dekodera" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Automatycznie" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Automatycznie wybieraj strumienie" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "RД™cznie wybieraj wszystkie strumienie" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "Wszystkie" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "WybГіr strumienia wideo" -msgctxt "#30159" -msgid "Video" -msgstr "Wideo" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "StrumieЕ„ wideo {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "Tryb testowy" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "PrzeЕ‚Д…czanie wedЕ‚ug segmentГіw" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segmenty" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Nadpisywanie ustawieЕ„" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Rejestrowanie bЕ‚Д™dГіw" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Zapisz manifesty strumieniowe" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Zapisuje manifesty strumienia pobrane podczas odtwarzania w folderze danych uЕјytkownika InputStream Adaptive." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Zapisz dane licencji" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Zapisuje dane licencji na przykЕ‚ad: dane poczД…tkowe, dane wyzwania i dane odpowiedzi, w folderze \"cdm\" folderu danych Kodi." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Min. przepustowoЕ›Д‡ (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Maks. przepustowoЕ›Д‡ (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Lokalizacja dekodera" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Maks. rozdzielczoЕ›Д‡ ogГіlnego dekodera" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "WybГіr strumienia" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Media" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Maks. rozdzielczoЕ›Д‡ zabezpieczonego dekodera" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "ZastД…p status HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Zignoruj rozdzielczoЕ›Д‡ ekranu" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "WЕ‚Д…cz funkcje wydaЕ„ niestabilnych" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "Nie uЕјywaj bezpiecznego dekodera, jeЕ›li to moЕјliwe" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Maks." + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Automatycznie wybieraj strumienie" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "RД™cznie wybieraj wszystkie strumienie" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "RД™cznie wybieraj strumieЕ„ wideo" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "RД™cznie wybieraj strumieЕ„ wideo" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Wideo + napisy" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Wideo + napisy" diff --git a/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po b/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po index b503db4a0..3604e0399 100644 --- a/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po @@ -4,125 +4,325 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Portuguese (Brazil) \n" "Language: pt_br\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "Cliente InputStream para transmissГµes adaptГЎveis" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "Cliente InputStream para transmissГµes adaptГЎveis. HГЎ suporte para protocolos de streaming comuns, como MPEG-DASH, HLS e Microsoft Smooth Streaming.[CR][CR]O addon tambГ©m oferece suporte a transmissГµes protegidas por DRM, como Google Widevine, Microsoft PlayReady e outros.[CR][CR]Para obter a documentaГ§ГЈo, visite: https://github.com/xbmc/inputstream.adaptive" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "Geral" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" +msgid "Minimum bandwidth (Kbps)" +msgstr "Largura de banda mГ­nima (Kbps)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" +msgid "Maximum bandwidth (Kbps)" +msgstr "Largura de banda mГЎxima (Kbps)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Estabelece o limite de largura de banda que nГЈo deve ser excedido com as transmissГµes de ГЎudio/vГ­deo. Defina como 0 para desativГЎ-lo." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" +msgid "Maximum resolution" +msgstr "ResoluГ§ГЈo mГЎxima" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "" +msgid "Type of media streams played" +msgstr "Tipo de transmissГµes de mГ­dia reproduzidas" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" +msgid "Maximum resolution for DRM videos" +msgstr "ResoluГ§ГЈo mГЎxima para vГ­deos com DRM" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "" +msgid "Ignore screen resolution" +msgstr "Ignorar a resoluГ§ГЈo da tela" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Se ativada, a resoluГ§ГЈo da tela (ou o tamanho da janela quando estiver no modo de janela) nГЈo serГЎ mais considerada ao selecionar a melhor resoluГ§ГЈo de fluxo de vГ­deo quando o vГ­deo for iniciado e durante a reproduГ§ГЈo." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Modo de seleГ§ГЈo manual de transmissГЈo" +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "Define o tipo de transmissГµes a ser disponibilizadas para seleГ§ГЈo manual nas configuraГ§Гµes do OSD do Kodi durante a reproduГ§ГЈo." + +#. Category title msgctxt "#30120" msgid "Expert" -msgstr "" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "" +msgstr "Expert" +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" +msgid "Try avoiding the use of secure decoder" +msgstr "Tente evitar o uso de um decodificador seguro" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "Alguns dispositivos Android, definidos como Widevine L1, podem nГЈo funcionar corretamente, o que pode resultar em uma tela preta durante a reproduГ§ГЈo. Nesse caso, tente ativГЎ-lo." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "TransmissГµes de ГЎudio/vГ­deo" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Tudo" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "ГЃudio" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "VГ­deo" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "TransmissГµes de vГ­deo" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "VГ­deo / Legendas" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "TransmissГЈo adaptativa" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "DRM Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "AVISO: este Г© um recurso de TESTE, pode nГЈo funcionar adequadamente e pode ser alterado em versГµes futuras." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Determinar automaticamente a largura de banda inicial" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "Se ativado, a largura de banda serГЎ determinada pelo primeiro download, mas pode nГЈo ser exata. Se a qualidade do vГ­deo no inГ­cio da reproduГ§ГЈo for muito baixa, tente desativГЎ-la." -msgctxt "#30150" -msgid "Max" +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Largura de banda inicial (Kbps)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "Define a largura de banda inicial quando ela nГЈo pode ser determinada automaticamente. Esse valor pode ser substituГ­do pela configuraГ§ГЈo de largura de banda mГ­nima." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Ignorar o status do HDCP" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "Alguns vГ­deos HD / UHD protegidos por DRM sГі poderГЈo ser reproduzidos se o status HDCP for ignorado." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "Tipo de seleГ§ГЈo de transmissГЈo" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Define como a qualidade das transmissГµes de ГЎudio/vГ­deo serГЎ escolhida durante a reproduГ§ГЈo. Essa configuraГ§ГЈo pode ser substituГ­da pelo addon de vГ­deo usado. Consulte a Wiki para obter mais informaГ§Гµes." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Adaptativo (padrГЈo)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "OSD manual" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "ResoluГ§ГЈo fixa" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Pergunte sobre a qualidade" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Teste" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "DuraГ§ГЈo garantida do buffer (seg)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "DuraГ§ГЈo mГЎxima do buffer (seg)" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Ignorar alteraГ§ГЈo na resoluГ§ГЈo da tela" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Se ativada, a resoluГ§ГЈo da tela (ou o tamanho da janela quando estiver no modo de janela) nГЈo serГЎ mais considerada ao selecionar a melhor resoluГ§ГЈo da transmissГЈo de vГ­deo durante a reproduГ§ГЈo." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "Caminho do decodificador" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" msgstr "" -msgctxt "#30151" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" -msgstr "" +msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" -msgstr "" +msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" -msgstr "" +msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" -msgstr "" +msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" -msgstr "" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "TransmissГЈo de vГ­deo {codec} {qualidade}" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "Modo de teste" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Trocar por segmentos" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Segmentos" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "configuraГ§Гµes override" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Registro de depuraГ§ГЈo" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Salvar manifestos da transmissГЈo" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Salva os manifestos da transmissГЈo baixada durante a reproduГ§ГЈo na pasta de dados do usuГЎrio do InputStream Adaptive." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Salvar dados da licenГ§a" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Salva os dados da licenГ§a, por exemplo: dados iniciais, dados de desafio e dados de resposta, na pasta \"cdm\" da pasta de dados do Kodi." diff --git a/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po b/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po index c272df27b..1228ffc7c 100644 --- a/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Portuguese (Portugal) \n" "Language: pt_pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.ro_md/strings.po b/inputstream.adaptive/resources/language/resource.language.ro_md/strings.po deleted file mode 100644 index 621881bce..000000000 --- a/inputstream.adaptive/resources/language/resource.language.ro_md/strings.po +++ /dev/null @@ -1,128 +0,0 @@ -# Kodi Media Center language file -# Addon Name: Inputstream.adaptive -# Addon id: inputstream.adaptive -# Addon Provider: peak3d -msgid "" -msgstr "" -"Language-Team: none\n" -"Language: ro_md\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 1 : 2);\n" - -msgctxt "Addon Summary" -msgid "InputStream client for adaptive streams" -msgstr "" - -msgctxt "Addon Description" -msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" - -msgctxt "#30100" -msgid "General" -msgstr "" - -# The minimum bandwidth which should not be deceeded. -msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" - -# The maximum bandwidth which should not be exceeded. 0=unlimited -msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" - -# Absolute path to the folder containing the decrypters -msgctxt "#30103" -msgid "Decrypter path" -msgstr "" - -# Maximum Resolution -msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" - -msgctxt "#30112" -msgid "Media" -msgstr "" - -# Maximum allowed resolution if decoded through secure path -msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" - -# Do not respect display resolution when selecting streams -msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "" - -msgctxt "#30120" -msgid "Expert" -msgstr "" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "" - -msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" - -msgctxt "#30150" -msgid "Max" -msgstr "" - -msgctxt "#30151" -msgid "480p" -msgstr "" - -msgctxt "#30152" -msgid "640p" -msgstr "" - -msgctxt "#30153" -msgid "720p" -msgstr "" - -msgctxt "#30154" -msgid "1080p" -msgstr "" - -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" - -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" - -msgctxt "#30157" -msgid "All" -msgstr "" - -msgctxt "#30158" -msgid "Audio" -msgstr "" - -msgctxt "#30159" -msgid "Video" -msgstr "" - -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" - -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po b/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po index 092ad9888..06cc6f97b 100644 --- a/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po @@ -4,13 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Last-Translator: tmihai20\n" -"Language-Team: Romanian (Romania)\n" -"Language: ro\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Romanian \n" +"Language: ro_ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -20,110 +23,377 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "General" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "LДѓИ›imea minimДѓ de bandДѓ (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "LДѓИ›imea maximДѓ de bandДѓ nu ar trebui depДѓИ™itДѓ. 0=nelimitatДѓ" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Calea absolutДѓ cДѓtre directorul care conИ›ine decriptorii" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Rezolution maximДѓ" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Selectarea fluxului" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Media" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "RezoluИ›ia maximДѓ admisДѓ cu decodare printr-o cale sigurДѓ" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "SelectaИ›i fluxurile fДѓrДѓ a respecta statusul HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Nu respectaИ›i rezoluИ›ia de afiИ™are la selectarea fluxurilor" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Expert" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "ActiveazДѓ caracteristici experimentale" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "Maxim" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" - -msgctxt "#30155" -msgid "Automatically select streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" +msgid "Audio / Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Toate" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "Audio" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" +msgid "Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video И™i subtitrДѓri" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "LДѓИ›imea minimДѓ de bandДѓ (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "LДѓИ›imea maximДѓ de bandДѓ nu ar trebui depДѓИ™itДѓ. 0=nelimitatДѓ" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Calea absolutДѓ cДѓtre directorul care conИ›ine decriptorii" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Rezolution maximДѓ" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Selectarea fluxului" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Media" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "RezoluИ›ia maximДѓ admisДѓ cu decodare printr-o cale sigurДѓ" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "SelectaИ›i fluxurile fДѓrДѓ a respecta statusul HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Nu respectaИ›i rezoluИ›ia de afiИ™are la selectarea fluxurilor" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "ActiveazДѓ caracteristici experimentale" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Maxim" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video И™i subtitrДѓri" diff --git a/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po b/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po index 6aa42c5a1..4da767996 100644 --- a/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po @@ -5,128 +5,412 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-16 15:29+0000\n" -"Last-Translator: Dmitry Petrov \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Christian Gade \n" "Language-Team: Russian \n" "Language: ru_ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "InputStream клиент для адаптивных трансляций" +msgstr "Клиент InputStream для адаптивных потоков" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "InputStream клиент для адаптивных трансляций" +msgstr "Клиент InputStream для адаптивных потоков. Поддерживаются такие распространенные потоковые протоколы, как MPEG-DASH, HLS Рё Microsoft Smooth Streaming.[CR][CR]Дополнение также поддерживает потоки, защищенные DRM, такие как Google Widevine, Microsoft PlayReady Рё РґСЂСѓРіРёРµ.[CR][CR]Для получения документации посетите: https://github.com/xbmc/inputstream.adaptive" +#. Category title msgctxt "#30100" msgid "General" msgstr "Общие" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "РњРёРЅ. пропускная способность (Бит/СЃ)" +msgid "Minimum bandwidth (Kbps)" +msgstr "Минимальная скорость (РєР±РёС‚/СЃ)" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Макс. пропускная способность (Бит/СЃ)" +msgid "Maximum bandwidth (Kbps)" +msgstr "Максимальная скорость (РєР±РёС‚/СЃ)" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Путь Рє декодеру" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "Устанавливает ограничение скорости, котороя РЅРµ должна быть превышена для аудио/ видеопотоков. Установите значение 0, чтобы отключить это ограничение." -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Макс. разрешение общего декодера" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "Выбор потока" +msgid "Maximum resolution" +msgstr "Максимальное разрешение" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Медиа" +msgid "Type of media streams played" +msgstr "РўРёРї РІРѕСЃРїСЂРѕРёР·РІРѕРґРёРјРѕРіРѕ медиапотока" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Макс. разрешение защищенного декодера" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Переопределить статус HDCP" +msgid "Maximum resolution for DRM videos" +msgstr "Максимальное разрешение для DRM-видео" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" msgstr "Ргнорировать разрешение экрана" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "Если включено, разрешение экрана (или размер РѕРєРЅР° РІ РѕРєРѕРЅРЅРѕРј режиме) больше РЅРµ будет учитываться РїСЂРё выборе оптимального разрешения видеопотока РїСЂРё запуске Рё воспроизведении видео." + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "Режим выбора потока вручную" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "Определяет доступный РІРѕ время воспроизведения для ручного выбора РІ настройках Kodi OSD тип потоков." + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Экспертные" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Включить предрелизные возможности" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "РќРµ использовать защищеный декодер если РІРѕР·РјРѕР¶РЅРѕ" +msgid "Try avoiding the use of secure decoder" +msgstr "Старайтесь РЅРµ использовать безопасный декодер" + +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "РќР° некоторых Android-устройствах, определяемых как Widevine L1, может работать некорректно Рё может привести Рє появлению черного экрана РІРѕ время воспроизведения. Р’ этом случае попробуйте включить его." + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "РђСѓРґРёРѕ / Видео потоки" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "Р’СЃРµ" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "РђСѓРґРёРѕ" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "Видео" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "Видео потоки" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "Видео / Субтитры" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "Адаптивный поток" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "УЦП Widevine" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "Р’РќРРњРђРќРР•: Тестовая функция Рё может РЅРµ работать должным образом или измениться РІ будущих версиях." + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "Автоматическое определение начальной полосы пропускания" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "Если включено, пропускная способность будет определяться РїРѕ первой загрузке Рё может быть неточной. Если качество видео РІ начале воспроизведения слишком РЅРёР·РєРѕРµ, попробуйте отключить эту функцию." + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "Начальная пропускная способность (РљР±РёС‚/СЃ)" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "Определяет начальную полосу пропускания, если РѕРЅР° РЅРµ может быть определена автоматически. Это значение может быть отменено настройкой минимальной полосы пропускания." + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "Ргнорировать статус HDCP" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "Некоторые защищенные DRM HD / UHD видео РјРѕРіСѓС‚ воспроизводиться только РєРѕРіРґР° статус HDCP игнорируется." + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "РўРёРї выбора потоков" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "Установите, как будет выбираться качество аудио- Рё видеопотоков РїСЂРё воспроизведении. Эта настройка может быть переопределена используемым видеодополнением. Дополнительные сведения СЃРј. РІ Wiki." + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "Адаптивный (РїРѕ умолчанию)" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "Ручной режим экрана" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "Фиксированное разрешение" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "Спрашивать Рѕ качестве" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "Тест" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "Гарантированная длительность буфера (сек)" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "Максимальная длительность буфера (сек)" -msgctxt "#30150" -msgid "Max" -msgstr "Макс" +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "Ргнорировать изменение разрешения экрана" -msgctxt "#30151" +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "Если включено, разрешение экрана (или размер РѕРєРЅР° РІ РѕРєРѕРЅРЅРѕРј режиме) больше РЅРµ будет учитываться РїСЂРё выборе оптимального разрешения видеопотока РІРѕ время воспроизведения." + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "Путь Рє дешифратору" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "Авто" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "480p" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "640p" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "720p" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "1080p" -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "Автоматически выбирать потоки" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "2K" -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "Выбирать РІСЃРµ потоки вручную" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "1440p" -msgctxt "#30157" -msgid "All" -msgstr "Р’СЃРµ" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "4K" -msgctxt "#30158" -msgid "Audio" -msgstr "РђСѓРґРёРѕ" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "Выберите видеопоток" -msgctxt "#30159" -msgid "Video" -msgstr "Видео" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "Видеопоток {codec} {quality}" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "Тестовый режим" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "Переключение между сегментами" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "Сегменты" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "Переопределить настройки" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "Журнал отладки" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "Сохранять манифесты потоков" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "Сохранять манифесты потока, загруженные РІРѕ время воспроизведения, РІ папке пользовательских данных InputStream Adaptive." + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "Сохранять данные лицензии" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "Сохранять данные лицензии, например: начальные данные, данные вызова Рё данные ответа, РІ папке \"cdm\" РІ каталоге данных Kodi." + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "РњРёРЅ. пропускная способность (Бит/СЃ)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Макс. пропускная способность (Бит/СЃ)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Путь Рє декодеру" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Макс. разрешение РѕСЃРЅРѕРІРЅРѕРіРѕ декодера" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "Выбор потока" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Медиа" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Макс. разрешение защищенного декодера" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Переопределить статус HDCP" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ргнорировать разрешение экрана" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Включить предрелизные возможности" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "РќРµ использовать защищеный декодер если РІРѕР·РјРѕР¶РЅРѕ" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Макс" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "Автоматически выбирать потоки" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "Выбирать РІСЃРµ потоки вручную" # Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "Вручную выбрать видео поток" +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "Вручную выбрать видео поток" -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Видео + субтитры" +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Видео + субтитры" diff --git a/inputstream.adaptive/resources/language/resource.language.scn/strings.po b/inputstream.adaptive/resources/language/resource.language.scn/strings.po deleted file mode 100644 index c65ff004c..000000000 --- a/inputstream.adaptive/resources/language/resource.language.scn/strings.po +++ /dev/null @@ -1,128 +0,0 @@ -# Kodi Media Center language file -# Addon Name: Inputstream.adaptive -# Addon id: inputstream.adaptive -# Addon Provider: peak3d -msgid "" -msgstr "" -"Language-Team: none\n" -"Language: scn\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" - -msgctxt "Addon Summary" -msgid "InputStream client for adaptive streams" -msgstr "" - -msgctxt "Addon Description" -msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" - -msgctxt "#30100" -msgid "General" -msgstr "" - -# The minimum bandwidth which should not be deceeded. -msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "" - -# The maximum bandwidth which should not be exceeded. 0=unlimited -msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "" - -# Absolute path to the folder containing the decrypters -msgctxt "#30103" -msgid "Decrypter path" -msgstr "" - -# Maximum Resolution -msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "" - -msgctxt "#30112" -msgid "Media" -msgstr "" - -# Maximum allowed resolution if decoded through secure path -msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "" - -# Do not respect display resolution when selecting streams -msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "" - -msgctxt "#30120" -msgid "Expert" -msgstr "" - -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "" - -msgctxt "#30122" -msgid "Don't use secure decoder if possible" -msgstr "" - -msgctxt "#30150" -msgid "Max" -msgstr "" - -msgctxt "#30151" -msgid "480p" -msgstr "" - -msgctxt "#30152" -msgid "640p" -msgstr "" - -msgctxt "#30153" -msgid "720p" -msgstr "" - -msgctxt "#30154" -msgid "1080p" -msgstr "" - -msgctxt "#30155" -msgid "Automatically select streams" -msgstr "" - -msgctxt "#30156" -msgid "Manually select all streams" -msgstr "" - -msgctxt "#30157" -msgid "All" -msgstr "" - -msgctxt "#30158" -msgid "Audio" -msgstr "" - -msgctxt "#30159" -msgid "Video" -msgstr "" - -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" -msgstr "" - -msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po b/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po index 251d0f6ca..8866a1f75 100644 --- a/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Sinhala (Sri Lanka) \n" "Language: si_lk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po b/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po index bb1f3661f..2e3fb0e39 100644 --- a/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po @@ -4,13 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Last-Translator: Matej MoЕЎko \n" -"Language-Team: Slovak\n" -"Language: sk_SK\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Patrik Е paЕ€o \n" +"Language-Team: Slovak \n" +"Language: sk_sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -20,110 +23,377 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "VЕЎeobecnГ©" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "Min. Е Г­rka PГЎsma (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "Max. Е Г­rka PГЎsma (Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "Cesta k DekГіderu" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "Max. RozlГ­ЕЎenie ZГЎkladnГ©ho DekГіdera" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "VГЅber Videostreamu" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "MГ©diГЎ" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "Max. RozlГ­ЕЎenie bezpeДЌnГ©ho dekГіdera" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "ObГ­sЕҐ HDCP status" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "IgnorovaЕҐ RozlГ­ЕЎenie Obrazovky" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "ExpertnГ©" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "PovoliЕҐ ExperimentГЎlne Funkcie" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "Maximum" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" - -msgctxt "#30155" -msgid "Automatically select streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" +msgid "Audio / Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "VЕЎetko" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" -msgstr "Zvuk" +msgstr "Audio" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" +msgid "Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video + Titulky" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "Min. Е Г­rka PГЎsma (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "Max. Е Г­rka PГЎsma (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "Cesta k DekГіderu" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "Max. RozlГ­ЕЎenie ZГЎkladnГ©ho DekГіdera" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "VГЅber Videostreamu" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "MГ©diГЎ" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "Max. RozlГ­ЕЎenie bezpeДЌnГ©ho dekГіdera" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "ObГ­sЕҐ HDCP status" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "IgnorovaЕҐ RozlГ­ЕЎenie Obrazovky" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "PovoliЕҐ ExperimentГЎlne Funkcie" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Maximum" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + Titulky" diff --git a/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po b/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po index 56add964f..c070ae9f2 100644 --- a/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Albanian \n" "Language: sq_al\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po b/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po index 3a6d4d6ee..01a1c37fc 100644 --- a/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Serbian \n" "Language: sr_rs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po b/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po index 41afbe2ae..62ef59864 100644 --- a/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" -"Language: sr_Latn\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Serbian (Latin script) \n" +"Language: sr_rs@latin\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po b/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po index 2f5d34511..09517c402 100644 --- a/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: Swedish (Sweden)\n" -"Language: sv_SE\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Swedish \n" +"Language: sv_se\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,377 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "AllmГ¤nt" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" -msgstr "LГ¤gsta bandbredd (Bit/s)" +msgid "Minimum bandwidth (Kbps)" +msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" -msgstr "HГ¶gsta bandbredd (Bit/s)" +msgid "Maximum bandwidth (Kbps)" +msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" -msgstr "DekrypteringssГ¶kvГ¤g" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." +msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "HГ¶gsta upplГ¶sning fГ¶r allmГ¤n avkodare" - -msgctxt "#30111" -msgid "Stream Selection" -msgstr "StrГ¶mval" +msgid "Maximum resolution" +msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" -msgstr "Media" +msgid "Type of media streams played" +msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "HГ¶gsta upplГ¶sning fГ¶r sГ¤ker avkodare" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" -msgstr "Г…sidosГ¤tt HDCP-status" +msgid "Maximum resolution for DRM videos" +msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" -msgstr "Ignorera skГ¤rmupplГ¶sningen" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "Expert" -msgctxt "#30121" -msgid "Enable Pre-Release Features" -msgstr "Aktivera fГ¶rhandsutgivningsfunktioner" - +# empty string with id 30121 msgctxt "#30122" -msgid "Don't use secure decoder if possible" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "HГ¶gsta" - -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" - -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" - -msgctxt "#30155" -msgid "Automatically select streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" +msgid "Audio / Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Alla" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "Ljud" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" +msgid "Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video + Undertexter" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "LГ¤gsta bandbredd (Bit/s)" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "HГ¶gsta bandbredd (Bit/s)" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "DekrypteringssГ¶kvГ¤g" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "HГ¶gsta upplГ¶sning fГ¶r allmГ¤n avkodare" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "StrГ¶mval" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "Media" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "HГ¶gsta upplГ¶sning fГ¶r sГ¤ker avkodare" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "Г…sidosГ¤tt HDCP-status" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "Ignorera skГ¤rmupplГ¶sningen" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "Aktivera fГ¶rhandsutgivningsfunktioner" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "HГ¶gsta" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + Undertexter" diff --git a/inputstream.adaptive/resources/language/resource.language.szl/strings.po b/inputstream.adaptive/resources/language/resource.language.szl/strings.po index f3e3f9189..e36ac53e9 100644 --- a/inputstream.adaptive/resources/language/resource.language.szl/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.szl/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Silesian \n" "Language: szl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po b/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po index 3372625bc..a8dfef917 100644 --- a/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Tamil (India) \n" "Language: ta_in\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po b/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po index bf2252e22..21b2fb96d 100644 --- a/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Tajik \n" "Language: tg_tj\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.th_th/strings.po b/inputstream.adaptive/resources/language/resource.language.th_th/strings.po index f9d41c5bf..026a97d0e 100644 --- a/inputstream.adaptive/resources/language/resource.language.th_th/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.th_th/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Thai \n" "Language: th_th\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po b/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po index a3ebbe766..cc3211111 100644 --- a/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Turkish \n" "Language: tr_tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po b/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po index e53a4cb12..b7ed513e9 100644 --- a/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Ukrainian \n" "Language: uk_ua\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po b/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po index a0da07881..1ece0bd0c 100644 --- a/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Uzbek \n" "Language: uz_uz\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" diff --git a/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po b/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po index 6cf39d7c3..1ad6944ab 100644 --- a/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po @@ -5,15 +5,15 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2021-08-16 15:29+0000\n" -"Last-Translator: Nguyб»…n Trung Hбє­u \n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Vietnamese \n" "Language: vi_vn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7.2\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -23,111 +23,330 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "Chung" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" msgstr "" -msgctxt "#30120" -msgid "Expert" +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +msgctxt "#30117" +msgid "Manual stream selection mode" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." msgstr "" -msgctxt "#30150" -msgid "Max" -msgstr "Tб»‘i Д‘a" - -#, fuzzy -msgctxt "#30151" -msgid "480p" -msgstr "480p" - -msgctxt "#30152" -msgid "640p" -msgstr "640p" - -msgctxt "#30153" -msgid "720p" -msgstr "720p" +#. Category title +msgctxt "#30120" +msgid "Expert" +msgstr "" -msgctxt "#30154" -msgid "1080p" -msgstr "1080p" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" +msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 msgctxt "#30156" -msgid "Manually select all streams" +msgid "Audio / Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30157" msgid "All" msgstr "Tất cбєЈ" +#. Item list value of setting with label #30112 msgctxt "#30158" msgid "Audio" msgstr "Г‚m thanh" +#. Item list value of setting with label #30112 msgctxt "#30159" msgid "Video" msgstr "Video" -# Show all video streams +#. Item list value of setting with label #30117 msgctxt "#30160" -msgid "Manually select video stream" +msgid "Video streams" msgstr "" +#. Item list value of setting with label #30112 msgctxt "#30161" -msgid "Video + Subtitles" -msgstr "Video + Phụ Д‘б»Ѓ" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" +msgid "480p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" +msgid "640p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" +msgid "720p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" +msgid "1080p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" +msgstr "" + +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" +msgstr "" + +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" +msgstr "" + +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" +msgstr "" + +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "Tб»‘i Д‘a" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "Video + Phụ Д‘б»Ѓ" diff --git a/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po b/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po index 4301a6e63..5de297ca7 100644 --- a/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po @@ -4,125 +4,413 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Chinese (China) \n" "Language: zh_cn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" -msgstr "" +msgstr "з”ЁдєЋи‡ЄйЂ‚еє”жµЃзљ„ InputStream е®ўж€·з«Ї" msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" -msgstr "" +msgstr "з”ЁдєЋи‡ЄйЂ‚еє”жµЃзљ„ InputStream е®ўж€·з«Ї" +#. Category title msgctxt "#30100" msgid "General" -msgstr "" +msgstr "еёёи§„" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." +msgstr "" + +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." msgstr "" +#. Category title msgctxt "#30120" msgid "Expert" +msgstr "дё“е®¶" + +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "е…ЁйѓЁ" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "йџійў‘" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "视频" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" +msgstr "" + +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." +msgstr "" + +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" msgstr "" -msgctxt "#30151" +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." +msgstr "" + +# The minimum bandwidth which should not be deceeded. +#~ msgctxt "#30101" +#~ msgid "Min. Bandwidth (Bit/s)" +#~ msgstr "жњЂе°Џеё¦е®Ѕпј€дЅЌ/з§’пј‰" + +# The maximum bandwidth which should not be exceeded. 0=unlimited +#~ msgctxt "#30102" +#~ msgid "Max. Bandwidth (Bit/s)" +#~ msgstr "最大带宽(位/з§’пј‰" + +# Absolute path to the folder containing the decrypters +#~ msgctxt "#30103" +#~ msgid "Decrypter path" +#~ msgstr "и§ЈеЇ†зЁ‹еєЏи·Їеѕ„" + +# Maximum Resolution +#~ msgctxt "#30110" +#~ msgid "Max. Resolution general decoder" +#~ msgstr "最大分辨率通用解码器" + +#~ msgctxt "#30111" +#~ msgid "Stream Selection" +#~ msgstr "жµЃйЂ‰ж‹©" + +#~ msgctxt "#30112" +#~ msgid "Media" +#~ msgstr "еЄ’дЅ“" + +# Maximum allowed resolution if decoded through secure path +#~ msgctxt "#30113" +#~ msgid "Max. Resolution secure decoder" +#~ msgstr "最大分辨率安全解码器" + +# Select streams without respecting HDCP status +#~ msgctxt "#30114" +#~ msgid "Override HDCP status" +#~ msgstr "覆盖 HDCP зЉ¶жЂЃ" + +# Do not respect display resolution when selecting streams +#~ msgctxt "#30115" +#~ msgid "Ignore Display Resolution" +#~ msgstr "еїЅз•Ґжѕз¤єе€†иѕЁзЋ‡" + +#~ msgctxt "#30121" +#~ msgid "Enable Pre-Release Features" +#~ msgstr "еђЇз”Ёйў„еЏ‘еёѓеЉџиѓЅ" + +#~ msgctxt "#30122" +#~ msgid "Don't use secure decoder if possible" +#~ msgstr "尽可能不使用安全解码器" + +#~ msgctxt "#30150" +#~ msgid "Max" +#~ msgstr "大" + +#~ msgctxt "#30151" +#~ msgid "480p" +#~ msgstr "480p" + +#~ msgctxt "#30152" +#~ msgid "640p" +#~ msgstr "640p" + +#~ msgctxt "#30153" +#~ msgid "720p" +#~ msgstr "720p" + +#~ msgctxt "#30154" +#~ msgid "1080p" +#~ msgstr "1080p" + +#~ msgctxt "#30155" +#~ msgid "Automatically select streams" +#~ msgstr "и‡ЄеЉЁйЂ‰ж‹©жµЃ" + +#~ msgctxt "#30156" +#~ msgid "Manually select all streams" +#~ msgstr "手动选择所有流" + +# Show all video streams +#~ msgctxt "#30160" +#~ msgid "Manually select video stream" +#~ msgstr "手动选择视频流" + +#~ msgctxt "#30161" +#~ msgid "Video + Subtitles" +#~ msgstr "视频 + 字幕" diff --git a/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po b/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po index fff412820..d80283a39 100644 --- a/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po @@ -4,12 +4,16 @@ # Addon Provider: peak3d msgid "" msgstr "" -"Language-Team: none\n" +"Report-Msgid-Bugs-To: translations@kodi.tv\n" +"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Chinese (Taiwan) \n" "Language: zh_tw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9.2\n" msgctxt "Addon Summary" msgid "InputStream client for adaptive streams" @@ -19,110 +23,306 @@ msgctxt "Addon Description" msgid "InputStream client for adaptive streams. Common streaming protocols such as MPEG-DASH, HLS and Microsoft Smooth Streaming are supported.[CR][CR]The add-on also has support for DRM protected streams, such as Google Widevine, Microsoft PlayReady and others.[CR][CR]For documentation visit: https://github.com/xbmc/inputstream.adaptive" msgstr "" +#. Category title msgctxt "#30100" msgid "General" msgstr "" -# The minimum bandwidth which should not be deceeded. +#. The minimum bandwidth which should not be deceeded msgctxt "#30101" -msgid "Min. Bandwidth (Bit/s)" +msgid "Minimum bandwidth (Kbps)" msgstr "" -# The maximum bandwidth which should not be exceeded. 0=unlimited +#. The maximum bandwidth which should not be exceeded msgctxt "#30102" -msgid "Max. Bandwidth (Bit/s)" +msgid "Maximum bandwidth (Kbps)" msgstr "" -# Absolute path to the folder containing the decrypters +#. Description of setting with label #30101, 30102 msgctxt "#30103" -msgid "Decrypter path" +msgid "Establishes the bandwidth limit not to be exceeded with the audio / video streams. Set to 0 to disable it." msgstr "" -# Maximum Resolution +# empty strings from id 30104 to 30109 +#. Maximum video resolution non-protected videos msgctxt "#30110" -msgid "Max. Resolution general decoder" -msgstr "" - -msgctxt "#30111" -msgid "Stream Selection" +msgid "Maximum resolution" msgstr "" +# empty string with id 30111 +#. Type of media streams that will be handled for the playback msgctxt "#30112" -msgid "Media" +msgid "Type of media streams played" msgstr "" -# Maximum allowed resolution if decoded through secure path +#. Maximum video resolution for DRM-protected videos msgctxt "#30113" -msgid "Max. Resolution secure decoder" -msgstr "" - -# Select streams without respecting HDCP status -msgctxt "#30114" -msgid "Override HDCP status" +msgid "Maximum resolution for DRM videos" msgstr "" +# empty string with id 30114 # Do not respect display resolution when selecting streams msgctxt "#30115" -msgid "Ignore Display Resolution" +msgid "Ignore screen resolution" +msgstr "" + +#. Description of setting with label #30115 +msgctxt "#30116" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution when video starts and while in playback." msgstr "" +msgctxt "#30117" +msgid "Manual stream selection mode" +msgstr "" + +#. Description of setting with label #30117 +msgctxt "#30118" +msgid "Defines which type of streams to make available for manual selection on Kodi OSD settings during playback." +msgstr "" + +#. Category title msgctxt "#30120" msgid "Expert" msgstr "" -msgctxt "#30121" -msgid "Enable Pre-Release Features" +# empty string with id 30121 +msgctxt "#30122" +msgid "Try avoiding the use of secure decoder" msgstr "" -msgctxt "#30122" -msgid "Don't use secure decoder if possible" +#. Description of setting with label #30122 +msgctxt "#30123" +msgid "Some Android devices defined as Widevine L1, may not work properly, which may result in a black screen during playback. In this case try to enable it." +msgstr "" + +# empty strings from id 30124 to 30155 +#. Item list value of setting with label #30117 +msgctxt "#30156" +msgid "Audio / Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30157" +msgid "All" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30158" +msgid "Audio" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30159" +msgid "Video" +msgstr "" + +#. Item list value of setting with label #30117 +msgctxt "#30160" +msgid "Video streams" +msgstr "" + +#. Item list value of setting with label #30112 +msgctxt "#30161" +msgid "Video / Subtitles" +msgstr "" + +#. Category group title +msgctxt "#30162" +msgid "Adaptive stream" +msgstr "" + +# empty strings from id 30163 to 30165 +#. Category group title +msgctxt "#30166" +msgid "DRM Widevine" +msgstr "" + +msgctxt "#30167" +msgid "WARNING: This is a TEST feature, may not work appropriately and may change on future versions." +msgstr "" + +msgctxt "#30168" +msgid "Auto determines initial bandwidth" +msgstr "" + +#. Description of setting with label #30168 +msgctxt "#30169" +msgid "If enabled, the bandwidth will be determined by the first download, however it may not be accurate. If the video quality at the start of playback is too low try disabling it." +msgstr "" + +msgctxt "#30170" +msgid "Initial bandwidth (Kbps)" +msgstr "" + +#. Description of setting with label #30170 +msgctxt "#30171" +msgid "Defines the initial bandwidth when it cannot be automatically determined. This value can be overridden by the minimum bandwidth setting." +msgstr "" + +msgctxt "#30172" +msgid "Ignore HDCP status" msgstr "" -msgctxt "#30150" -msgid "Max" +#. Description of setting with label #30172 +msgctxt "#30173" +msgid "Some DRM-protected HD / UHD videos may only be played if the HDCP status is ignored." msgstr "" -msgctxt "#30151" +#. To set the stream selection type (refer to RepresentationChooser's) +msgctxt "#30174" +msgid "Stream selection type" +msgstr "" + +#. Description of setting with label #30174 +msgctxt "#30175" +msgid "Set how the audio / video streams quality will be chosen during playback. This setting may be overridden by the video add-on used. See Wiki for more information." +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30176" +msgid "Adaptive (default)" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30177" +msgid "Manual OSD" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30178" +msgid "Fixed resolution" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30179" +msgid "Ask quality" +msgstr "" + +#. Item list value of setting with label #30174 +msgctxt "#30180" +msgid "Test" +msgstr "" + +# empty strings reserved for "stream selection types" from id 30181 to 30190 +#. Assured buffer length duration (seconds) +msgctxt "#30200" +msgid "Assured buffer duration (sec)" +msgstr "" + +#. Max buffer length duration (seconds) +msgctxt "#30201" +msgid "Maximum buffer duration (sec)" +msgstr "" + +#. Ignore screen resolution change e.g. window resize +msgctxt "#30202" +msgid "Ignore screen resolution change" +msgstr "" + +#. Description of setting with label #30202 +msgctxt "#30203" +msgid "If enabled, the screen resolution (or window size when in windowed mode) will no longer be considered when selecting the best video stream resolution while in playback." +msgstr "" + +#. Absolute path to the folder containing the DRM binary files +msgctxt "#30204" +msgid "Decrypter path" +msgstr "" + +# empty strings from id 30205 to 30209 +#. Item list value of setting with label #30110, #30113 +msgctxt "#30210" +msgid "Auto" +msgstr "" + +#. Item list value of setting with label #30110, #30113 +msgctxt "#30211" msgid "480p" msgstr "" -msgctxt "#30152" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30212" msgid "640p" msgstr "" -msgctxt "#30153" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30213" msgid "720p" msgstr "" -msgctxt "#30154" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30214" msgid "1080p" msgstr "" -msgctxt "#30155" -msgid "Automatically select streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30215" +msgid "2K" msgstr "" -msgctxt "#30156" -msgid "Manually select all streams" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30216" +msgid "1440p" msgstr "" -msgctxt "#30157" -msgid "All" +#. Item list value of setting with label #30110, #30113 +msgctxt "#30217" +msgid "4K" msgstr "" -msgctxt "#30158" -msgid "Audio" +# empty strings reserved for resolution values of id #30110, #30113, from id 30217 to 30230 +#. Dialog window to select the video stream +msgctxt "#30231" +msgid "Select video stream" msgstr "" -msgctxt "#30159" -msgid "Video" +#. Description of each list item in #30231 dialog window +#. Do not translate placeholders: {codec} {quality} +msgctxt "#30232" +msgid "Video stream {codec} {quality}" msgstr "" -# Show all video streams -msgctxt "#30160" -msgid "Manually select video stream" +#. Enum setting to set the test mode +msgctxt "#30233" +msgid "Test mode" msgstr "" -msgctxt "#30161" -msgid "Video + Subtitles" +#. Item list value of setting with label #30233 +msgctxt "#30234" +msgid "Switch by segments" +msgstr "" + +#. Stand for stream segments, referred to setting with label #30234 +msgctxt "#30235" +msgid "Segments" +msgstr "" + +#. Category group title +msgctxt "#30236" +msgid "Override settings" +msgstr "" + +#. Category group title for debug settings +msgctxt "#30237" +msgid "Debug logging" +msgstr "" + +#. Debug setting to save stream manifests +msgctxt "#30238" +msgid "Save stream manifests" +msgstr "" + +#. Description of setting with label #30238 +msgctxt "#30239" +msgid "Saves stream manifests downloaded during playback in the user data folder of InputStream Adaptive." +msgstr "" + +#. Debug setting to save license data +msgctxt "#30240" +msgid "Save license data" +msgstr "" + +#. Description of setting with label #30240 +msgctxt "#30241" +msgid "Saves the license data for example: initial data, challenge data and response data, in the \"cdm\" folder of the Kodi data folder." msgstr "" From 4821a0211db04ed1ebd6f86b5ee94c828589540d Mon Sep 17 00:00:00 2001 From: garbear Date: Fri, 17 Jan 2025 02:04:59 +0000 Subject: [PATCH 52/91] Add-on version incremented to 21.5.8 from Weblate --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 879d3345e..ba47c5b2d 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 0a6013544..2dcf1fece 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,7 @@ +v21.5.8 +- Translations updates from Weblate + - af_za, am_et, ar_sa, ast_es, az_az, be_by, bg_bg, bs_ba, ca_es, cs_cz, cy_gb, da_dk, de_de, el_gr, en_au, en_nz, en_us, eo, es_ar, es_es, es_mx, et_ee, eu_es, fa_af, fa_ir, fi_fi, fo_fo, fr_ca, fr_fr, gl_es, he_il, hi_in, hr_hr, hu_hu, hy_am, id_id, is_is, it_it, ja_jp, kn_in, ko_kr, lt_lt, lv_lv, ml_in, mn_mn, mt_mt, my_mm, nb_no, nl_nl, os_os, pl_pl, pt_br, pt_pt, ro_md, ro_ro, ru_ru, scn, si_lk, sk_sk, sq_al, sr_rs, sr_rs@latin, sv_se, szl, ta_in, tg_tj, th_th, tr_tr, uk_ua, uz_uz, vi_vn, zh_cn, zh_tw + v21.5.7 (2024-11-16) - Partial backport fix to extract kid from init data From d06b1aba8712217c8e2936509a9aa397a42bb967 Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Thu, 16 Jan 2025 18:05:15 -0800 Subject: [PATCH 53/91] [CI] Update Azure to use Omega branch --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 300fdc5ee..6be85c8a1 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -57,7 +57,7 @@ jobs: - script: | cd .. - git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git kodi + git clone --branch Omega --depth=1 https://github.com/xbmc/xbmc.git kodi cd $(Build.SourcesDirectory) mkdir build cd build From a80afebf56cbbb8287cb30fb1ba0f43231019450 Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Fri, 17 Jan 2025 13:00:32 -0800 Subject: [PATCH 54/91] Add release date to changelog for v21.5.8 --- inputstream.adaptive/changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 2dcf1fece..3eb251375 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,4 +1,4 @@ -v21.5.8 +v21.5.8 (2025-01-17) - Translations updates from Weblate - af_za, am_et, ar_sa, ast_es, az_az, be_by, bg_bg, bs_ba, ca_es, cs_cz, cy_gb, da_dk, de_de, el_gr, en_au, en_nz, en_us, eo, es_ar, es_es, es_mx, et_ee, eu_es, fa_af, fa_ir, fi_fi, fo_fo, fr_ca, fr_fr, gl_es, he_il, hi_in, hr_hr, hu_hu, hy_am, id_id, is_is, it_it, ja_jp, kn_in, ko_kr, lt_lt, lv_lv, ml_in, mn_mn, mt_mt, my_mm, nb_no, nl_nl, os_os, pl_pl, pt_br, pt_pt, ro_md, ro_ro, ru_ru, scn, si_lk, sk_sk, sq_al, sr_rs, sr_rs@latin, sv_se, szl, ta_in, tg_tj, th_th, tr_tr, uk_ua, uz_uz, vi_vn, zh_cn, zh_tw From fda408ab5bad20c2ce88275a2347e7d7050a3ff3 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 17 Jan 2025 02:10:03 +0000 Subject: [PATCH 55/91] Translated using Weblate (Serbian (Latin script)) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Persian (Iran) (fa_ir)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Chinese (Taiwan) (zh_tw)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Chinese (China) (zh_cn)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Chinese (China) (zh_cn)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Burmese (my_mm)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Vietnamese (vi_vn)) Currently translated at 6.4% (4 of 62 strings) Translated using Weblate (Vietnamese (vi_vn)) Currently translated at 6.4% (4 of 62 strings) Translated using Weblate (Uzbek (uz_uz)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Albanian (sq_al)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Ukrainian (uk_ua)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Silesian) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Turkish (tr_tr)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Thai (th_th)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Tamil (India) (ta_in)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Tajik (tg_tj)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Serbian (sr_rs)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Persian (Afghanistan) (fa_af)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Ossetian (os_os)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Sinhala (Sri Lanka) (si_lk)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Portuguese (Portugal) (pt_pt)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Portuguese (Brazil) (pt_br)) Currently translated at 96.7% (60 of 62 strings) Translated using Weblate (Portuguese (Brazil) (pt_br)) Currently translated at 96.7% (60 of 62 strings) Translated using Weblate (Norwegian BokmГҐl (nb_no)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Mongolian (mn_mn)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Maltese (mt_mt)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Malayalam (India) (ml_in)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Lithuanian (lt_lt)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Latvian (lv_lv)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Latvian (lv_lv)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Kannada (India) (kn_in)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Armenian (hy_am)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Indonesian (id_id)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Icelandic (is_is)) Currently translated at 66.1% (41 of 62 strings) Translated using Weblate (Icelandic (is_is)) Currently translated at 66.1% (41 of 62 strings) Translated using Weblate (Esperanto) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Bulgarian (bg_bg)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Bosnian (Bosnia and Herzegovina) (bs_ba)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Belarusian (be_by)) Currently translated at 1.6% (1 of 62 strings) Translated using Weblate (Belarusian (be_by)) Currently translated at 1.6% (1 of 62 strings) Translated using Weblate (Welsh (United Kingdom) (cy_gb)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Basque (Spain) (eu_es)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Azerbaijani (az_az)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Spanish (Mexico) (es_mx)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Spanish (Mexico) (es_mx)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Asturian (Spain) (ast_es)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Arabic (Saudi Arabia) (ar_sa)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Spanish (Argentina) (es_ar)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Galician (Spain) (gl_es)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (French (Canada) (fr_ca)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Finnish (fi_fi)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Czech (cs_cz)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Czech (cs_cz)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Catalan (Spain) (ca_es)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Catalan (Spain) (ca_es)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Faroese (fo_fo)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Afrikaans (South Africa) (af_za)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Estonian (et_ee)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (English (United States) (en_us)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Amharic (Ethiopia) (am_et)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (English (New Zealand) (en_nz)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (English (Australia) (en_au)) Currently translated at 0.0% (0 of 62 strings) Translated using Weblate (Danish (da_dk)) Currently translated at 14.5% (9 of 62 strings) Translated using Weblate (Danish (da_dk)) Currently translated at 14.5% (9 of 62 strings) Translated using Weblate (Hindi (India) (hi_in)) Currently translated at 8.0% (5 of 62 strings) Translated using Weblate (Swedish (sv_se)) Currently translated at 8.0% (5 of 62 strings) Translated using Weblate (Slovak (sk_sk)) Currently translated at 8.0% (5 of 62 strings) Translated using Weblate (Slovak (sk_sk)) Currently translated at 8.0% (5 of 62 strings) Translated using Weblate (Russian (ru_ru)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Russian (ru_ru)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Russian (ru_ru)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Romanian (ro_ro)) Currently translated at 8.0% (5 of 62 strings) Translated using Weblate (Polish (pl_pl)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Polish (pl_pl)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Polish (pl_pl)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Polish (pl_pl)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Dutch (nl_nl)) Currently translated at 9.6% (6 of 62 strings) Translated using Weblate (Dutch (nl_nl)) Currently translated at 9.6% (6 of 62 strings) Translated using Weblate (Korean (ko_kr)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Korean (ko_kr)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Japanese (ja_jp)) Currently translated at 8.0% (5 of 62 strings) Translated using Weblate (Italian (it_it)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Hungarian (hu_hu)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Hungarian (hu_hu)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Croatian (hr_hr)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Croatian (hr_hr)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Hebrew (Israel) (he_il)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (Hebrew (Israel) (he_il)) Currently translated at 11.2% (7 of 62 strings) Translated using Weblate (French (France) (fr_fr)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Spanish (Spain) (es_es)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Spanish (Spain) (es_es)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Spanish (Spain) (es_es)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Greek (el_gr)) Currently translated at 8.0% (5 of 62 strings) Translated using Weblate (German (de_de)) Currently translated at 100.0% (62 of 62 strings) Co-authored-by: Alexey Co-authored-by: Anonymous Co-authored-by: Christian Gade Co-authored-by: Coool (github.com/Coool) Co-authored-by: Edson Armando Co-authored-by: Frodo19 Co-authored-by: Jacek Co-authored-by: JosГ© Antonio Alvarado Co-authored-by: Kai Sommerfeld Co-authored-by: KryЕЎtof ДЊernГЅ Co-authored-by: Marek Adamski Co-authored-by: Massimo Pissarello Co-authored-by: Minho Park Co-authored-by: Nguyб»…n Trung Hбє­u Co-authored-by: Oskari Lavinto Co-authored-by: Patrik Е paЕ€o Co-authored-by: Robin Co-authored-by: Sveinn Г­ Felli Co-authored-by: Xean Co-authored-by: Yaron Shahrabani Co-authored-by: gogogogi Co-authored-by: icarok99 Co-authored-by: rimasx Co-authored-by: roliverosc Co-authored-by: skypichat Co-authored-by: taxigps Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/af_za/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/am_et/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ar_sa/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ast_es/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/az_az/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/be_by/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/bg_bg/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/bs_ba/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ca_es/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/cs_cz/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/cy_gb/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/da_dk/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/de_de/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/el_gr/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/en_au/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/en_nz/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/en_us/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/eo/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/es_ar/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/es_es/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/es_mx/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/et_ee/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/eu_es/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/fa_af/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/fa_ir/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/fi_fi/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/fo_fo/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/fr_ca/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/fr_fr/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/gl_es/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/he_il/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/hi_in/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/hr_hr/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/hu_hu/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/hy_am/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/id_id/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/is_is/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/it_it/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ja_jp/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/kn_in/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ko_kr/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/lt_lt/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/lv_lv/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ml_in/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/mn_mn/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/mt_mt/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/my_mm/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/nb_no/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/nl_nl/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/os_os/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/pl_pl/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/pt_br/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/pt_pt/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ro_ro/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ru_ru/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/si_lk/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/sk_sk/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/sq_al/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/sr_Latn/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/sr_rs/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/sv_se/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/szl/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/ta_in/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/tg_tj/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/th_th/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/tr_tr/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/uk_ua/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/uz_uz/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/vi_vn/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/zh_cn/ Translate-URL: https://kodi.weblate.cloud/projects/kodi-add-ons-videoplayer-inputstream/inputstream-adaptive/zh_tw/ Translation: Kodi add-ons: videoplayer inputstream/inputstream.adaptive --- .../resources/language/resource.language.af_za/strings.po | 2 +- .../resources/language/resource.language.am_et/strings.po | 2 +- .../resources/language/resource.language.ar_sa/strings.po | 2 +- .../resources/language/resource.language.ast_es/strings.po | 2 +- .../resources/language/resource.language.az_az/strings.po | 2 +- .../resources/language/resource.language.be_by/strings.po | 2 +- .../resources/language/resource.language.bg_bg/strings.po | 2 +- .../resources/language/resource.language.bs_ba/strings.po | 2 +- .../resources/language/resource.language.ca_es/strings.po | 2 +- .../resources/language/resource.language.cs_cz/strings.po | 2 +- .../resources/language/resource.language.cy_gb/strings.po | 2 +- .../resources/language/resource.language.da_dk/strings.po | 2 +- .../resources/language/resource.language.de_de/strings.po | 2 +- .../resources/language/resource.language.el_gr/strings.po | 2 +- .../resources/language/resource.language.en_au/strings.po | 2 +- .../resources/language/resource.language.en_nz/strings.po | 2 +- .../resources/language/resource.language.en_us/strings.po | 2 +- .../resources/language/resource.language.eo/strings.po | 2 +- .../resources/language/resource.language.es_ar/strings.po | 2 +- .../resources/language/resource.language.es_es/strings.po | 4 ++-- .../resources/language/resource.language.es_mx/strings.po | 2 +- .../resources/language/resource.language.et_ee/strings.po | 2 +- .../resources/language/resource.language.eu_es/strings.po | 2 +- .../resources/language/resource.language.fa_af/strings.po | 2 +- .../resources/language/resource.language.fa_ir/strings.po | 2 +- .../resources/language/resource.language.fi_fi/strings.po | 2 +- .../resources/language/resource.language.fo_fo/strings.po | 2 +- .../resources/language/resource.language.fr_ca/strings.po | 2 +- .../resources/language/resource.language.fr_fr/strings.po | 2 +- .../resources/language/resource.language.gl_es/strings.po | 2 +- .../resources/language/resource.language.he_il/strings.po | 2 +- .../resources/language/resource.language.hi_in/strings.po | 2 +- .../resources/language/resource.language.hr_hr/strings.po | 4 ++-- .../resources/language/resource.language.hu_hu/strings.po | 2 +- .../resources/language/resource.language.hy_am/strings.po | 2 +- .../resources/language/resource.language.id_id/strings.po | 2 +- .../resources/language/resource.language.is_is/strings.po | 4 ++-- .../resources/language/resource.language.it_it/strings.po | 2 +- .../resources/language/resource.language.ja_jp/strings.po | 2 +- .../resources/language/resource.language.kn_in/strings.po | 2 +- .../resources/language/resource.language.ko_kr/strings.po | 2 +- .../resources/language/resource.language.lt_lt/strings.po | 2 +- .../resources/language/resource.language.lv_lv/strings.po | 2 +- .../resources/language/resource.language.ml_in/strings.po | 2 +- .../resources/language/resource.language.mn_mn/strings.po | 2 +- .../resources/language/resource.language.mt_mt/strings.po | 2 +- .../resources/language/resource.language.my_mm/strings.po | 2 +- .../resources/language/resource.language.nb_no/strings.po | 2 +- .../resources/language/resource.language.nl_nl/strings.po | 2 +- .../resources/language/resource.language.os_os/strings.po | 2 +- .../resources/language/resource.language.pl_pl/strings.po | 2 +- .../resources/language/resource.language.pt_br/strings.po | 2 +- .../resources/language/resource.language.pt_pt/strings.po | 2 +- .../resources/language/resource.language.ro_ro/strings.po | 2 +- .../resources/language/resource.language.ru_ru/strings.po | 2 +- .../resources/language/resource.language.si_lk/strings.po | 2 +- .../resources/language/resource.language.sk_sk/strings.po | 2 +- .../resources/language/resource.language.sq_al/strings.po | 2 +- .../resources/language/resource.language.sr_rs/strings.po | 2 +- .../language/resource.language.sr_rs@latin/strings.po | 2 +- .../resources/language/resource.language.sv_se/strings.po | 2 +- .../resources/language/resource.language.szl/strings.po | 2 +- .../resources/language/resource.language.ta_in/strings.po | 2 +- .../resources/language/resource.language.tg_tj/strings.po | 2 +- .../resources/language/resource.language.th_th/strings.po | 2 +- .../resources/language/resource.language.tr_tr/strings.po | 2 +- .../resources/language/resource.language.uk_ua/strings.po | 2 +- .../resources/language/resource.language.uz_uz/strings.po | 2 +- .../resources/language/resource.language.vi_vn/strings.po | 2 +- .../resources/language/resource.language.zh_cn/strings.po | 4 ++-- .../resources/language/resource.language.zh_tw/strings.po | 2 +- 71 files changed, 75 insertions(+), 75 deletions(-) diff --git a/inputstream.adaptive/resources/language/resource.language.af_za/strings.po b/inputstream.adaptive/resources/language/resource.language.af_za/strings.po index 63c620ec0..c2feb198c 100644 --- a/inputstream.adaptive/resources/language/resource.language.af_za/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.af_za/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Afrikaans (South Africa) \n" "Language: af_za\n" diff --git a/inputstream.adaptive/resources/language/resource.language.am_et/strings.po b/inputstream.adaptive/resources/language/resource.language.am_et/strings.po index 3a6df0639..471e80a73 100644 --- a/inputstream.adaptive/resources/language/resource.language.am_et/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.am_et/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Amharic (Ethiopia) \n" "Language: am_et\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po b/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po index 3fef295a5..3853f48fc 100644 --- a/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ar_sa/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language: ar_sa\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po b/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po index c01938518..88ebbba02 100644 --- a/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ast_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Asturian (Spain) \n" "Language: ast_es\n" diff --git a/inputstream.adaptive/resources/language/resource.language.az_az/strings.po b/inputstream.adaptive/resources/language/resource.language.az_az/strings.po index c030c1115..593169d13 100644 --- a/inputstream.adaptive/resources/language/resource.language.az_az/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.az_az/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Azerbaijani \n" "Language: az_az\n" diff --git a/inputstream.adaptive/resources/language/resource.language.be_by/strings.po b/inputstream.adaptive/resources/language/resource.language.be_by/strings.po index c6ac74f5b..91af8cb8f 100644 --- a/inputstream.adaptive/resources/language/resource.language.be_by/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.be_by/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Christian Gade \n" "Language-Team: Belarusian \n" "Language: be_by\n" diff --git a/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po b/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po index d3c1eeee8..407940a36 100644 --- a/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.bg_bg/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Bulgarian \n" "Language: bg_bg\n" diff --git a/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po b/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po index 8106aac33..b4c4c98e2 100644 --- a/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.bs_ba/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Bosnian (Bosnia and Herzegovina) \n" "Language: bs_ba\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po b/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po index 29811eaf2..61370b692 100644 --- a/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ca_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Catalan (Spain) \n" "Language: ca_es\n" diff --git a/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po b/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po index ba6287f21..4a7d2b08e 100644 --- a/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.cs_cz/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Czech \n" "Language: cs_cz\n" diff --git a/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po b/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po index 12aef7f3a..5648076d0 100644 --- a/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.cy_gb/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Welsh (United Kingdom) \n" "Language: cy_gb\n" diff --git a/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po b/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po index 03dfa4ac1..ea2d33258 100644 --- a/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.da_dk/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Danish \n" "Language: da_dk\n" diff --git a/inputstream.adaptive/resources/language/resource.language.de_de/strings.po b/inputstream.adaptive/resources/language/resource.language.de_de/strings.po index a2df1882a..5dfcc80ad 100644 --- a/inputstream.adaptive/resources/language/resource.language.de_de/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.de_de/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Kai Sommerfeld \n" "Language-Team: German \n" "Language: de_de\n" diff --git a/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po b/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po index ecdbd3a0f..0bdb3960a 100644 --- a/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.el_gr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Greek \n" "Language: el_gr\n" diff --git a/inputstream.adaptive/resources/language/resource.language.en_au/strings.po b/inputstream.adaptive/resources/language/resource.language.en_au/strings.po index 258cd5f91..4ea0367ef 100644 --- a/inputstream.adaptive/resources/language/resource.language.en_au/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.en_au/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: English (Australia) \n" "Language: en_au\n" diff --git a/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po b/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po index db0ae9b0b..96292c923 100644 --- a/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.en_nz/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: English (New Zealand) \n" "Language: en_nz\n" diff --git a/inputstream.adaptive/resources/language/resource.language.en_us/strings.po b/inputstream.adaptive/resources/language/resource.language.en_us/strings.po index 4e5d10c4b..e2c438f4f 100644 --- a/inputstream.adaptive/resources/language/resource.language.en_us/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.en_us/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: English (United States) \n" "Language: en_us\n" diff --git a/inputstream.adaptive/resources/language/resource.language.eo/strings.po b/inputstream.adaptive/resources/language/resource.language.eo/strings.po index 07580de31..2f8bbe503 100644 --- a/inputstream.adaptive/resources/language/resource.language.eo/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.eo/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Esperanto \n" "Language: eo\n" diff --git a/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po b/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po index d8448db9b..0fa9c0d6d 100644 --- a/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.es_ar/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Spanish (Argentina) \n" "Language: es_ar\n" diff --git a/inputstream.adaptive/resources/language/resource.language.es_es/strings.po b/inputstream.adaptive/resources/language/resource.language.es_es/strings.po index 3b8188768..c1b6e3715 100644 --- a/inputstream.adaptive/resources/language/resource.language.es_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.es_es/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" -"Last-Translator: roliverosc \n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: Spanish (Spain) \n" "Language: es_es\n" "MIME-Version: 1.0\n" diff --git a/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po b/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po index c672a5109..b1625b464 100644 --- a/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.es_mx/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Spanish (Mexico) \n" "Language: es_mx\n" diff --git a/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po b/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po index d4b3c210b..3486b14d8 100644 --- a/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.et_ee/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: rimasx \n" "Language-Team: Estonian \n" "Language: et_ee\n" diff --git a/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po b/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po index b6e751338..7df045b0a 100644 --- a/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.eu_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Basque (Spain) \n" "Language: eu_es\n" diff --git a/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po b/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po index 777d6ecca..9e18aca90 100644 --- a/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fa_af/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Persian (Afghanistan) \n" "Language: fa_af\n" diff --git a/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po b/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po index 37db0fdd9..e5c288ffc 100644 --- a/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fa_ir/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Persian (Iran) \n" "Language: fa_ir\n" diff --git a/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po b/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po index 7658705de..2be36bc05 100644 --- a/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fi_fi/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Oskari Lavinto \n" "Language-Team: Finnish \n" "Language: fi_fi\n" diff --git a/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po b/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po index 24b8408f2..23d2dea7c 100644 --- a/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fo_fo/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Faroese \n" "Language: fo_fo\n" diff --git a/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po b/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po index b0ef123c3..7635b2d65 100644 --- a/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fr_ca/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: French (Canada) \n" "Language: fr_ca\n" diff --git a/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po b/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po index 31a41bc65..8e69b1116 100644 --- a/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.fr_fr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: skypichat \n" "Language-Team: French (France) \n" "Language: fr_fr\n" diff --git a/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po b/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po index b94d33273..26ef473f4 100644 --- a/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.gl_es/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Galician (Spain) \n" "Language: gl_es\n" diff --git a/inputstream.adaptive/resources/language/resource.language.he_il/strings.po b/inputstream.adaptive/resources/language/resource.language.he_il/strings.po index da9fbcb88..d22a9ff90 100644 --- a/inputstream.adaptive/resources/language/resource.language.he_il/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.he_il/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hebrew (Israel) \n" "Language: he_il\n" diff --git a/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po b/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po index af750c632..d4bd71578 100644 --- a/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hi_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hindi (India) \n" "Language: hi_in\n" diff --git a/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po b/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po index 28b54d712..649c7f5ee 100644 --- a/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hr_hr/strings.po @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: inputstream.adaptive\n" "Report-Msgid-Bugs-To: translations@kodi.tv\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" -"Last-Translator: Anonymous \n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" +"Last-Translator: gogogogi \n" "Language-Team: Croatian \n" "Language: hr_hr\n" "MIME-Version: 1.0\n" diff --git a/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po b/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po index 3d24742f5..a6b1692e1 100644 --- a/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hu_hu/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Hungarian \n" "Language: hu_hu\n" diff --git a/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po b/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po index f82e2d032..35f6052b7 100644 --- a/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.hy_am/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Armenian \n" "Language: hy_am\n" diff --git a/inputstream.adaptive/resources/language/resource.language.id_id/strings.po b/inputstream.adaptive/resources/language/resource.language.id_id/strings.po index 03659fee2..bbe19ec96 100644 --- a/inputstream.adaptive/resources/language/resource.language.id_id/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.id_id/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Indonesian \n" "Language: id_id\n" diff --git a/inputstream.adaptive/resources/language/resource.language.is_is/strings.po b/inputstream.adaptive/resources/language/resource.language.is_is/strings.po index c8b1212a0..2b45ff58d 100644 --- a/inputstream.adaptive/resources/language/resource.language.is_is/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.is_is/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" -"Last-Translator: Anonymous \n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" +"Last-Translator: Sveinn Г­ Felli \n" "Language-Team: Icelandic \n" "Language: is_is\n" "MIME-Version: 1.0\n" diff --git a/inputstream.adaptive/resources/language/resource.language.it_it/strings.po b/inputstream.adaptive/resources/language/resource.language.it_it/strings.po index d9b74611a..8af98867c 100644 --- a/inputstream.adaptive/resources/language/resource.language.it_it/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.it_it/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Massimo Pissarello \n" "Language-Team: Italian \n" "Language: it_it\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po b/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po index c8a64ceea..63c45fa8f 100644 --- a/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ja_jp/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Japanese \n" "Language: ja_jp\n" diff --git a/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po b/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po index e008b9022..6cf407931 100644 --- a/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.kn_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kannada (India) \n" "Language: kn_in\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po b/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po index 2704c2158..e325547a7 100644 --- a/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ko_kr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Minho Park \n" "Language-Team: Korean \n" "Language: ko_kr\n" diff --git a/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po b/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po index abc12a029..8a2a6d638 100644 --- a/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.lt_lt/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Lithuanian \n" "Language: lt_lt\n" diff --git a/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po b/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po index 3b4f53823..542f84461 100644 --- a/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.lv_lv/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Latvian \n" "Language: lv_lv\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po b/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po index 40245dfa9..d7c3f7f0b 100644 --- a/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ml_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Malayalam (India) \n" "Language: ml_in\n" diff --git a/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po b/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po index 84736bb6f..e38a9703f 100644 --- a/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.mn_mn/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Mongolian \n" "Language: mn_mn\n" diff --git a/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po b/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po index 10c8bbfc4..c4cfe0915 100644 --- a/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.mt_mt/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Maltese \n" "Language: mt_mt\n" diff --git a/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po b/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po index 9d33d5a15..0a07e2f36 100644 --- a/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.my_mm/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Burmese \n" "Language: my_mm\n" diff --git a/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po b/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po index 2720351b5..8f9e96c44 100644 --- a/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.nb_no/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Norwegian BokmГҐl \n" "Language: nb_no\n" diff --git a/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po b/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po index 34844cde5..fdb61c12d 100644 --- a/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.nl_nl/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Robin \n" "Language-Team: Dutch \n" "Language: nl_nl\n" diff --git a/inputstream.adaptive/resources/language/resource.language.os_os/strings.po b/inputstream.adaptive/resources/language/resource.language.os_os/strings.po index ab1fdd9d4..f1ad34b87 100644 --- a/inputstream.adaptive/resources/language/resource.language.os_os/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.os_os/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ossetian \n" "Language: os_os\n" diff --git a/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po b/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po index 4ebc78cf6..a2cc76cd4 100644 --- a/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.pl_pl/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Christian Gade \n" "Language-Team: Polish \n" "Language: pl_pl\n" diff --git a/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po b/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po index 3604e0399..71ee65a6f 100644 --- a/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.pt_br/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_br\n" diff --git a/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po b/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po index 1228ffc7c..5eda8a2a6 100644 --- a/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.pt_pt/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Portuguese (Portugal) \n" "Language: pt_pt\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po b/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po index 06cc6f97b..4d5590a88 100644 --- a/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ro_ro/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Romanian \n" "Language: ro_ro\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po b/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po index 4da767996..19e8c9cbb 100644 --- a/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ru_ru/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Christian Gade \n" "Language-Team: Russian \n" "Language: ru_ru\n" diff --git a/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po b/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po index 8866a1f75..ea487df1c 100644 --- a/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.si_lk/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Sinhala (Sri Lanka) \n" "Language: si_lk\n" diff --git a/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po b/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po index 2e3fb0e39..0454f4890 100644 --- a/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sk_sk/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Patrik Е paЕ€o \n" "Language-Team: Slovak \n" "Language: sk_sk\n" diff --git a/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po b/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po index c070ae9f2..2aadf11c5 100644 --- a/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sq_al/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Albanian \n" "Language: sq_al\n" diff --git a/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po b/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po index 01a1c37fc..50dcee151 100644 --- a/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sr_rs/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Serbian \n" "Language: sr_rs\n" diff --git a/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po b/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po index 62ef59864..b3be837ba 100644 --- a/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sr_rs@latin/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Serbian (Latin script) \n" "Language: sr_rs@latin\n" diff --git a/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po b/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po index 09517c402..6aa956b2d 100644 --- a/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.sv_se/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Swedish \n" "Language: sv_se\n" diff --git a/inputstream.adaptive/resources/language/resource.language.szl/strings.po b/inputstream.adaptive/resources/language/resource.language.szl/strings.po index e36ac53e9..8963d1834 100644 --- a/inputstream.adaptive/resources/language/resource.language.szl/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.szl/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Silesian \n" "Language: szl\n" diff --git a/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po b/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po index a8dfef917..9d04afed1 100644 --- a/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.ta_in/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Tamil (India) \n" "Language: ta_in\n" diff --git a/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po b/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po index 21b2fb96d..35bcc76ae 100644 --- a/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.tg_tj/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Tajik \n" "Language: tg_tj\n" diff --git a/inputstream.adaptive/resources/language/resource.language.th_th/strings.po b/inputstream.adaptive/resources/language/resource.language.th_th/strings.po index 026a97d0e..477e11411 100644 --- a/inputstream.adaptive/resources/language/resource.language.th_th/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.th_th/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Thai \n" "Language: th_th\n" diff --git a/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po b/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po index cc3211111..d916b2fdd 100644 --- a/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.tr_tr/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:09+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Turkish \n" "Language: tr_tr\n" diff --git a/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po b/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po index b7ed513e9..9779c6149 100644 --- a/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.uk_ua/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ukrainian \n" "Language: uk_ua\n" diff --git a/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po b/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po index 1ece0bd0c..ef9d712e9 100644 --- a/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.uz_uz/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Uzbek \n" "Language: uz_uz\n" diff --git a/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po b/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po index 1ad6944ab..6c486bf29 100644 --- a/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.vi_vn/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Vietnamese \n" "Language: vi_vn\n" diff --git a/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po b/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po index 5de297ca7..4800b63b7 100644 --- a/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.zh_cn/strings.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" -"Last-Translator: Anonymous \n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" +"Last-Translator: taxigps \n" "Language-Team: Chinese (China) \n" "Language: zh_cn\n" "MIME-Version: 1.0\n" diff --git a/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po b/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po index d80283a39..bba5831d2 100644 --- a/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po +++ b/inputstream.adaptive/resources/language/resource.language.zh_tw/strings.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@kodi.tv\n" -"PO-Revision-Date: 2025-01-17 01:51+0000\n" +"PO-Revision-Date: 2025-01-17 02:10+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Taiwan) \n" "Language: zh_tw\n" From 246d81b95bf57b958074ce370abd70f8e00222dd Mon Sep 17 00:00:00 2001 From: Garrett Brown Date: Fri, 17 Jan 2025 16:30:05 -0800 Subject: [PATCH 56/91] Update to version 21.5.9 to fix packaging errors --- inputstream.adaptive/addon.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index ba47c5b2d..ef6db7b40 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ From 432bcb851da2cea64af986ca6ebe6b15029111d1 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 19 Jan 2025 10:07:14 +0100 Subject: [PATCH 57/91] Revert "Update to version 21.5.9 to fix packaging errors" This reverts commit 246d81b95bf57b958074ce370abd70f8e00222dd. --- inputstream.adaptive/addon.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index ef6db7b40..ba47c5b2d 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ From 27174ac4603b401361d0409e3ac802cc71d1c9c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 19 Jan 2025 09:11:59 +0000 Subject: [PATCH 58/91] changelog and version v21.5.9 (2025-01-19) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index ba47c5b2d..ef6db7b40 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 3eb251375..ef60d2b77 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.9 (2025-01-19) +- Fix packaging errors + v21.5.8 (2025-01-17) - Translations updates from Weblate - af_za, am_et, ar_sa, ast_es, az_az, be_by, bg_bg, bs_ba, ca_es, cs_cz, cy_gb, da_dk, de_de, el_gr, en_au, en_nz, en_us, eo, es_ar, es_es, es_mx, et_ee, eu_es, fa_af, fa_ir, fi_fi, fo_fo, fr_ca, fr_fr, gl_es, he_il, hi_in, hr_hr, hu_hu, hy_am, id_id, is_is, it_it, ja_jp, kn_in, ko_kr, lt_lt, lv_lv, ml_in, mn_mn, mt_mt, my_mm, nb_no, nl_nl, os_os, pl_pl, pt_br, pt_pt, ro_md, ro_ro, ru_ru, scn, si_lk, sk_sk, sq_al, sr_rs, sr_rs@latin, sv_se, szl, ta_in, tg_tj, th_th, tr_tr, uk_ua, uz_uz, vi_vn, zh_cn, zh_tw From fcfdb683b195d9f65bd3ea2813fa3a84c7bbcb1d Mon Sep 17 00:00:00 2001 From: Glenn Guy Date: Sun, 23 Mar 2025 14:22:24 +1100 Subject: [PATCH 59/91] Fix transitions from unencrypted fragments to encrypted --- src/samplereader/FragmentedSampleReader.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index 1cfdeba85..9549abe7b 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -466,6 +466,9 @@ void CFragmentedSampleReader::UpdateSampleDescription() return; } } + else { + m_protectedDesc = nullptr; + } LOG::LogF(LOGDEBUG, "Codec fourcc: %s (%u)", CODEC::FourCCToString(desc->GetFormat()).c_str(), desc->GetFormat()); From 61b4b5808b8d184d4fc567629b9cd508bef31b86 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 2 Mar 2025 15:14:46 +0100 Subject: [PATCH 60/91] [azure] Disable ARM32-UWP build (unmaintained) --- azure-pipelines.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 6be85c8a1..af7085352 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -39,11 +39,11 @@ jobs: ARCHITECTURE: x64 CONFIGURATION: Release WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" - ARM32-UWP: - GENERATOR: "Visual Studio 17 2022" - ARCHITECTURE: ARM - CONFIGURATION: Release - WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" + #ARM32-UWP: + # GENERATOR: "Visual Studio 17 2022" + # ARCHITECTURE: ARM + # CONFIGURATION: Release + # WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" #ARM64-UWP: # GENERATOR: "Visual Studio 17 2022" # ARCHITECTURE: ARM64 From 5fe35a0d75a6ff3908e54b0ba7482aaffdfd8415 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 2 Mar 2025 17:46:12 +0100 Subject: [PATCH 61/91] [AdaptiveStream] add missing chrono include --- src/common/AdaptiveStream.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/AdaptiveStream.h b/src/common/AdaptiveStream.h index c2ed42a69..88cbf29af 100644 --- a/src/common/AdaptiveStream.h +++ b/src/common/AdaptiveStream.h @@ -14,6 +14,7 @@ #include #include +#include #include #include #include From dbf8dea1f0ea60d01894d361df63056776418d86 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 25 Mar 2025 10:33:26 +0100 Subject: [PATCH 62/91] [HLSTree] Set period duration also with live stream with a single period manifest allow the video seek --- src/parser/HLSTree.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/parser/HLSTree.cpp b/src/parser/HLSTree.cpp index 978c8eda7..c4a5660f7 100644 --- a/src/parser/HLSTree.cpp +++ b/src/parser/HLSTree.cpp @@ -902,8 +902,7 @@ bool adaptive::CHLSTree::ProcessChildManifest(PLAYLIST::CPeriod* period, uint64_t totalTimeMs = 0; if (discontCount > 0 || m_hasDiscontSeq) { - // On live stream you dont know the period end, so dont set the period duration in advance - if (!m_isLive && adp->GetStreamType() != StreamType::SUBTITLE) + if (adp->GetStreamType() != StreamType::SUBTITLE) { uint64_t periodDuration = (rep->GetDuration() * m_periods[discontCount]->GetTimescale()) / rep->GetTimescale(); From 2b6b42dfe76538541b783d6ca779fa1eb4778f16 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 28 Mar 2025 10:30:56 +0100 Subject: [PATCH 63/91] [HLSTree] Fix media sequence number on discontinuity --- src/parser/HLSTree.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/parser/HLSTree.cpp b/src/parser/HLSTree.cpp index 910c08a98..fdc88337c 100644 --- a/src/parser/HLSTree.cpp +++ b/src/parser/HLSTree.cpp @@ -802,15 +802,18 @@ bool adaptive::CHLSTree::ProcessChildManifest(PLAYLIST::CPeriod* period, } FreeSegments(period, rep); - rep->Timeline().Swap(newSegments); rep->SetStartNumber(mediaSequenceNbr); + + // Update MEDIA-SEQUENCE for next period + mediaSequenceNbr += newSegments.GetSize(); + + rep->Timeline().Swap(newSegments); } isSkipUntilDiscont = false; ++discontCount; - mediaSequenceNbr += rep->Timeline().GetSize(); currentSegNumber = mediaSequenceNbr; CPeriod* newPeriod = FindDiscontinuityPeriod(m_discontSeq + discontCount); From 81110998e7562e20657b5b307c705ca3c2e9307a Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sat, 29 Mar 2025 19:50:54 +0100 Subject: [PATCH 64/91] [UrlUtils] Fix GetBaseDomain for SMIL URLs --- src/utils/UrlUtils.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/utils/UrlUtils.cpp b/src/utils/UrlUtils.cpp index 95da6acb2..74cb3307e 100644 --- a/src/utils/UrlUtils.cpp +++ b/src/utils/UrlUtils.cpp @@ -257,18 +257,20 @@ std::string UTILS::URL::GetBaseDomain(std::string url) if (paramsPos != std::string::npos) url.erase(paramsPos); - const size_t domainStartPos = url.find("://") + 3; - // Try remove url port number and path - const size_t port = url.find_first_of(':', domainStartPos); - if (port != std::string::npos) - url.erase(port); - else - { - // Try remove the path - const size_t slashPos = url.find_first_of('/', domainStartPos); - if (slashPos != std::string::npos) - url.erase(slashPos); - } + const size_t schemeEndPos = url.find("://"); + if (schemeEndPos == std::string::npos) + return ""; // Not valid + + const size_t domainStartPos = schemeEndPos + 3; + const size_t portPos = url.find_first_of(':', domainStartPos); + const size_t pathPos = url.find_first_of('/', domainStartPos); + + size_t endPos = url.size(); + if (portPos != std::string::npos && portPos < pathPos) + url.erase(portPos); // remove port number + else if (pathPos != std::string::npos) + url.erase(pathPos); // remove from slash + return url; } return ""; From 75d63433ec1f1e9e8490529346811a1c43783cf4 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sat, 29 Mar 2025 19:55:51 +0100 Subject: [PATCH 65/91] [TestUtils] Add GetBaseDomain SMIL test case --- src/test/TestUtils.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/TestUtils.cpp b/src/test/TestUtils.cpp index f536fd392..200d434a6 100644 --- a/src/test/TestUtils.cpp +++ b/src/test/TestUtils.cpp @@ -48,6 +48,9 @@ TEST_F(UtilsTest, DetermineBaseDomain) url = "https://www.foo.bar:1234/mpd/test.mpd?ping=pong"; EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar"); + + url = "https://www.foo.bar/example/smil:rtmp.smil/playlist.m3u8?ping=pong"; + EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar"); } TEST_F(UtilsTest, JoinUrls) From c3e6f3cb62624766e935d02470d4809268d39385 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Wed, 2 Apr 2025 15:47:36 +0200 Subject: [PATCH 66/91] [cdm] Deny the use of CDM version 4.10.2891.0 --- lib/cdm/cdm/media/cdm/cdm_adapter.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/cdm/cdm/media/cdm/cdm_adapter.cc b/lib/cdm/cdm/media/cdm/cdm_adapter.cc index 22f872257..8b280d95d 100644 --- a/lib/cdm/cdm/media/cdm/cdm_adapter.cc +++ b/lib/cdm/cdm/media/cdm/cdm_adapter.cc @@ -258,6 +258,17 @@ void CdmAdapter::Initialize() } std::string version{get_cdm_verion_func()}; + + if (version == "4.10.2891.0") + { + // This version have unclear problems + // such as crashes on OnStorageId() method calls and others video decoding crashes + LOG::Log(LOGERROR, + "THE CDM VERSION \"4.10.2891.0\" IS NOT SUPPORTED DUE TO UNCLEAR LIBRARY ISSUES.\n" + "------------------------------> PLEASE INSTALL AN OLDER VERSION OF WIDEVINE CDM!"); + return; + } + LOG::LogF(LOGDEBUG, "CDM version: %s", version.c_str()); #if defined(OS_WIN) From 84cbd40bde0d452661147a72b06e8047abb5cbc3 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Wed, 2 Apr 2025 17:18:13 +0200 Subject: [PATCH 67/91] [depends] Add CMAKE_POLICY_VERSION_MINIMUM flag Workaround to cmake 4.0 compatibility error this has been already fixed on Piers branch --- depends/common/pugixml/flags.txt | 1 + depends/common/rapidjson/flags.txt | 2 +- depends/windows/dlfcn-win32/flags.txt | 2 +- depends/windowsstore/dlfcn-win32/flags.txt | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 depends/common/pugixml/flags.txt diff --git a/depends/common/pugixml/flags.txt b/depends/common/pugixml/flags.txt new file mode 100644 index 000000000..8abc32977 --- /dev/null +++ b/depends/common/pugixml/flags.txt @@ -0,0 +1 @@ +-DCMAKE_POLICY_VERSION_MINIMUM=3.5 diff --git a/depends/common/rapidjson/flags.txt b/depends/common/rapidjson/flags.txt index 157ee17ac..ef0241ec2 100644 --- a/depends/common/rapidjson/flags.txt +++ b/depends/common/rapidjson/flags.txt @@ -1 +1 @@ --DRAPIDJSON_BUILD_DOC=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF -DRAPIDJSON_BUILD_TESTS=OFF -DRAPIDJSON_BUILD_CXX17=ON -DRAPIDJSON_HAS_STDSTRING=ON +-DRAPIDJSON_BUILD_DOC=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF -DRAPIDJSON_BUILD_TESTS=OFF -DRAPIDJSON_BUILD_CXX17=ON -DRAPIDJSON_HAS_STDSTRING=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5 diff --git a/depends/windows/dlfcn-win32/flags.txt b/depends/windows/dlfcn-win32/flags.txt index 3cb0a00ec..16eb55f83 100644 --- a/depends/windows/dlfcn-win32/flags.txt +++ b/depends/windows/dlfcn-win32/flags.txt @@ -1 +1 @@ --DBUILD_SHARED_LIBS=OFF +-DBUILD_SHARED_LIBS=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.5 diff --git a/depends/windowsstore/dlfcn-win32/flags.txt b/depends/windowsstore/dlfcn-win32/flags.txt index 3cb0a00ec..16eb55f83 100644 --- a/depends/windowsstore/dlfcn-win32/flags.txt +++ b/depends/windowsstore/dlfcn-win32/flags.txt @@ -1 +1 @@ --DBUILD_SHARED_LIBS=OFF +-DBUILD_SHARED_LIBS=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.5 From 578818de7441a77c07ec86675cc7d0bb05506967 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 6 Apr 2025 19:04:31 +0000 Subject: [PATCH 68/91] changelog and version v21.5.10 (2025-04-06) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index ef6db7b40..e18932c4c 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index ef60d2b77..8b5ef2a62 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,10 @@ +v21.5.10 (2025-04-06) +- INFO: Widevine CDM 4.10.2891.0 cannot be used to play videos, if you installed it reinstall an old version +- [ClearKey] Fix playback with streams that have mixed unencrypted/encrypted segments +- [HLS] Fix timeshift on single period video stream +- [HLS] Fix possible repeated frames on live stream with discontinuities +- Fix playback with SMIL URL manifests + v21.5.9 (2025-01-19) - Fix packaging errors From be90d80e8a65d446c857545db7b69043e5c0e333 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 7 Apr 2025 14:16:30 +0200 Subject: [PATCH 69/91] [AdaptiveStream] Workaround to 0 segment position on live delay --- src/common/AdaptiveStream.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/common/AdaptiveStream.cpp b/src/common/AdaptiveStream.cpp index 6cb02c307..e083756dc 100644 --- a/src/common/AdaptiveStream.cpp +++ b/src/common/AdaptiveStream.cpp @@ -676,6 +676,12 @@ bool AdaptiveStream::start_stream(const uint64_t startPts) size_t segPosDelay = static_cast((m_tree->m_liveDelay * current_rep_->GetTimescale()) / segDur); + //! @todo: hackish workaround, when segment duration is same of live delay, force at least 1 position delay + //! otherwise the current segment will be last available on the timeline, + //! therefore when GetNextSegment is executed will return nullptr and the below (todo) BUG condition stop the playback + if (segPosDelay == 0) + segPosDelay = 1; + if (segPos > segPosDelay) segPos -= segPosDelay; else From f5d3f537e310b619ce3cb6d6ce9e1964fd4bcbaa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 06:52:52 +0000 Subject: [PATCH 70/91] changelog and version v21.5.11 (2025-04-15) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index e18932c4c..06bfda66f 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 8b5ef2a62..8e6b37633 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.11 (2025-04-15) +- Fix live delay that was causing broken playback in some cases + v21.5.10 (2025-04-06) - INFO: Widevine CDM 4.10.2891.0 cannot be used to play videos, if you installed it reinstall an old version - [ClearKey] Fix playback with streams that have mixed unencrypted/encrypted segments From 6df6322719fb65985c3524b8ab814ed736f7c7c8 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sun, 27 Apr 2025 10:20:19 +0200 Subject: [PATCH 71/91] [DashTree] Fix segmentNumber based on tsb The previous code was assuming that the startnumber was the result of (period start / duration) now take in account that startNumber of segmenttemplate can be different --- src/parser/DASHTree.cpp | 12 ++---------- src/test/TestDASHTree.cpp | 2 +- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/parser/DASHTree.cpp b/src/parser/DASHTree.cpp index 18261c1e3..66a291a47 100644 --- a/src/parser/DASHTree.cpp +++ b/src/parser/DASHTree.cpp @@ -1102,16 +1102,8 @@ void adaptive::CDashTree::ParseTagRepresentation(pugi::xml_node nodeRepr, segmentsCount = std::max(durationMs / segDurMs, 1); - if (available_time_ == 0) - { - time = tsbStart * segTemplate->GetTimescale() / 1000; - segNumber = tsbStart / segDurMs; - } - else - { - time += tsbStart * segTemplate->GetTimescale() / 1000; - segNumber += tsbStart / segDurMs; - } + segNumber += (tsbStart - periodStartMs) / segDurMs; + time += (segNumber - segTemplate->GetStartNumber()) * segTemplate->GetDuration(); } else if (periodDurMs > 0) { diff --git a/src/test/TestDASHTree.cpp b/src/test/TestDASHTree.cpp index 1ca45f2f2..7a3c951eb 100644 --- a/src/test/TestDASHTree.cpp +++ b/src/test/TestDASHTree.cpp @@ -286,7 +286,7 @@ TEST_F(DASHTreeTest, CalculateCorrectSegmentNumbersFromSegmentTemplateWithPTO) auto& segments = tree->m_periods[0]->GetAdaptationSets()[0]->GetRepresentations()[0]->Timeline(); EXPECT_EQ(segments.GetSize(), 450); - EXPECT_EQ(segments.Get(0)->m_number, 404314437); + EXPECT_EQ(segments.Get(0)->m_number, 404305524); } TEST_F(DASHTreeTest, CalculateCorrectSegmentNumbersFromSegmentTemplateWithOldPublishTime) From 3d30a6dfd4ef531ce8999ac28e6d5bfce2c28331 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 27 Apr 2025 09:19:13 +0000 Subject: [PATCH 72/91] changelog and version v21.5.12 (2025-04-27) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 06bfda66f..31f617570 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 8e6b37633..445276b9e 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.12 (2025-04-27) +- [Dash] Fix SegmentTemplate TSB to prevent use extra live delay workarounds + v21.5.11 (2025-04-15) - Fix live delay that was causing broken playback in some cases From f4bbb631f06113e5ef620e23c21a37c935c7e84d Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Wed, 9 Apr 2025 07:52:48 +0200 Subject: [PATCH 73/91] [Widevine][CDM] Implemented log interface --- lib/cdm/CMakeLists.txt | 1 + lib/cdm/cdm/debug.cpp | 57 ++++++++++++++++++++++++ lib/cdm/cdm/debug.h | 27 +++++++++++ lib/cdm/cdm/media/cdm/cdm_adapter.cc | 29 ++++++------ src/decrypters/widevine/WVCdmAdapter.cpp | 27 +++++++++++ 5 files changed, 127 insertions(+), 14 deletions(-) create mode 100644 lib/cdm/cdm/debug.cpp create mode 100644 lib/cdm/cdm/debug.h diff --git a/lib/cdm/CMakeLists.txt b/lib/cdm/CMakeLists.txt index 0f7b1fa27..814478285 100644 --- a/lib/cdm/CMakeLists.txt +++ b/lib/cdm/CMakeLists.txt @@ -10,6 +10,7 @@ else() endif() add_library(cdm_library STATIC + cdm/debug.cpp cdm/base/native_library.cc cdm/base/native_library_${CDMTYPE} cdm/media/cdm/cdm_adapter.cc diff --git a/lib/cdm/cdm/debug.cpp b/lib/cdm/cdm/debug.cpp new file mode 100644 index 000000000..2449c4232 --- /dev/null +++ b/lib/cdm/cdm/debug.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2025 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "debug.h" + +#include +#include + +#ifdef _MSC_VER +#define snprintf _snprintf +#endif + +struct dbgContext +{ + const char* name; + void (*msgCallback)(const CDM_DBG::LogLevel level, const char* msg); +}; + +dbgContext debugContext = {"WV-CDM-Library", nullptr}; + +void CDM_DBG::Log(const CDM_DBG::LogLevel level, const char* format, ...) +{ + if (!debugContext.msgCallback) + return; + + char msg[2048]; + const int len = snprintf(msg, sizeof(msg), "[%s] ", debugContext.name); + if (len < 0 || len >= sizeof(msg)) + { + debugContext.msgCallback(CDM_DBG::LogLevel::ERROR, + "Cannot print log string: Context name too long"); + return; + } + + va_list ap; + va_start(ap, format); + const int formattedLen = vsnprintf(msg + len, sizeof(msg) - len, format, ap); + va_end(ap); + if (formattedLen < 0 || formattedLen >= (sizeof(msg) - len)) + { + debugContext.msgCallback(CDM_DBG::LogLevel::ERROR, + "Cannot print log string: Text content too long"); + return; + } + + debugContext.msgCallback(level, msg); +} + +void CDM_DBG::SetDBGMsgCallback(void (*msgcb)(const CDM_DBG::LogLevel level, const char* msg)) +{ + debugContext.msgCallback = msgcb; +} diff --git a/lib/cdm/cdm/debug.h b/lib/cdm/cdm/debug.h new file mode 100644 index 000000000..175ba253e --- /dev/null +++ b/lib/cdm/cdm/debug.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2025 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +namespace CDM_DBG +{ +enum class LogLevel +{ + DEBUG, + INFO, + WARNING, + ERROR, + FATAL +}; + +void Log(const LogLevel level, const char* format, ...); +#define LogF(level, format, ...) Log((level), ("%s: " format), __FUNCTION__, ##__VA_ARGS__) + +void SetDBGMsgCallback(void (*msgcb)(const LogLevel level, const char* msg)); + +} // namespace cdm diff --git a/lib/cdm/cdm/media/cdm/cdm_adapter.cc b/lib/cdm/cdm/media/cdm/cdm_adapter.cc index 8b280d95d..2a7d680a9 100644 --- a/lib/cdm/cdm/media/cdm/cdm_adapter.cc +++ b/lib/cdm/cdm/media/cdm/cdm_adapter.cc @@ -8,11 +8,13 @@ #include "cdm_adapter.h" -//! @todo: provide an appropriate interface for log output -#include "../../src/utils/log.h" +#include "../../debug.h" +#include "../base/limits.h" #include +#include #include + #include #ifdef _WIN32 @@ -21,8 +23,6 @@ #define DCHECK(condition) assert(condition) -#include "../base/limits.h" - #ifdef __APPLE__ #include //clock_gettime is not implemented on OSX @@ -39,6 +39,8 @@ int clock_gettime(int clk_id, struct timespec* t) { #endif #endif +using namespace CDM_DBG; + namespace media { uint64_t gtc() @@ -240,8 +242,7 @@ void CdmAdapter::Initialize() if (!library_) { - LOG::LogF(LOGERROR, "%s: Failed to load library: %s", __FUNCTION__, - error.ToString().c_str()); + LogF(LogLevel::ERROR, "Failed to load library: %s", error.ToString().c_str()); return; } @@ -263,13 +264,13 @@ void CdmAdapter::Initialize() { // This version have unclear problems // such as crashes on OnStorageId() method calls and others video decoding crashes - LOG::Log(LOGERROR, - "THE CDM VERSION \"4.10.2891.0\" IS NOT SUPPORTED DUE TO UNCLEAR LIBRARY ISSUES.\n" - "------------------------------> PLEASE INSTALL AN OLDER VERSION OF WIDEVINE CDM!"); + Log(LogLevel::ERROR, + "THE CDM VERSION \"4.10.2891.0\" IS NOT SUPPORTED DUE TO UNCLEAR LIBRARY ISSUES.\n" + "------------------------------> PLEASE INSTALL AN OLDER VERSION OF WIDEVINE CDM!"); return; } - LOG::LogF(LOGDEBUG, "CDM version: %s", version.c_str()); + Log(LogLevel::DEBUG, "CDM version: %s", version.c_str()); #if defined(OS_WIN) // Load DXVA before sandbox lockdown to give CDM access to Output Protection @@ -635,8 +636,8 @@ void CdmAdapter::OnSessionKeysChange(const char* session_id, char* bufferPtr{buffer}; for (uint32_t j{0}; j < keys_info[i].key_id_size; ++j) bufferPtr += std::snprintf(bufferPtr, 3, "%02X", (int)keys_info[i].key_id[j]); - LOG::Log(LOGDEBUG, "%s: Sessionkey %s status: %d syscode: %u", __func__, buffer, - keys_info[i].status, keys_info[i].system_code); + Log(LogLevel::DEBUG, "OnSessionKeysChange: KID %s, Status: %d, System code: %u", buffer, + keys_info[i].status, keys_info[i].system_code); SendClientMessage(session_id, session_id_size, CdmAdapterClient::kSessionKeysChange, keys_info[i].key_id, keys_info[i].key_id_size, keys_info[i].status); @@ -711,7 +712,7 @@ void CdmAdapter::RequestStorageId(uint32_t version) void CdmAdapter::OnInitialized(bool success) { - LOG::LogF(LOGDEBUG, "CDM is initialized: %s", success ? "true" : "false"); + Log(LogLevel::DEBUG, "CDM is initialized: %s", success ? "true" : "false"); } @@ -769,7 +770,7 @@ void CdmFileIoImpl::Write(const uint8_t* data, uint32_t data_size) { if (!ExistsDir(base_path_.c_str()) && !CreateDirs(base_path_.c_str())) { - LOG::LogF(LOGERROR, "Cannot create directory: %s", base_path_.c_str()); + LogF(LogLevel::ERROR, "Cannot create directory: %s", base_path_.c_str()); client_->OnWriteComplete(cdm::FileIOClient::Status::kError); return; } diff --git a/src/decrypters/widevine/WVCdmAdapter.cpp b/src/decrypters/widevine/WVCdmAdapter.cpp index f3a1d45bd..e6712749f 100644 --- a/src/decrypters/widevine/WVCdmAdapter.cpp +++ b/src/decrypters/widevine/WVCdmAdapter.cpp @@ -11,6 +11,7 @@ #include "CdmFixedBuffer.h" #include "WVCencSingleSampleDecrypter.h" #include "WVDecrypter.h" +#include "cdm/debug.h" #include "decrypters/Helpers.h" #include "utils/FileUtils.h" #include "utils/log.h" @@ -28,6 +29,30 @@ namespace #else constexpr const char* LIBRARY_FILENAME = "libwidevinecdm.so"; #endif + +void DebugLog(const CDM_DBG::LogLevel level, const char* msg) +{ + switch (level) + { + case CDM_DBG::LogLevel::ERROR: + LOG::Log(LOGERROR, msg); + break; + case CDM_DBG::LogLevel::WARNING: + LOG::Log(LOGWARNING, msg); + break; + case CDM_DBG::LogLevel::INFO: + LOG::Log(LOGINFO, msg); + break; + case CDM_DBG::LogLevel::DEBUG: + LOG::Log(LOGDEBUG, msg); + break; + case CDM_DBG::LogLevel::FATAL: + LOG::Log(LOGFATAL, msg); + break; + default: + break; + } +} } // unnamed namespace CWVCdmAdapter::CWVCdmAdapter(std::string_view licenseURL, @@ -36,6 +61,8 @@ CWVCdmAdapter::CWVCdmAdapter(std::string_view licenseURL, CWVDecrypter* host) : m_licenseUrl(licenseURL), m_host(host), m_codecInstance(nullptr) { + CDM_DBG::SetDBGMsgCallback(DebugLog); + if (m_host->GetLibraryPath().empty()) { LOG::LogF(LOGERROR, "Widevine CDM library path not specified"); From 4df354b4480c6a3f2940eeac97c1231845f36d5f Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 8 Apr 2025 20:07:57 +0200 Subject: [PATCH 74/91] [log] Remove outdated comment --- src/utils/log.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/log.h b/src/utils/log.h index 28fd7d104..46e07b87b 100644 --- a/src/utils/log.h +++ b/src/utils/log.h @@ -17,7 +17,6 @@ #include -// To keep in sync with SSDLogLevel on SSD_dll.h enum LogLevel { LOGDEBUG, From 367faccfe9fd56bf5922919a0e4f2283d84aecb9 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 2 May 2025 18:21:29 +0200 Subject: [PATCH 75/91] [widevine] Updated CDM interface --- .../media/cdm/api/content_decryption_module.h | 3368 ++++++++--------- .../cdm/api/content_decryption_module_proxy.h | 101 - lib/cdm/cdm/media/cdm/cdm_adapter.cc | 291 +- lib/cdm/cdm/media/cdm/cdm_adapter.h | 30 +- .../widevine/WVCencSingleSampleDecrypter.cpp | 2 +- 5 files changed, 1840 insertions(+), 1952 deletions(-) delete mode 100644 lib/cdm/cdm/media/cdm/api/content_decryption_module_proxy.h diff --git a/lib/cdm/cdm/media/cdm/api/content_decryption_module.h b/lib/cdm/cdm/media/cdm/api/content_decryption_module.h index a61d4d60c..b547204df 100644 --- a/lib/cdm/cdm/media/cdm/api/content_decryption_module.h +++ b/lib/cdm/cdm/media/cdm/api/content_decryption_module.h @@ -12,7 +12,6 @@ #include #include "content_decryption_module_export.h" -#include "content_decryption_module_proxy.h" #if defined(_MSC_VER) typedef unsigned char uint8_t; @@ -51,1731 +50,1728 @@ typedef __int64 int64_t; extern "C" { - CDM_API void INITIALIZE_CDM_MODULE(); +CDM_API void INITIALIZE_CDM_MODULE(); - CDM_API void DeinitializeCdmModule(); +CDM_API void DeinitializeCdmModule(); - // Returns a pointer to the requested CDM Host interface upon success. - // Returns NULL if the requested CDM Host interface is not supported. - // The caller should cast the returned pointer to the type matching - // |host_interface_version|. - typedef void* (*GetCdmHostFunc)(int host_interface_version, void* user_data); +// Returns a pointer to the requested CDM Host interface upon success. +// Returns NULL if the requested CDM Host interface is not supported. +// The caller should cast the returned pointer to the type matching +// |host_interface_version|. +typedef void* (*GetCdmHostFunc)(int host_interface_version, void* user_data); - // Returns a pointer to the requested CDM upon success. - // Returns NULL if an error occurs or the requested |cdm_interface_version| or - // |key_system| is not supported or another error occurs. - // The caller should cast the returned pointer to the type matching - // |cdm_interface_version|. - // Caller retains ownership of arguments and must call Destroy() on the returned - // object. - CDM_API void* CreateCdmInstance(int cdm_interface_version, - const char* key_system, - uint32_t key_system_size, - GetCdmHostFunc get_cdm_host_func, - void* user_data); +// Returns a pointer to the requested CDM upon success. +// Returns NULL if an error occurs or the requested |cdm_interface_version| or +// |key_system| is not supported or another error occurs. +// The caller should cast the returned pointer to the type matching +// |cdm_interface_version|. +// Caller retains ownership of arguments and must call Destroy() on the returned +// object. +CDM_API void* CreateCdmInstance(int cdm_interface_version, + const char* key_system, + uint32_t key_system_size, + GetCdmHostFunc get_cdm_host_func, + void* user_data); - CDM_API const char* GetCdmVersion(); +CDM_API const char* GetCdmVersion(); } // extern "C" namespace cdm { - enum Status : uint32_t { - kSuccess = 0, - kNeedMoreData, // Decoder needs more data to produce a decoded frame/sample. - kNoKey, // The required decryption key is not available. - kInitializationError, // Initialization error. - kDecryptError, // Decryption failed. - kDecodeError, // Error decoding audio or video. - kDeferredInitialization // Decoder is not ready for initialization. - }; - CHECK_TYPE(Status, 4, 4); - - // Exceptions used by the CDM to reject promises. - // https://w3c.github.io/encrypted-media/#exceptions - enum Exception : uint32_t { - kExceptionTypeError, - kExceptionNotSupportedError, - kExceptionInvalidStateError, - kExceptionQuotaExceededError - }; - CHECK_TYPE(Exception, 4, 4); - - // The encryption scheme. The definitions are from ISO/IEC 23001-7:2016. - enum class EncryptionScheme : uint32_t { - kUnencrypted = 0, - kCenc, // 'cenc' subsample encryption using AES-CTR mode. - kCbcs // 'cbcs' pattern encryption using AES-CBC mode. - }; - CHECK_TYPE(EncryptionScheme, 4, 4); - - // The pattern used for pattern encryption. Note that ISO/IEC 23001-7:2016 - // defines each block to be 16-bytes. - struct Pattern { - uint32_t crypt_byte_block; // Count of the encrypted blocks. - uint32_t skip_byte_block; // Count of the unencrypted blocks. - }; - CHECK_TYPE(Pattern, 8, 8); - - enum class ColorRange : uint8_t { - kInvalid, - kLimited, // 709 color range with RGB values ranging from 16 to 235. - kFull, // Full RGB color range with RGB values from 0 to 255. - kDerived // Range is defined by |transfer_id| and |matrix_id|. - }; - CHECK_TYPE(ColorRange, 1, 1); - - // Described in ISO 23001-8:2016, section 7. All the IDs are in the range - // [0, 255] so 8-bit integer is sufficient. An unspecified ColorSpace should be - // {2, 2, 2, ColorRange::kInvalid}, where value 2 means "Unspecified" for all - // the IDs, as defined by the spec. - struct ColorSpace { - uint8_t primary_id; // 7.1 colour primaries, table 2 - uint8_t transfer_id; // 7.2 transfer characteristics, table 3 - uint8_t matrix_id; // 7.3 matrix coefficients, table 4 - ColorRange range; - }; - CHECK_TYPE(ColorSpace, 4, 4); - - // Time is defined as the number of seconds since the Epoch - // (00:00:00 UTC, January 1, 1970), not including any added leap second. - // Also see Time definition in spec: https://w3c.github.io/encrypted-media/#time - // Note that Time is defined in millisecond accuracy in the spec but in second - // accuracy here. - typedef double Time; - - // An input buffer can be split into several continuous subsamples. - // A SubsampleEntry specifies the number of clear and cipher bytes in each - // subsample. For example, the following buffer has three subsamples: +enum Status : uint32_t { + kSuccess = 0, + kNeedMoreData, // Decoder needs more data to produce a decoded frame/sample. + kNoKey, // The required decryption key is not available. + kInitializationError, // Initialization error. + kDecryptError, // Decryption failed. + kDecodeError, // Error decoding audio or video. + kDeferredInitialization // Decoder is not ready for initialization. +}; +CHECK_TYPE(Status, 4, 4); + +// Exceptions used by the CDM to reject promises. +// https://w3c.github.io/encrypted-media/#exceptions +enum Exception : uint32_t { + kExceptionTypeError, + kExceptionNotSupportedError, + kExceptionInvalidStateError, + kExceptionQuotaExceededError +}; +CHECK_TYPE(Exception, 4, 4); + +// The encryption scheme. The definitions are from ISO/IEC 23001-7:2016. +enum class EncryptionScheme : uint32_t { + kUnencrypted = 0, + kCenc, // 'cenc' subsample encryption using AES-CTR mode. + kCbcs // 'cbcs' pattern encryption using AES-CBC mode. +}; +CHECK_TYPE(EncryptionScheme, 4, 4); + +// The pattern used for pattern encryption. Note that ISO/IEC 23001-7:2016 +// defines each block to be 16-bytes. +struct Pattern { + uint32_t crypt_byte_block; // Count of the encrypted blocks. + uint32_t skip_byte_block; // Count of the unencrypted blocks. +}; +CHECK_TYPE(Pattern, 8, 8); + +enum class ColorRange : uint8_t { + kInvalid, + kLimited, // 709 color range with RGB values ranging from 16 to 235. + kFull, // Full RGB color range with RGB values from 0 to 255. + kDerived // Range is defined by |transfer_id| and |matrix_id|. +}; +CHECK_TYPE(ColorRange, 1, 1); + +// Described in ISO 23001-8:2016, section 7. All the IDs are in the range +// [0, 255] so 8-bit integer is sufficient. An unspecified ColorSpace should be +// {2, 2, 2, ColorRange::kInvalid}, where value 2 means "Unspecified" for all +// the IDs, as defined by the spec. +struct ColorSpace { + uint8_t primary_id; // 7.1 colour primaries, table 2 + uint8_t transfer_id; // 7.2 transfer characteristics, table 3 + uint8_t matrix_id; // 7.3 matrix coefficients, table 4 + ColorRange range; +}; +CHECK_TYPE(ColorSpace, 4, 4); + +// Time is defined as the number of seconds since the Epoch +// (00:00:00 UTC, January 1, 1970), not including any added leap second. +// Also see Time definition in spec: https://w3c.github.io/encrypted-media/#time +// Note that Time is defined in millisecond accuracy in the spec but in second +// accuracy here. +typedef double Time; + +// An input buffer can be split into several continuous subsamples. +// A SubsampleEntry specifies the number of clear and cipher bytes in each +// subsample. For example, the following buffer has three subsamples: +// +// |<----- subsample1 ----->|<----- subsample2 ----->|<----- subsample3 ----->| +// | clear1 | cipher1 | clear2 | cipher2 | clear3 | cipher3 | +// +// For decryption, all of the cipher bytes in a buffer should be concatenated +// (in the subsample order) into a single logical stream. The clear bytes should +// not be considered as part of decryption. +// +// Stream to decrypt: | cipher1 | cipher2 | cipher3 | +// Decrypted stream: | decrypted1| decrypted2 | decrypted3 | +// +// After decryption, the decrypted bytes should be copied over the position +// of the corresponding cipher bytes in the original buffer to form the output +// buffer. Following the above example, the decrypted buffer should be: +// +// |<----- subsample1 ----->|<----- subsample2 ----->|<----- subsample3 ----->| +// | clear1 | decrypted1| clear2 | decrypted2 | clear3 | decrypted3 | +// +struct SubsampleEntry { + uint32_t clear_bytes; + uint32_t cipher_bytes; +}; +CHECK_TYPE(SubsampleEntry, 8, 8); + +// Represents an input buffer to be decrypted (and possibly decoded). It does +// not own any pointers in this struct. If |encryption_scheme| = kUnencrypted, +// the data is unencrypted. +// Note that this struct is organized so that sizeof(InputBuffer_2) +// equals the sum of sizeof() all members in both 32-bit and 64-bit compiles. +// Padding has been added to keep the fields aligned. +struct InputBuffer_2 { + const uint8_t* data; // Pointer to the beginning of the input data. + uint32_t data_size; // Size (in bytes) of |data|. + + EncryptionScheme encryption_scheme; + + const uint8_t* key_id; // Key ID to identify the decryption key. + uint32_t key_id_size; // Size (in bytes) of |key_id|. + uint32_t : 32; // Padding. + + const uint8_t* iv; // Initialization vector. + uint32_t iv_size; // Size (in bytes) of |iv|. + uint32_t : 32; // Padding. + + const struct SubsampleEntry* subsamples; + uint32_t num_subsamples; // Number of subsamples in |subsamples|. + uint32_t : 32; // Padding. + + // |pattern| is required if |encryption_scheme| specifies pattern encryption. + Pattern pattern; + + int64_t timestamp; // Presentation timestamp in microseconds. +}; +CHECK_TYPE(InputBuffer_2, 64, 80); + +enum AudioCodec : uint32_t { kUnknownAudioCodec = 0, kCodecVorbis, kCodecAac }; +CHECK_TYPE(AudioCodec, 4, 4); + +struct AudioDecoderConfig_2 { + AudioCodec codec; + int32_t channel_count; + int32_t bits_per_channel; + int32_t samples_per_second; + + // Optional byte data required to initialize audio decoders, such as the + // vorbis setup header. + uint8_t* extra_data; + uint32_t extra_data_size; + + // Encryption scheme. + EncryptionScheme encryption_scheme; +}; +CHECK_TYPE(AudioDecoderConfig_2, 28, 32); + +// Supported sample formats for AudioFrames. +enum AudioFormat : uint32_t { + kUnknownAudioFormat = 0, // Unknown format value. Used for error reporting. + kAudioFormatU8, // Interleaved unsigned 8-bit w/ bias of 128. + kAudioFormatS16, // Interleaved signed 16-bit. + kAudioFormatS32, // Interleaved signed 32-bit. + kAudioFormatF32, // Interleaved float 32-bit. + kAudioFormatPlanarS16, // Signed 16-bit planar. + kAudioFormatPlanarF32, // Float 32-bit planar. +}; +CHECK_TYPE(AudioFormat, 4, 4); + +// Surface formats based on FOURCC labels, see: http://www.fourcc.org/yuv.php +// Values are chosen to be consistent with Chromium's VideoPixelFormat values. +enum VideoFormat : uint32_t { + kUnknownVideoFormat = 0, // Unknown format value. Used for error reporting. + kYv12 = 1, // 12bpp YVU planar 1x1 Y, 2x2 VU samples. + kI420 = 2, // 12bpp YUV planar 1x1 Y, 2x2 UV samples. + + // In the following formats, each sample uses 16-bit in storage, while the + // sample value is stored in the least significant N bits where N is + // specified by the number after "P". For example, for YUV420P9, each Y, U, + // and V sample is stored in the least significant 9 bits in a 2-byte block. + kYUV420P9 = 16, + kYUV420P10 = 17, + kYUV422P9 = 18, + kYUV422P10 = 19, + kYUV444P9 = 20, + kYUV444P10 = 21, + kYUV420P12 = 22, + kYUV422P12 = 23, + kYUV444P12 = 24, +}; +CHECK_TYPE(VideoFormat, 4, 4); + +struct Size { + int32_t width; + int32_t height; +}; +CHECK_TYPE(Size, 8, 8); + +enum VideoCodec : uint32_t { + kUnknownVideoCodec = 0, + kCodecVp8, + kCodecH264, + kCodecVp9, + kCodecAv1 +}; +CHECK_TYPE(VideoCodec, 4, 4); + +enum VideoCodecProfile : uint32_t { + kUnknownVideoCodecProfile = 0, + kProfileNotNeeded, + kH264ProfileBaseline, + kH264ProfileMain, + kH264ProfileExtended, + kH264ProfileHigh, + kH264ProfileHigh10, + kH264ProfileHigh422, + kH264ProfileHigh444Predictive, + kVP9Profile0, + kVP9Profile1, + kVP9Profile2, + kVP9Profile3, + kAv1ProfileMain, + kAv1ProfileHigh, + kAv1ProfilePro +}; +CHECK_TYPE(VideoCodecProfile, 4, 4); + +// Deprecated: New CDM implementations should use VideoDecoderConfig_3. +// Note that this struct is organized so that sizeof(VideoDecoderConfig_2) +// equals the sum of sizeof() all members in both 32-bit and 64-bit compiles. +// Padding has been added to keep the fields aligned. +struct VideoDecoderConfig_2 { + VideoCodec codec; + VideoCodecProfile profile; + VideoFormat format; + uint32_t : 32; // Padding. + + // Width and height of video frame immediately post-decode. Not all pixels + // in this region are valid. + Size coded_size; + + // Optional byte data required to initialize video decoders, such as H.264 + // AAVC data. + uint8_t* extra_data; + uint32_t extra_data_size; + + // Encryption scheme. + EncryptionScheme encryption_scheme; +}; +CHECK_TYPE(VideoDecoderConfig_2, 36, 40); + +struct VideoDecoderConfig_3 { + VideoCodec codec; + VideoCodecProfile profile; + VideoFormat format; + ColorSpace color_space; + + // Width and height of video frame immediately post-decode. Not all pixels + // in this region are valid. + Size coded_size; + + // Optional byte data required to initialize video decoders, such as H.264 + // AAVC data. + uint8_t* extra_data; + uint32_t extra_data_size; + + EncryptionScheme encryption_scheme; +}; +CHECK_TYPE(VideoDecoderConfig_3, 36, 40); + +enum StreamType : uint32_t { kStreamTypeAudio = 0, kStreamTypeVideo = 1 }; +CHECK_TYPE(StreamType, 4, 4); + +// Structure provided to ContentDecryptionModule::OnPlatformChallengeResponse() +// after a platform challenge was initiated via Host::SendPlatformChallenge(). +// All values will be NULL / zero in the event of a challenge failure. +struct PlatformChallengeResponse { + // |challenge| provided during Host::SendPlatformChallenge() combined with + // nonce data and signed with the platform's private key. + const uint8_t* signed_data; + uint32_t signed_data_length; + + // RSASSA-PKCS1-v1_5-SHA256 signature of the |signed_data| block. + const uint8_t* signed_data_signature; + uint32_t signed_data_signature_length; + + // X.509 device specific certificate for the |service_id| requested. + const uint8_t* platform_key_certificate; + uint32_t platform_key_certificate_length; +}; +CHECK_TYPE(PlatformChallengeResponse, 24, 48); + +// The current status of the associated key. The valid types are defined in the +// spec: https://w3c.github.io/encrypted-media/#dom-mediakeystatus +enum KeyStatus : uint32_t { + kUsable = 0, + kInternalError = 1, + kExpired = 2, + kOutputRestricted = 3, + kOutputDownscaled = 4, + kStatusPending = 5, + kReleased = 6 +}; +CHECK_TYPE(KeyStatus, 4, 4); + +// The current status of the associated key. The valid types are defined in the +// spec: https://w3c.github.io/encrypted-media/#dom-mediakeystatus +// Note: For forward compatibility, Host implementations must gracefully handle +// unexpected (new) enum values, e.g. no-op. This is used by the CDM Interfaces +// starting from CDM_12. +enum class KeyStatus_2 : uint32_t { + kUsable = 0, + kInternalError = 1, + kExpired = 2, + kOutputRestricted = 3, + kOutputDownscaled = 4, + kStatusPending = 5, + kReleased = 6, + kUsableInFuture = 7 +}; +CHECK_TYPE(KeyStatus_2, 4, 4); + +// Used when passing arrays of key information. Does not own the referenced +// data. |system_code| is an additional error code for unusable keys and +// should be 0 when |status| == kUsable. +struct KeyInformation { + const uint8_t* key_id; + uint32_t key_id_size; + KeyStatus status; + uint32_t system_code; +}; +CHECK_TYPE(KeyInformation, 16, 24); + +// Used when passing arrays of key information. Does not own the referenced +// data. |system_code| is an additional error code for unusable keys and +// should be 0 when |status| == kUsable. Used by CDM12 and beyond. +struct KeyInformation_2 { + const uint8_t* key_id; + uint32_t key_id_size; + KeyStatus_2 status; + uint32_t system_code; +}; +CHECK_TYPE(KeyInformation_2, 16, 24); + +// Supported output protection methods for use with EnableOutputProtection() and +// returned by OnQueryOutputProtectionStatus(). +enum OutputProtectionMethods : uint32_t { + kProtectionNone = 0, + kProtectionHDCP = 1 << 0 +}; +CHECK_TYPE(OutputProtectionMethods, 4, 4); + +// Connected output link types returned by OnQueryOutputProtectionStatus(). +enum OutputLinkTypes : uint32_t { + kLinkTypeNone = 0, + kLinkTypeUnknown = 1 << 0, + kLinkTypeInternal = 1 << 1, + kLinkTypeVGA = 1 << 2, + kLinkTypeHDMI = 1 << 3, + kLinkTypeDVI = 1 << 4, + kLinkTypeDisplayPort = 1 << 5, + kLinkTypeNetwork = 1 << 6 +}; +CHECK_TYPE(OutputLinkTypes, 4, 4); + +// Result of the QueryOutputProtectionStatus() call. +enum QueryResult : uint32_t { kQuerySucceeded = 0, kQueryFailed }; +CHECK_TYPE(QueryResult, 4, 4); + +// The Initialization Data Type. The valid types are defined in the spec: +// https://w3c.github.io/encrypted-media/format-registry/initdata/index.html#registry +enum InitDataType : uint32_t { kCenc = 0, kKeyIds = 1, kWebM = 2 }; +CHECK_TYPE(InitDataType, 4, 4); + +// The type of session to create. The valid types are defined in the spec: +// https://w3c.github.io/encrypted-media/#dom-mediakeysessiontype +enum SessionType : uint32_t { + kTemporary = 0, + kPersistentLicense = 1 +}; +CHECK_TYPE(SessionType, 4, 4); + +// The type of the message event. The valid types are defined in the spec: +// https://w3c.github.io/encrypted-media/#dom-mediakeymessagetype +enum MessageType : uint32_t { + kLicenseRequest = 0, + kLicenseRenewal = 1, + kLicenseRelease = 2, + kIndividualizationRequest = 3 +}; +CHECK_TYPE(MessageType, 4, 4); + +enum HdcpVersion : uint32_t { + kHdcpVersionNone, + kHdcpVersion1_0, + kHdcpVersion1_1, + kHdcpVersion1_2, + kHdcpVersion1_3, + kHdcpVersion1_4, + kHdcpVersion2_0, + kHdcpVersion2_1, + kHdcpVersion2_2, + kHdcpVersion2_3 +}; +CHECK_TYPE(HdcpVersion, 4, 4); + +struct Policy { + HdcpVersion min_hdcp_version; +}; +CHECK_TYPE(Policy, 4, 4); + +// Represents a buffer created by Allocator implementations. +class CDM_CLASS_API Buffer { + public: + // Destroys the buffer in the same context as it was created. + virtual void Destroy() = 0; + + virtual uint32_t Capacity() const = 0; + virtual uint8_t* Data() = 0; + virtual void SetSize(uint32_t size) = 0; + virtual uint32_t Size() const = 0; + + protected: + Buffer() {} + virtual ~Buffer() {} + + private: + Buffer(const Buffer&); + void operator=(const Buffer&); +}; + +// Represents a decrypted block that has not been decoded. +class CDM_CLASS_API DecryptedBlock { + public: + virtual void SetDecryptedBuffer(Buffer* buffer) = 0; + virtual Buffer* DecryptedBuffer() = 0; + + // TODO(tomfinegan): Figure out if timestamp is really needed. If it is not, + // we can just pass Buffer pointers around. + virtual void SetTimestamp(int64_t timestamp) = 0; + virtual int64_t Timestamp() const = 0; + + protected: + DecryptedBlock() {} + virtual ~DecryptedBlock() {} +}; + +// This intentionally avoids using an enum, since it will be used to do math +// with other enums, which is deprecated in C++20. +using VideoPlane = uint32_t; +constexpr VideoPlane kYPlane = 0; +constexpr VideoPlane kUPlane = 1; +constexpr VideoPlane kVPlane = 2; +constexpr VideoPlane kMaxPlanes = 3; +CHECK_TYPE(VideoPlane, 4, 4); + +class CDM_CLASS_API VideoFrame { + public: + virtual void SetFormat(VideoFormat format) = 0; + virtual VideoFormat Format() const = 0; + + virtual void SetSize(cdm::Size size) = 0; + virtual cdm::Size Size() const = 0; + + virtual void SetFrameBuffer(Buffer* frame_buffer) = 0; + virtual Buffer* FrameBuffer() = 0; + + virtual void SetPlaneOffset(VideoPlane plane, uint32_t offset) = 0; + virtual uint32_t PlaneOffset(VideoPlane plane) = 0; + + virtual void SetStride(VideoPlane plane, uint32_t stride) = 0; + virtual uint32_t Stride(VideoPlane plane) = 0; + + // Sets and gets the presentation timestamp which is in microseconds. + virtual void SetTimestamp(int64_t timestamp) = 0; + virtual int64_t Timestamp() const = 0; + + protected: + VideoFrame() {} + virtual ~VideoFrame() {} +}; + +// Represents a decoded video frame. The CDM should call the interface methods +// to set the frame attributes. See DecryptAndDecodeFrame(). +class CDM_CLASS_API VideoFrame_2 { + public: + virtual void SetFormat(VideoFormat format) = 0; + virtual void SetSize(cdm::Size size) = 0; + virtual void SetFrameBuffer(Buffer* frame_buffer) = 0; + virtual void SetPlaneOffset(VideoPlane plane, uint32_t offset) = 0; + virtual void SetStride(VideoPlane plane, uint32_t stride) = 0; + // Sets the presentation timestamp which is in microseconds. + virtual void SetTimestamp(int64_t timestamp) = 0; + virtual void SetColorSpace(ColorSpace color_space) = 0; + + protected: + VideoFrame_2() {} + virtual ~VideoFrame_2() {} +}; + +// Represents decrypted and decoded audio frames. AudioFrames can contain +// multiple audio output buffers, which are serialized into this format: +// +// |<------------------- serialized audio buffer ------------------->| +// | int64_t timestamp | int64_t length | length bytes of audio data | +// +// For example, with three audio output buffers, the AudioFrames will look +// like this: +// +// |<----------------- AudioFrames ------------------>| +// | audio buffer 0 | audio buffer 1 | audio buffer 2 | +class CDM_CLASS_API AudioFrames { + public: + virtual void SetFrameBuffer(Buffer* buffer) = 0; + virtual Buffer* FrameBuffer() = 0; + + // The CDM must call this method, providing a valid format, when providing + // frame buffers. Planar data should be stored end to end; e.g., + // |ch1 sample1||ch1 sample2|....|ch1 sample_last||ch2 sample1|... + virtual void SetFormat(AudioFormat format) = 0; + virtual AudioFormat Format() const = 0; + + protected: + AudioFrames() {} + virtual ~AudioFrames() {} +}; + +// FileIO interface provides a way for the CDM to store data in a file in +// persistent storage. This interface aims only at providing basic read/write +// capabilities and should not be used as a full fledged file IO API. +// Each CDM and origin (e.g. HTTPS, "foo.example.com", 443) combination has +// its own persistent storage. All instances of a given CDM associated with a +// given origin share the same persistent storage. +// Note to implementors of this interface: +// Per-origin storage and the ability for users to clear it are important. +// See http://www.w3.org/TR/encrypted-media/#privacy-storedinfo. +class CDM_CLASS_API FileIO { + public: + // Opens the file with |file_name| for read and write. + // FileIOClient::OnOpenComplete() will be called after the opening + // operation finishes. + // - When the file is opened by a CDM instance, it will be classified as "in + // use". In this case other CDM instances in the same domain may receive + // kInUse status when trying to open it. + // - |file_name| must only contain letters (A-Za-z), digits(0-9), or "._-". + // It must not start with an underscore ('_'), and must be at least 1 + // character and no more than 256 characters long. + virtual void Open(const char* file_name, uint32_t file_name_size) = 0; + + // Reads the contents of the file. FileIOClient::OnReadComplete() will be + // called with the read status. Read() should not be called if a previous + // Read() or Write() call is still pending; otherwise OnReadComplete() will + // be called with kInUse. + virtual void Read() = 0; + + // Writes |data_size| bytes of |data| into the file. + // FileIOClient::OnWriteComplete() will be called with the write status. + // All existing contents in the file will be overwritten. Calling Write() with + // NULL |data| will clear all contents in the file. Write() should not be + // called if a previous Write() or Read() call is still pending; otherwise + // OnWriteComplete() will be called with kInUse. + virtual void Write(const uint8_t* data, uint32_t data_size) = 0; + + // Closes the file if opened, destroys this FileIO object and releases any + // resources allocated. The CDM must call this method when it finished using + // this object. A FileIO object must not be used after Close() is called. + virtual void Close() = 0; + + protected: + FileIO() {} + virtual ~FileIO() {} +}; + +// Responses to FileIO calls. All responses will be called asynchronously. +// When kError is returned, the FileIO object could be in an error state. All +// following calls (other than Close()) could return kError. The CDM should +// still call Close() to destroy the FileIO object. +class CDM_CLASS_API FileIOClient { + public: + enum class Status : uint32_t { kSuccess = 0, kInUse, kError }; + + // Response to a FileIO::Open() call with the open |status|. + virtual void OnOpenComplete(Status status) = 0; + + // Response to a FileIO::Read() call to provide |data_size| bytes of |data| + // read from the file. + // - kSuccess indicates that all contents of the file has been successfully + // read. In this case, 0 |data_size| means that the file is empty. + // - kInUse indicates that there are other read/write operations pending. + // - kError indicates read failure, e.g. the storage is not open or cannot be + // fully read. + virtual void OnReadComplete(Status status, + const uint8_t* data, + uint32_t data_size) = 0; + + // Response to a FileIO::Write() call. + // - kSuccess indicates that all the data has been written into the file + // successfully. + // - kInUse indicates that there are other read/write operations pending. + // - kError indicates write failure, e.g. the storage is not open or cannot be + // fully written. Upon write failure, the contents of the file should be + // regarded as corrupt and should not used. + virtual void OnWriteComplete(Status status) = 0; + + protected: + FileIOClient() {} + virtual ~FileIOClient() {} +}; + +// Metrics that will be reported from the CDM through the ReportMetrics() +// function. To add a new metric, please add it to the end of this enum list +// without changing any existing enum values. +// Note: For forward compatibility, Host implementations must gracefully handle +// unexpected (new) enum values, e.g. no-op. +enum MetricName : uint32_t { + kSdkVersion, + kCertificateSerialNumber, + kDecoderBypassBlockCount, +}; +CHECK_TYPE(MetricName, 4, 4); + +class CDM_CLASS_API Host_10; +class CDM_CLASS_API Host_11; +class CDM_CLASS_API Host_12; + +// ContentDecryptionModule interface that all CDMs need to implement. +// The interface is versioned for backward compatibility. +// Note: ContentDecryptionModule implementations must use the allocator +// provided in CreateCdmInstance() to allocate any Buffer that needs to +// be passed back to the caller. Implementations must call Buffer::Destroy() +// when a Buffer is created that will never be returned to the caller. +class CDM_CLASS_API ContentDecryptionModule_10 { + public: + static const int kVersion = 10; + static const bool kIsStable = true; + typedef Host_10 Host; + + // Initializes the CDM instance, providing information about permitted + // functionalities. The CDM must respond by calling Host::OnInitialized() + // with whether the initialization succeeded. No other calls will be made by + // the host before Host::OnInitialized() returns. + // If |allow_distinctive_identifier| is false, messages from the CDM, + // such as message events, must not contain a Distinctive Identifier, + // even in an encrypted form. + // If |allow_persistent_state| is false, the CDM must not attempt to + // persist state. Calls to CreateFileIO() will fail. + // If |use_hw_secure_codecs| is true, the CDM must ensure the decryption key + // and video buffers (compressed and uncompressed) are securely protected by + // hardware. + virtual void Initialize(bool allow_distinctive_identifier, + bool allow_persistent_state, + bool use_hw_secure_codecs) = 0; + + // Gets the key status if the CDM has a hypothetical key with the |policy|. + // The CDM must respond by calling either Host::OnResolveKeyStatusPromise() + // with the result key status or Host::OnRejectPromise() if an unexpected + // error happened or this method is not supported. + virtual void GetStatusForPolicy(uint32_t promise_id, + const Policy& policy) = 0; + + // SetServerCertificate(), CreateSessionAndGenerateRequest(), LoadSession(), + // UpdateSession(), CloseSession(), and RemoveSession() all accept a + // |promise_id|, which must be passed to the completion Host method + // (e.g. Host::OnResolveNewSessionPromise()). + + // Provides a server certificate to be used to encrypt messages to the + // license server. The CDM must respond by calling either + // Host::OnResolvePromise() or Host::OnRejectPromise(). + // If the CDM does not support server certificates, the promise should be + // rejected with kExceptionNotSupportedError. If |server_certificate_data| + // is empty, reject with kExceptionTypeError. Any other error should be + // rejected with kExceptionInvalidStateError or kExceptionQuotaExceededError. + // TODO(crbug.com/796417): Add support for the promise to return true or + // false, rather than using kExceptionNotSupportedError to mean false. + virtual void SetServerCertificate(uint32_t promise_id, + const uint8_t* server_certificate_data, + uint32_t server_certificate_data_size) = 0; + + // Creates a session given |session_type|, |init_data_type|, and |init_data|. + // The CDM must respond by calling either Host::OnResolveNewSessionPromise() + // or Host::OnRejectPromise(). + virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, + SessionType session_type, + InitDataType init_data_type, + const uint8_t* init_data, + uint32_t init_data_size) = 0; + + // Loads the session of type |session_type| specified by |session_id|. + // The CDM must respond by calling either Host::OnResolveNewSessionPromise() + // or Host::OnRejectPromise(). If the session is not found, call + // Host::OnResolveNewSessionPromise() with session_id = NULL. + virtual void LoadSession(uint32_t promise_id, + SessionType session_type, + const char* session_id, + uint32_t session_id_size) = 0; + + // Updates the session with |response|. The CDM must respond by calling + // either Host::OnResolvePromise() or Host::OnRejectPromise(). + virtual void UpdateSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size, + const uint8_t* response, + uint32_t response_size) = 0; + + // Requests that the CDM close the session. The CDM must respond by calling + // either Host::OnResolvePromise() or Host::OnRejectPromise() when the request + // has been processed. This may be before the session is closed. Once the + // session is closed, Host::OnSessionClosed() must also be called. + virtual void CloseSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Removes any stored session data associated with this session. Will only be + // called for persistent sessions. The CDM must respond by calling either + // Host::OnResolvePromise() or Host::OnRejectPromise() when the request has + // been processed. + virtual void RemoveSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Performs scheduled operation with |context| when the timer fires. + virtual void TimerExpired(void* context) = 0; + + // Decrypts the |encrypted_buffer|. // - // |<----- subsample1 ----->|<----- subsample2 ----->|<----- subsample3 ----->| - // | clear1 | cipher1 | clear2 | cipher2 | clear3 | cipher3 | + // Returns kSuccess if decryption succeeded, in which case the callee + // should have filled the |decrypted_buffer| and passed the ownership of + // |data| in |decrypted_buffer| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kDecryptError if any other error happened. + // If the return value is not kSuccess, |decrypted_buffer| should be ignored + // by the caller. + virtual Status Decrypt(const InputBuffer_2& encrypted_buffer, + DecryptedBlock* decrypted_buffer) = 0; + + // Initializes the CDM audio decoder with |audio_decoder_config|. This + // function must be called before DecryptAndDecodeSamples() is called. // - // For decryption, all of the cipher bytes in a buffer should be concatenated - // (in the subsample order) into a single logical stream. The clear bytes should - // not be considered as part of decryption. - // - // Stream to decrypt: | cipher1 | cipher2 | cipher3 | - // Decrypted stream: | decrypted1| decrypted2 | decrypted3 | - // - // After decryption, the decrypted bytes should be copied over the position - // of the corresponding cipher bytes in the original buffer to form the output - // buffer. Following the above example, the decrypted buffer should be: - // - // |<----- subsample1 ----->|<----- subsample2 ----->|<----- subsample3 ----->| - // | clear1 | decrypted1| clear2 | decrypted2 | clear3 | decrypted3 | - // - struct SubsampleEntry { - uint32_t clear_bytes; - uint32_t cipher_bytes; - }; - CHECK_TYPE(SubsampleEntry, 8, 8); - - // Represents an input buffer to be decrypted (and possibly decoded). It does - // not own any pointers in this struct. If |iv_size| = 0, the data is - // unencrypted. - // Deprecated: New CDM implementations should use InputBuffer_2. - struct InputBuffer_1 { - const uint8_t* data; // Pointer to the beginning of the input data. - uint32_t data_size; // Size (in bytes) of |data|. - - const uint8_t* key_id; // Key ID to identify the decryption key. - uint32_t key_id_size; // Size (in bytes) of |key_id|. - - const uint8_t* iv; // Initialization vector. - uint32_t iv_size; // Size (in bytes) of |iv|. - - const struct SubsampleEntry* subsamples; - uint32_t num_subsamples; // Number of subsamples in |subsamples|. - - int64_t timestamp; // Presentation timestamp in microseconds. - }; - CHECK_TYPE(InputBuffer_1, 40, 72); - - // Represents an input buffer to be decrypted (and possibly decoded). It does - // not own any pointers in this struct. If |encryption_scheme| = kUnencrypted, - // the data is unencrypted. - // Note that this struct is organized so that sizeof(InputBuffer_2) - // equals the sum of sizeof() all members in both 32-bit and 64-bit compiles. - // Padding has been added to keep the fields aligned. - struct InputBuffer_2 { - const uint8_t* data; // Pointer to the beginning of the input data. - uint32_t data_size; // Size (in bytes) of |data|. - - EncryptionScheme encryption_scheme; - - const uint8_t* key_id; // Key ID to identify the decryption key. - uint32_t key_id_size; // Size (in bytes) of |key_id|. - uint32_t : 32; // Padding. - - const uint8_t* iv; // Initialization vector. - uint32_t iv_size; // Size (in bytes) of |iv|. - uint32_t : 32; // Padding. - - const struct SubsampleEntry* subsamples; - uint32_t num_subsamples; // Number of subsamples in |subsamples|. - uint32_t : 32; // Padding. - - // |pattern| is required if |encryption_scheme| specifies pattern encryption. - Pattern pattern; - - int64_t timestamp; // Presentation timestamp in microseconds. - }; - CHECK_TYPE(InputBuffer_2, 64, 80); - - enum AudioCodec : uint32_t { kUnknownAudioCodec = 0, kCodecVorbis, kCodecAac }; - CHECK_TYPE(AudioCodec, 4, 4); - - // Deprecated: New CDM implementations should use AudioDecoderConfig_2. - struct AudioDecoderConfig_1 { - AudioCodec codec; - int32_t channel_count; - int32_t bits_per_channel; - int32_t samples_per_second; - - // Optional byte data required to initialize audio decoders, such as the - // vorbis setup header. - uint8_t* extra_data; - uint32_t extra_data_size; - }; - CHECK_TYPE(AudioDecoderConfig_1, 24, 32); - - struct AudioDecoderConfig_2 { - AudioCodec codec; - int32_t channel_count; - int32_t bits_per_channel; - int32_t samples_per_second; - - // Optional byte data required to initialize audio decoders, such as the - // vorbis setup header. - uint8_t* extra_data; - uint32_t extra_data_size; - - // Encryption scheme. - EncryptionScheme encryption_scheme; - }; - CHECK_TYPE(AudioDecoderConfig_2, 28, 32); - - // Supported sample formats for AudioFrames. - enum AudioFormat : uint32_t { - kUnknownAudioFormat = 0, // Unknown format value. Used for error reporting. - kAudioFormatU8, // Interleaved unsigned 8-bit w/ bias of 128. - kAudioFormatS16, // Interleaved signed 16-bit. - kAudioFormatS32, // Interleaved signed 32-bit. - kAudioFormatF32, // Interleaved float 32-bit. - kAudioFormatPlanarS16, // Signed 16-bit planar. - kAudioFormatPlanarF32, // Float 32-bit planar. - }; - CHECK_TYPE(AudioFormat, 4, 4); - - // Surface formats based on FOURCC labels, see: http://www.fourcc.org/yuv.php - // Values are chosen to be consistent with Chromium's VideoPixelFormat values. - enum VideoFormat : uint32_t { - kUnknownVideoFormat = 0, // Unknown format value. Used for error reporting. - kYv12 = 1, // 12bpp YVU planar 1x1 Y, 2x2 VU samples. - kI420 = 2, // 12bpp YUV planar 1x1 Y, 2x2 UV samples. - - // In the following formats, each sample uses 16-bit in storage, while the - // sample value is stored in the least significant N bits where N is - // specified by the number after "P". For example, for YUV420P9, each Y, U, - // and V sample is stored in the least significant 9 bits in a 2-byte block. - kYUV420P9 = 16, - kYUV420P10 = 17, - kYUV422P9 = 18, - kYUV422P10 = 19, - kYUV444P9 = 20, - kYUV444P10 = 21, - kYUV420P12 = 22, - kYUV422P12 = 23, - kYUV444P12 = 24, - }; - CHECK_TYPE(VideoFormat, 4, 4); - - struct Size { - int32_t width; - int32_t height; - }; - CHECK_TYPE(Size, 8, 8); - - enum VideoCodec : uint32_t { - kUnknownVideoCodec = 0, - kCodecVp8, - kCodecH264, - kCodecVp9, - kCodecAv1 - }; - CHECK_TYPE(VideoCodec, 4, 4); - - enum VideoCodecProfile : uint32_t { - kUnknownVideoCodecProfile = 0, - kProfileNotNeeded, - kH264ProfileBaseline, - kH264ProfileMain, - kH264ProfileExtended, - kH264ProfileHigh, - kH264ProfileHigh10, - kH264ProfileHigh422, - kH264ProfileHigh444Predictive, - // VP9 Profiles are only passed in starting from CDM_9. - kVP9Profile0, - kVP9Profile1, - kVP9Profile2, - kVP9Profile3, - kAv1ProfileMain, - kAv1ProfileHigh, - kAv1ProfilePro - }; - CHECK_TYPE(VideoCodecProfile, 4, 4); - - // Deprecated: New CDM implementations should use VideoDecoderConfig_3. - struct VideoDecoderConfig_1 { - VideoCodec codec; - VideoCodecProfile profile; - VideoFormat format; - - // Width and height of video frame immediately post-decode. Not all pixels - // in this region are valid. - Size coded_size; - - // Optional byte data required to initialize video decoders, such as H.264 - // AAVC data. - uint8_t* extra_data; - uint32_t extra_data_size; - }; - CHECK_TYPE(VideoDecoderConfig_1, 28, 40); - - // Deprecated: New CDM implementations should use VideoDecoderConfig_3. - // Note that this struct is organized so that sizeof(VideoDecoderConfig_2) - // equals the sum of sizeof() all members in both 32-bit and 64-bit compiles. - // Padding has been added to keep the fields aligned. - struct VideoDecoderConfig_2 { - VideoCodec codec; - VideoCodecProfile profile; - VideoFormat format; - uint32_t : 32; // Padding. - - // Width and height of video frame immediately post-decode. Not all pixels - // in this region are valid. - Size coded_size; - - // Optional byte data required to initialize video decoders, such as H.264 - // AAVC data. - uint8_t* extra_data; - uint32_t extra_data_size; - - // Encryption scheme. - EncryptionScheme encryption_scheme; - }; - CHECK_TYPE(VideoDecoderConfig_2, 36, 40); - - struct VideoDecoderConfig_3 { - VideoCodec codec; - VideoCodecProfile profile; - VideoFormat format; - ColorSpace color_space; - - // Width and height of video frame immediately post-decode. Not all pixels - // in this region are valid. - Size coded_size; - - // Optional byte data required to initialize video decoders, such as H.264 - // AAVC data. - uint8_t* extra_data; - uint32_t extra_data_size; - - EncryptionScheme encryption_scheme; - }; - CHECK_TYPE(VideoDecoderConfig_3, 36, 40); - - enum StreamType : uint32_t { kStreamTypeAudio = 0, kStreamTypeVideo = 1 }; - CHECK_TYPE(StreamType, 4, 4); - - // Structure provided to ContentDecryptionModule::OnPlatformChallengeResponse() - // after a platform challenge was initiated via Host::SendPlatformChallenge(). - // All values will be NULL / zero in the event of a challenge failure. - struct PlatformChallengeResponse { - // |challenge| provided during Host::SendPlatformChallenge() combined with - // nonce data and signed with the platform's private key. - const uint8_t* signed_data; - uint32_t signed_data_length; - - // RSASSA-PKCS1-v1_5-SHA256 signature of the |signed_data| block. - const uint8_t* signed_data_signature; - uint32_t signed_data_signature_length; - - // X.509 device specific certificate for the |service_id| requested. - const uint8_t* platform_key_certificate; - uint32_t platform_key_certificate_length; - }; - CHECK_TYPE(PlatformChallengeResponse, 24, 48); - - // The current status of the associated key. The valid types are defined in the - // spec: https://w3c.github.io/encrypted-media/#idl-def-MediaKeyStatus - enum KeyStatus : uint32_t { - kUsable = 0, - kInternalError = 1, - kExpired = 2, - kOutputRestricted = 3, - kOutputDownscaled = 4, - kStatusPending = 5, - kReleased = 6 - }; - CHECK_TYPE(KeyStatus, 4, 4); - - // Used when passing arrays of key information. Does not own the referenced - // data. |system_code| is an additional error code for unusable keys and - // should be 0 when |status| == kUsable. - struct KeyInformation { - const uint8_t* key_id; - uint32_t key_id_size; - KeyStatus status; - uint32_t system_code; - }; - CHECK_TYPE(KeyInformation, 16, 24); - - // Supported output protection methods for use with EnableOutputProtection() and - // returned by OnQueryOutputProtectionStatus(). - enum OutputProtectionMethods : uint32_t { - kProtectionNone = 0, - kProtectionHDCP = 1 << 0 - }; - CHECK_TYPE(OutputProtectionMethods, 4, 4); - - // Connected output link types returned by OnQueryOutputProtectionStatus(). - enum OutputLinkTypes : uint32_t { - kLinkTypeNone = 0, - kLinkTypeUnknown = 1 << 0, - kLinkTypeInternal = 1 << 1, - kLinkTypeVGA = 1 << 2, - kLinkTypeHDMI = 1 << 3, - kLinkTypeDVI = 1 << 4, - kLinkTypeDisplayPort = 1 << 5, - kLinkTypeNetwork = 1 << 6 - }; - CHECK_TYPE(OutputLinkTypes, 4, 4); - - // Result of the QueryOutputProtectionStatus() call. - enum QueryResult : uint32_t { kQuerySucceeded = 0, kQueryFailed }; - CHECK_TYPE(QueryResult, 4, 4); - - // The Initialization Data Type. The valid types are defined in the spec: - // https://w3c.github.io/encrypted-media/format-registry/initdata/index.html#registry - enum InitDataType : uint32_t { kCenc = 0, kKeyIds = 1, kWebM = 2 }; - CHECK_TYPE(InitDataType, 4, 4); - - // The type of session to create. The valid types are defined in the spec: - // https://w3c.github.io/encrypted-media/#idl-def-SessionType - enum SessionType : uint32_t { - kTemporary = 0, - kPersistentLicense = 1, - kPersistentUsageRecord = 2 - }; - CHECK_TYPE(SessionType, 4, 4); - - // The type of the message event. The valid types are defined in the spec: - // https://w3c.github.io/encrypted-media/#idl-def-MediaKeyMessageType - enum MessageType : uint32_t { - kLicenseRequest = 0, - kLicenseRenewal = 1, - kLicenseRelease = 2, - // Only supported by Host_10 and later. On Host_9 and earlier, it's undefined - // behavior. For example, the host can drop the message or send it using - // other message type. - kIndividualizationRequest = 3 - }; - CHECK_TYPE(MessageType, 4, 4); - - enum HdcpVersion : uint32_t { - kHdcpVersionNone, - kHdcpVersion1_0, - kHdcpVersion1_1, - kHdcpVersion1_2, - kHdcpVersion1_3, - kHdcpVersion1_4, - kHdcpVersion2_0, - kHdcpVersion2_1, - kHdcpVersion2_2, - kHdcpVersion2_3 - }; - CHECK_TYPE(HdcpVersion, 4, 4); - - struct Policy { - HdcpVersion min_hdcp_version; - }; - CHECK_TYPE(Policy, 4, 4); - - // Represents a buffer created by Allocator implementations. - class CDM_CLASS_API Buffer { - public: - // Destroys the buffer in the same context as it was created. - virtual void Destroy() = 0; - - virtual uint32_t Capacity() const = 0; - virtual uint8_t* Data() = 0; - virtual void SetSize(uint32_t size) = 0; - virtual uint32_t Size() const = 0; - - protected: - Buffer() {} - virtual ~Buffer() {} - - private: - Buffer(const Buffer&); - void operator=(const Buffer&); - }; - - // Represents a decrypted block that has not been decoded. - class CDM_CLASS_API DecryptedBlock { - public: - virtual void SetDecryptedBuffer(Buffer* buffer) = 0; - virtual Buffer* DecryptedBuffer() = 0; - - // TODO(tomfinegan): Figure out if timestamp is really needed. If it is not, - // we can just pass Buffer pointers around. - virtual void SetTimestamp(int64_t timestamp) = 0; - virtual int64_t Timestamp() const = 0; - - protected: - DecryptedBlock() {} - virtual ~DecryptedBlock() {} - }; - - enum VideoPlane : uint32_t { - kYPlane = 0, - kUPlane = 1, - kVPlane = 2, - kMaxPlanes = 3, - }; - CHECK_TYPE(VideoPlane, 4, 4); - - class CDM_CLASS_API VideoFrame { - public: - virtual void SetFormat(VideoFormat format) = 0; - virtual VideoFormat Format() const = 0; - - virtual void SetSize(cdm::Size size) = 0; - virtual cdm::Size Size() const = 0; - - virtual void SetFrameBuffer(Buffer* frame_buffer) = 0; - virtual Buffer* FrameBuffer() = 0; - - virtual void SetPlaneOffset(VideoPlane plane, uint32_t offset) = 0; - virtual uint32_t PlaneOffset(VideoPlane plane) = 0; - - virtual void SetStride(VideoPlane plane, uint32_t stride) = 0; - virtual uint32_t Stride(VideoPlane plane) = 0; - - // Sets and gets the presentation timestamp which is in microseconds. - virtual void SetTimestamp(int64_t timestamp) = 0; - virtual int64_t Timestamp() const = 0; - - protected: - VideoFrame() {} - virtual ~VideoFrame() {} - }; - - // Represents a decoded video frame. The CDM should call the interface methods - // to set the frame attributes. See DecryptAndDecodeFrame(). - class CDM_CLASS_API VideoFrame_2 { - public: - virtual void SetFormat(VideoFormat format) = 0; - virtual void SetSize(cdm::Size size) = 0; - virtual void SetFrameBuffer(Buffer* frame_buffer) = 0; - virtual void SetPlaneOffset(VideoPlane plane, uint32_t offset) = 0; - virtual void SetStride(VideoPlane plane, uint32_t stride) = 0; - // Sets the presentation timestamp which is in microseconds. - virtual void SetTimestamp(int64_t timestamp) = 0; - virtual void SetColorSpace(ColorSpace color_space) = 0; - - protected: - VideoFrame_2() {} - virtual ~VideoFrame_2() {} - }; - - // Represents decrypted and decoded audio frames. AudioFrames can contain - // multiple audio output buffers, which are serialized into this format: + // Returns kSuccess if the |audio_decoder_config| is supported and the CDM + // audio decoder is successfully initialized. + // Returns kInitializationError if |audio_decoder_config| is not supported. + // The CDM may still be able to do Decrypt(). + // Returns kDeferredInitialization if the CDM is not ready to initialize the + // decoder at this time. Must call Host::OnDeferredInitializationDone() once + // initialization is complete. + virtual Status InitializeAudioDecoder( + const AudioDecoderConfig_2& audio_decoder_config) = 0; + + // Initializes the CDM video decoder with |video_decoder_config|. This + // function must be called before DecryptAndDecodeFrame() is called. // - // |<------------------- serialized audio buffer ------------------->| - // | int64_t timestamp | int64_t length | length bytes of audio data | + // Returns kSuccess if the |video_decoder_config| is supported and the CDM + // video decoder is successfully initialized. + // Returns kInitializationError if |video_decoder_config| is not supported. + // The CDM may still be able to do Decrypt(). + // Returns kDeferredInitialization if the CDM is not ready to initialize the + // decoder at this time. Must call Host::OnDeferredInitializationDone() once + // initialization is complete. + virtual Status InitializeVideoDecoder( + const VideoDecoderConfig_2& video_decoder_config) = 0; + + // De-initializes the CDM decoder and sets it to an uninitialized state. The + // caller can initialize the decoder again after this call to re-initialize + // it. This can be used to reconfigure the decoder if the configuration + // changes. + virtual void DeinitializeDecoder(StreamType decoder_type) = 0; + + // Resets the CDM decoder to an initialized clean state. All internal buffers + // MUST be flushed. + virtual void ResetDecoder(StreamType decoder_type) = 0; + + // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a + // |video_frame|. Upon end-of-stream, the caller should call this function + // repeatedly with empty |encrypted_buffer| (|data| == NULL) until + // kNeedMoreData is returned. // - // For example, with three audio output buffers, the AudioFrames will look - // like this: + // Returns kSuccess if decryption and decoding both succeeded, in which case + // the callee will have filled the |video_frame| and passed the ownership of + // |frame_buffer| in |video_frame| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kNeedMoreData if more data was needed by the decoder to generate + // a decoded frame (e.g. during initialization and end-of-stream). + // Returns kDecryptError if any decryption error happened. + // Returns kDecodeError if any decoding error happened. + // If the return value is not kSuccess, |video_frame| should be ignored by + // the caller. + virtual Status DecryptAndDecodeFrame(const InputBuffer_2& encrypted_buffer, + VideoFrame* video_frame) = 0; + + // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into + // |audio_frames|. Upon end-of-stream, the caller should call this function + // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty + // |audio_frames| is produced. // - // |<----------------- AudioFrames ------------------>| - // | audio buffer 0 | audio buffer 1 | audio buffer 2 | - class CDM_CLASS_API AudioFrames { - public: - virtual void SetFrameBuffer(Buffer* buffer) = 0; - virtual Buffer* FrameBuffer() = 0; - - // The CDM must call this method, providing a valid format, when providing - // frame buffers. Planar data should be stored end to end; e.g., - // |ch1 sample1||ch1 sample2|....|ch1 sample_last||ch2 sample1|... - virtual void SetFormat(AudioFormat format) = 0; - virtual AudioFormat Format() const = 0; - - protected: - AudioFrames() {} - virtual ~AudioFrames() {} - }; - - // FileIO interface provides a way for the CDM to store data in a file in - // persistent storage. This interface aims only at providing basic read/write - // capabilities and should not be used as a full fledged file IO API. - // Each CDM and origin (e.g. HTTPS, "foo.example.com", 443) combination has - // its own persistent storage. All instances of a given CDM associated with a - // given origin share the same persistent storage. - // Note to implementors of this interface: - // Per-origin storage and the ability for users to clear it are important. - // See http://www.w3.org/TR/encrypted-media/#privacy-storedinfo. - class CDM_CLASS_API FileIO { - public: - // Opens the file with |file_name| for read and write. - // FileIOClient::OnOpenComplete() will be called after the opening - // operation finishes. - // - When the file is opened by a CDM instance, it will be classified as "in - // use". In this case other CDM instances in the same domain may receive - // kInUse status when trying to open it. - // - |file_name| must only contain letters (A-Za-z), digits(0-9), or "._-". - // It must not start with an underscore ('_'), and must be at least 1 - // character and no more than 256 characters long. - virtual void Open(const char* file_name, uint32_t file_name_size) = 0; - - // Reads the contents of the file. FileIOClient::OnReadComplete() will be - // called with the read status. Read() should not be called if a previous - // Read() or Write() call is still pending; otherwise OnReadComplete() will - // be called with kInUse. - virtual void Read() = 0; - - // Writes |data_size| bytes of |data| into the file. - // FileIOClient::OnWriteComplete() will be called with the write status. - // All existing contents in the file will be overwritten. Calling Write() with - // NULL |data| will clear all contents in the file. Write() should not be - // called if a previous Write() or Read() call is still pending; otherwise - // OnWriteComplete() will be called with kInUse. - virtual void Write(const uint8_t* data, uint32_t data_size) = 0; - - // Closes the file if opened, destroys this FileIO object and releases any - // resources allocated. The CDM must call this method when it finished using - // this object. A FileIO object must not be used after Close() is called. - virtual void Close() = 0; - - protected: - FileIO() {} - virtual ~FileIO() {} - }; - - // Responses to FileIO calls. All responses will be called asynchronously. - // When kError is returned, the FileIO object could be in an error state. All - // following calls (other than Close()) could return kError. The CDM should - // still call Close() to destroy the FileIO object. - class CDM_CLASS_API FileIOClient { - public: - enum class Status : uint32_t { kSuccess = 0, kInUse, kError }; - - // Response to a FileIO::Open() call with the open |status|. - virtual void OnOpenComplete(Status status) = 0; - - // Response to a FileIO::Read() call to provide |data_size| bytes of |data| - // read from the file. - // - kSuccess indicates that all contents of the file has been successfully - // read. In this case, 0 |data_size| means that the file is empty. - // - kInUse indicates that there are other read/write operations pending. - // - kError indicates read failure, e.g. the storage is not open or cannot be - // fully read. - virtual void OnReadComplete(Status status, - const uint8_t* data, - uint32_t data_size) = 0; - - // Response to a FileIO::Write() call. - // - kSuccess indicates that all the data has been written into the file - // successfully. - // - kInUse indicates that there are other read/write operations pending. - // - kError indicates write failure, e.g. the storage is not open or cannot be - // fully written. Upon write failure, the contents of the file should be - // regarded as corrupt and should not used. - virtual void OnWriteComplete(Status status) = 0; - - protected: - FileIOClient() {} - virtual ~FileIOClient() {} - }; - - class CDM_CLASS_API Host_9; - class CDM_CLASS_API Host_10; - class CDM_CLASS_API Host_11; - - // ContentDecryptionModule interface that all CDMs need to implement. - // The interface is versioned for backward compatibility. - // Note: ContentDecryptionModule implementations must use the allocator - // provided in CreateCdmInstance() to allocate any Buffer that needs to - // be passed back to the caller. Implementations must call Buffer::Destroy() - // when a Buffer is created that will never be returned to the caller. - class CDM_CLASS_API ContentDecryptionModule_9 { - public: - static const int kVersion = 9; - typedef Host_9 Host; - - // Initializes the CDM instance, providing information about permitted - // functionalities. - // If |allow_distinctive_identifier| is false, messages from the CDM, - // such as message events, must not contain a Distinctive Identifier, - // even in an encrypted form. - // If |allow_persistent_state| is false, the CDM must not attempt to - // persist state. Calls to CreateFileIO() will fail. - virtual void Initialize(bool allow_distinctive_identifier, - bool allow_persistent_state) = 0; - - // Gets the key status if the CDM has a hypothetical key with the |policy|. - // The CDM must respond by calling either Host::OnResolveKeyStatusPromise() - // with the result key status or Host::OnRejectPromise() if an unexpected - // error happened or this method is not supported. - virtual void GetStatusForPolicy(uint32_t promise_id, - const Policy& policy) = 0; - - // SetServerCertificate(), CreateSessionAndGenerateRequest(), LoadSession(), - // UpdateSession(), CloseSession(), and RemoveSession() all accept a - // |promise_id|, which must be passed to the completion Host method - // (e.g. Host::OnResolveNewSessionPromise()). - - // Provides a server certificate to be used to encrypt messages to the - // license server. The CDM must respond by calling either - // Host::OnResolvePromise() or Host::OnRejectPromise(). - virtual void SetServerCertificate(uint32_t promise_id, - const uint8_t* server_certificate_data, - uint32_t server_certificate_data_size) = 0; - - // Creates a session given |session_type|, |init_data_type|, and |init_data|. - // The CDM must respond by calling either Host::OnResolveNewSessionPromise() - // or Host::OnRejectPromise(). - virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, - SessionType session_type, - InitDataType init_data_type, - const uint8_t* init_data, - uint32_t init_data_size) = 0; - - // Loads the session of type |session_type| specified by |session_id|. - // The CDM must respond by calling either Host::OnResolveNewSessionPromise() - // or Host::OnRejectPromise(). If the session is not found, call - // Host::OnResolveNewSessionPromise() with session_id = NULL. - virtual void LoadSession(uint32_t promise_id, - SessionType session_type, - const char* session_id, - uint32_t session_id_size) = 0; - - // Updates the session with |response|. The CDM must respond by calling - // either Host::OnResolvePromise() or Host::OnRejectPromise(). - virtual void UpdateSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size, - const uint8_t* response, - uint32_t response_size) = 0; - - // Requests that the CDM close the session. The CDM must respond by calling - // either Host::OnResolvePromise() or Host::OnRejectPromise() when the request - // has been processed. This may be before the session is closed. Once the - // session is closed, Host::OnSessionClosed() must also be called. - virtual void CloseSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Removes any stored session data associated with this session. Will only be - // called for persistent sessions. The CDM must respond by calling either - // Host::OnResolvePromise() or Host::OnRejectPromise() when the request has - // been processed. - virtual void RemoveSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Performs scheduled operation with |context| when the timer fires. - virtual void TimerExpired(void* context) = 0; - - // Decrypts the |encrypted_buffer|. - // - // Returns kSuccess if decryption succeeded, in which case the callee - // should have filled the |decrypted_buffer| and passed the ownership of - // |data| in |decrypted_buffer| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kDecryptError if any other error happened. - // If the return value is not kSuccess, |decrypted_buffer| should be ignored - // by the caller. - virtual Status Decrypt(const InputBuffer_1& encrypted_buffer, - DecryptedBlock* decrypted_buffer) = 0; - - // Initializes the CDM audio decoder with |audio_decoder_config|. This - // function must be called before DecryptAndDecodeSamples() is called. - // - // Returns kSuccess if the |audio_decoder_config| is supported and the CDM - // audio decoder is successfully initialized. - // Returns kInitializationError if |audio_decoder_config| is not supported. - // The CDM may still be able to do Decrypt(). - // Returns kDeferredInitialization if the CDM is not ready to initialize the - // decoder at this time. Must call Host::OnDeferredInitializationDone() once - // initialization is complete. - virtual Status InitializeAudioDecoder( - const AudioDecoderConfig_1& audio_decoder_config) = 0; - - // Initializes the CDM video decoder with |video_decoder_config|. This - // function must be called before DecryptAndDecodeFrame() is called. - // - // Returns kSuccess if the |video_decoder_config| is supported and the CDM - // video decoder is successfully initialized. - // Returns kInitializationError if |video_decoder_config| is not supported. - // The CDM may still be able to do Decrypt(). - // Returns kDeferredInitialization if the CDM is not ready to initialize the - // decoder at this time. Must call Host::OnDeferredInitializationDone() once - // initialization is complete. - virtual Status InitializeVideoDecoder( - const VideoDecoderConfig_1& video_decoder_config) = 0; - - // De-initializes the CDM decoder and sets it to an uninitialized state. The - // caller can initialize the decoder again after this call to re-initialize - // it. This can be used to reconfigure the decoder if the configuration - // changes. - virtual void DeinitializeDecoder(StreamType decoder_type) = 0; - - // Resets the CDM decoder to an initialized clean state. All internal buffers - // MUST be flushed. - virtual void ResetDecoder(StreamType decoder_type) = 0; - - // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a - // |video_frame|. Upon end-of-stream, the caller should call this function - // repeatedly with empty |encrypted_buffer| (|data| == NULL) until - // kNeedMoreData is returned. - // - // Returns kSuccess if decryption and decoding both succeeded, in which case - // the callee will have filled the |video_frame| and passed the ownership of - // |frame_buffer| in |video_frame| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kNeedMoreData if more data was needed by the decoder to generate - // a decoded frame (e.g. during initialization and end-of-stream). - // Returns kDecryptError if any decryption error happened. - // Returns kDecodeError if any decoding error happened. - // If the return value is not kSuccess, |video_frame| should be ignored by - // the caller. - virtual Status DecryptAndDecodeFrame(const InputBuffer_1& encrypted_buffer, - VideoFrame* video_frame) = 0; - - // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into - // |audio_frames|. Upon end-of-stream, the caller should call this function - // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty - // |audio_frames| is produced. - // - // Returns kSuccess if decryption and decoding both succeeded, in which case - // the callee will have filled |audio_frames| and passed the ownership of - // |data| in |audio_frames| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kNeedMoreData if more data was needed by the decoder to generate - // audio samples (e.g. during initialization and end-of-stream). - // Returns kDecryptError if any decryption error happened. - // Returns kDecodeError if any decoding error happened. - // If the return value is not kSuccess, |audio_frames| should be ignored by - // the caller. - virtual Status DecryptAndDecodeSamples(const InputBuffer_1& encrypted_buffer, - AudioFrames* audio_frames) = 0; - - // Called by the host after a platform challenge was initiated via - // Host::SendPlatformChallenge(). - virtual void OnPlatformChallengeResponse( + // Returns kSuccess if decryption and decoding both succeeded, in which case + // the callee will have filled |audio_frames| and passed the ownership of + // |data| in |audio_frames| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kNeedMoreData if more data was needed by the decoder to generate + // audio samples (e.g. during initialization and end-of-stream). + // Returns kDecryptError if any decryption error happened. + // Returns kDecodeError if any decoding error happened. + // If the return value is not kSuccess, |audio_frames| should be ignored by + // the caller. + virtual Status DecryptAndDecodeSamples(const InputBuffer_2& encrypted_buffer, + AudioFrames* audio_frames) = 0; + + // Called by the host after a platform challenge was initiated via + // Host::SendPlatformChallenge(). + virtual void OnPlatformChallengeResponse( const PlatformChallengeResponse& response) = 0; - // Called by the host after a call to Host::QueryOutputProtectionStatus(). The - // |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask| - // is a bit mask of OutputProtectionMethods. If |result| is kQueryFailed, - // then |link_mask| and |output_protection_mask| are undefined and should - // be ignored. - virtual void OnQueryOutputProtectionStatus( + // Called by the host after a call to Host::QueryOutputProtectionStatus(). The + // |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask| + // is a bit mask of OutputProtectionMethods. If |result| is kQueryFailed, + // then |link_mask| and |output_protection_mask| are undefined and should + // be ignored. + virtual void OnQueryOutputProtectionStatus( QueryResult result, uint32_t link_mask, uint32_t output_protection_mask) = 0; - // Called by the host after a call to Host::RequestStorageId(). If the - // version of the storage ID requested is available, |storage_id| and - // |storage_id_size| are set appropriately. |version| will be the same as - // what was requested, unless 0 (latest) was requested, in which case - // |version| will be the actual version number for the |storage_id| returned. - // If the requested version is not available, null/zero will be provided as - // |storage_id| and |storage_id_size|, respectively, and |version| should be - // ignored. - virtual void OnStorageId(uint32_t version, - const uint8_t* storage_id, - uint32_t storage_id_size) = 0; - - // Destroys the object in the same context as it was created. - virtual void Destroy() = 0; - - protected: - ContentDecryptionModule_9() {} - virtual ~ContentDecryptionModule_9() {} - }; - - // ContentDecryptionModule interface that all CDMs need to implement. - // The interface is versioned for backward compatibility. - // Note: ContentDecryptionModule implementations must use the allocator - // provided in CreateCdmInstance() to allocate any Buffer that needs to - // be passed back to the caller. Implementations must call Buffer::Destroy() - // when a Buffer is created that will never be returned to the caller. - class CDM_CLASS_API ContentDecryptionModule_10 { - public: - static const int kVersion = 10; - static const bool kIsStable = true; - typedef Host_10 Host; - - // Initializes the CDM instance, providing information about permitted - // functionalities. The CDM must respond by calling Host::OnInitialized() - // with whether the initialization succeeded. No other calls will be made by - // the host before Host::OnInitialized() returns. - // If |allow_distinctive_identifier| is false, messages from the CDM, - // such as message events, must not contain a Distinctive Identifier, - // even in an encrypted form. - // If |allow_persistent_state| is false, the CDM must not attempt to - // persist state. Calls to CreateFileIO() will fail. - // If |use_hw_secure_codecs| is true, the CDM must ensure the decryption key - // and video buffers (compressed and uncompressed) are securely protected by - // hardware. - virtual void Initialize(bool allow_distinctive_identifier, - bool allow_persistent_state, - bool use_hw_secure_codecs) = 0; - - // Gets the key status if the CDM has a hypothetical key with the |policy|. - // The CDM must respond by calling either Host::OnResolveKeyStatusPromise() - // with the result key status or Host::OnRejectPromise() if an unexpected - // error happened or this method is not supported. - virtual void GetStatusForPolicy(uint32_t promise_id, - const Policy& policy) = 0; - - // SetServerCertificate(), CreateSessionAndGenerateRequest(), LoadSession(), - // UpdateSession(), CloseSession(), and RemoveSession() all accept a - // |promise_id|, which must be passed to the completion Host method - // (e.g. Host::OnResolveNewSessionPromise()). - - // Provides a server certificate to be used to encrypt messages to the - // license server. The CDM must respond by calling either - // Host::OnResolvePromise() or Host::OnRejectPromise(). - // If the CDM does not support server certificates, the promise should be - // rejected with kExceptionNotSupportedError. If |server_certificate_data| - // is empty, reject with kExceptionTypeError. Any other error should be - // rejected with kExceptionInvalidStateError or kExceptionQuotaExceededError. - // TODO(crbug.com/796417): Add support for the promise to return true or - // false, rather than using kExceptionNotSupportedError to mean false. - virtual void SetServerCertificate(uint32_t promise_id, - const uint8_t* server_certificate_data, - uint32_t server_certificate_data_size) = 0; - - // Creates a session given |session_type|, |init_data_type|, and |init_data|. - // The CDM must respond by calling either Host::OnResolveNewSessionPromise() - // or Host::OnRejectPromise(). - virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, - SessionType session_type, - InitDataType init_data_type, - const uint8_t* init_data, - uint32_t init_data_size) = 0; - - // Loads the session of type |session_type| specified by |session_id|. - // The CDM must respond by calling either Host::OnResolveNewSessionPromise() - // or Host::OnRejectPromise(). If the session is not found, call - // Host::OnResolveNewSessionPromise() with session_id = NULL. - virtual void LoadSession(uint32_t promise_id, - SessionType session_type, - const char* session_id, - uint32_t session_id_size) = 0; - - // Updates the session with |response|. The CDM must respond by calling - // either Host::OnResolvePromise() or Host::OnRejectPromise(). - virtual void UpdateSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size, - const uint8_t* response, - uint32_t response_size) = 0; - - // Requests that the CDM close the session. The CDM must respond by calling - // either Host::OnResolvePromise() or Host::OnRejectPromise() when the request - // has been processed. This may be before the session is closed. Once the - // session is closed, Host::OnSessionClosed() must also be called. - virtual void CloseSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Removes any stored session data associated with this session. Will only be - // called for persistent sessions. The CDM must respond by calling either - // Host::OnResolvePromise() or Host::OnRejectPromise() when the request has - // been processed. - virtual void RemoveSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Performs scheduled operation with |context| when the timer fires. - virtual void TimerExpired(void* context) = 0; - - // Decrypts the |encrypted_buffer|. - // - // Returns kSuccess if decryption succeeded, in which case the callee - // should have filled the |decrypted_buffer| and passed the ownership of - // |data| in |decrypted_buffer| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kDecryptError if any other error happened. - // If the return value is not kSuccess, |decrypted_buffer| should be ignored - // by the caller. - virtual Status Decrypt(const InputBuffer_2& encrypted_buffer, - DecryptedBlock* decrypted_buffer) = 0; - - // Initializes the CDM audio decoder with |audio_decoder_config|. This - // function must be called before DecryptAndDecodeSamples() is called. - // - // Returns kSuccess if the |audio_decoder_config| is supported and the CDM - // audio decoder is successfully initialized. - // Returns kInitializationError if |audio_decoder_config| is not supported. - // The CDM may still be able to do Decrypt(). - // Returns kDeferredInitialization if the CDM is not ready to initialize the - // decoder at this time. Must call Host::OnDeferredInitializationDone() once - // initialization is complete. - virtual Status InitializeAudioDecoder( + // Called by the host after a call to Host::RequestStorageId(). If the + // version of the storage ID requested is available, |storage_id| and + // |storage_id_size| are set appropriately. |version| will be the same as + // what was requested, unless 0 (latest) was requested, in which case + // |version| will be the actual version number for the |storage_id| returned. + // If the requested version is not available, null/zero will be provided as + // |storage_id| and |storage_id_size|, respectively, and |version| should be + // ignored. + virtual void OnStorageId(uint32_t version, + const uint8_t* storage_id, + uint32_t storage_id_size) = 0; + + // Destroys the object in the same context as it was created. + virtual void Destroy() = 0; + + protected: + ContentDecryptionModule_10() {} + virtual ~ContentDecryptionModule_10() {} +}; + +// ContentDecryptionModule interface that all CDMs need to implement. +// The interface is versioned for backward compatibility. +// Note: ContentDecryptionModule implementations must use the allocator +// provided in CreateCdmInstance() to allocate any Buffer that needs to +// be passed back to the caller. Implementations must call Buffer::Destroy() +// when a Buffer is created that will never be returned to the caller. +class CDM_CLASS_API ContentDecryptionModule_11 { + public: + static const int kVersion = 11; + static const bool kIsStable = true; + typedef Host_11 Host; + + // Initializes the CDM instance, providing information about permitted + // functionalities. The CDM must respond by calling Host::OnInitialized() + // with whether the initialization succeeded. No other calls will be made by + // the host before Host::OnInitialized() returns. + // If |allow_distinctive_identifier| is false, messages from the CDM, + // such as message events, must not contain a Distinctive Identifier, + // even in an encrypted form. + // If |allow_persistent_state| is false, the CDM must not attempt to + // persist state. Calls to CreateFileIO() will fail. + // If |use_hw_secure_codecs| is true, the CDM must ensure the decryption key + // and video buffers (compressed and uncompressed) are securely protected by + // hardware. + virtual void Initialize(bool allow_distinctive_identifier, + bool allow_persistent_state, + bool use_hw_secure_codecs) = 0; + + // Gets the key status if the CDM has a hypothetical key with the |policy|. + // The CDM must respond by calling either Host::OnResolveKeyStatusPromise() + // with the result key status or Host::OnRejectPromise() if an unexpected + // error happened or this method is not supported. + virtual void GetStatusForPolicy(uint32_t promise_id, + const Policy& policy) = 0; + + // SetServerCertificate(), CreateSessionAndGenerateRequest(), LoadSession(), + // UpdateSession(), CloseSession(), and RemoveSession() all accept a + // |promise_id|, which must be passed to the completion Host method + // (e.g. Host::OnResolveNewSessionPromise()). + + // Provides a server certificate to be used to encrypt messages to the + // license server. The CDM must respond by calling either + // Host::OnResolvePromise() or Host::OnRejectPromise(). + // If the CDM does not support server certificates, the promise should be + // rejected with kExceptionNotSupportedError. If |server_certificate_data| + // is empty, reject with kExceptionTypeError. Any other error should be + // rejected with kExceptionInvalidStateError or kExceptionQuotaExceededError. + // TODO(crbug.com/796417): Add support for the promise to return true or + // false, rather than using kExceptionNotSupportedError to mean false. + virtual void SetServerCertificate(uint32_t promise_id, + const uint8_t* server_certificate_data, + uint32_t server_certificate_data_size) = 0; + + // Creates a session given |session_type|, |init_data_type|, and |init_data|. + // The CDM must respond by calling either Host::OnResolveNewSessionPromise() + // or Host::OnRejectPromise(). + virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, + SessionType session_type, + InitDataType init_data_type, + const uint8_t* init_data, + uint32_t init_data_size) = 0; + + // Loads the session of type |session_type| specified by |session_id|. + // The CDM must respond by calling either Host::OnResolveNewSessionPromise() + // or Host::OnRejectPromise(). If the session is not found, call + // Host::OnResolveNewSessionPromise() with session_id = NULL. + virtual void LoadSession(uint32_t promise_id, + SessionType session_type, + const char* session_id, + uint32_t session_id_size) = 0; + + // Updates the session with |response|. The CDM must respond by calling + // either Host::OnResolvePromise() or Host::OnRejectPromise(). + virtual void UpdateSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size, + const uint8_t* response, + uint32_t response_size) = 0; + + // Requests that the CDM close the session. The CDM must respond by calling + // either Host::OnResolvePromise() or Host::OnRejectPromise() when the request + // has been processed. This may be before the session is closed. Once the + // session is closed, Host::OnSessionClosed() must also be called. + virtual void CloseSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Removes any stored session data associated with this session. Will only be + // called for persistent sessions. The CDM must respond by calling either + // Host::OnResolvePromise() or Host::OnRejectPromise() when the request has + // been processed. + virtual void RemoveSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Performs scheduled operation with |context| when the timer fires. + virtual void TimerExpired(void* context) = 0; + + // Decrypts the |encrypted_buffer|. + // + // Returns kSuccess if decryption succeeded, in which case the callee + // should have filled the |decrypted_buffer| and passed the ownership of + // |data| in |decrypted_buffer| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kDecryptError if any other error happened. + // If the return value is not kSuccess, |decrypted_buffer| should be ignored + // by the caller. + virtual Status Decrypt(const InputBuffer_2& encrypted_buffer, + DecryptedBlock* decrypted_buffer) = 0; + + // Initializes the CDM audio decoder with |audio_decoder_config|. This + // function must be called before DecryptAndDecodeSamples() is called. + // + // Returns kSuccess if the |audio_decoder_config| is supported and the CDM + // audio decoder is successfully initialized. + // Returns kInitializationError if |audio_decoder_config| is not supported. + // The CDM may still be able to do Decrypt(). + // Returns kDeferredInitialization if the CDM is not ready to initialize the + // decoder at this time. Must call Host::OnDeferredInitializationDone() once + // initialization is complete. + virtual Status InitializeAudioDecoder( const AudioDecoderConfig_2& audio_decoder_config) = 0; - // Initializes the CDM video decoder with |video_decoder_config|. This - // function must be called before DecryptAndDecodeFrame() is called. - // - // Returns kSuccess if the |video_decoder_config| is supported and the CDM - // video decoder is successfully initialized. - // Returns kInitializationError if |video_decoder_config| is not supported. - // The CDM may still be able to do Decrypt(). - // Returns kDeferredInitialization if the CDM is not ready to initialize the - // decoder at this time. Must call Host::OnDeferredInitializationDone() once - // initialization is complete. - virtual Status InitializeVideoDecoder( + // Initializes the CDM video decoder with |video_decoder_config|. This + // function must be called before DecryptAndDecodeFrame() is called. + // + // Returns kSuccess if the |video_decoder_config| is supported and the CDM + // video decoder is successfully initialized. + // Returns kInitializationError if |video_decoder_config| is not supported. + // The CDM may still be able to do Decrypt(). + // Returns kDeferredInitialization if the CDM is not ready to initialize the + // decoder at this time. Must call Host::OnDeferredInitializationDone() once + // initialization is complete. + virtual Status InitializeVideoDecoder( const VideoDecoderConfig_2& video_decoder_config) = 0; - // De-initializes the CDM decoder and sets it to an uninitialized state. The - // caller can initialize the decoder again after this call to re-initialize - // it. This can be used to reconfigure the decoder if the configuration - // changes. - virtual void DeinitializeDecoder(StreamType decoder_type) = 0; - - // Resets the CDM decoder to an initialized clean state. All internal buffers - // MUST be flushed. - virtual void ResetDecoder(StreamType decoder_type) = 0; - - // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a - // |video_frame|. Upon end-of-stream, the caller should call this function - // repeatedly with empty |encrypted_buffer| (|data| == NULL) until - // kNeedMoreData is returned. - // - // Returns kSuccess if decryption and decoding both succeeded, in which case - // the callee will have filled the |video_frame| and passed the ownership of - // |frame_buffer| in |video_frame| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kNeedMoreData if more data was needed by the decoder to generate - // a decoded frame (e.g. during initialization and end-of-stream). - // Returns kDecryptError if any decryption error happened. - // Returns kDecodeError if any decoding error happened. - // If the return value is not kSuccess, |video_frame| should be ignored by - // the caller. - virtual Status DecryptAndDecodeFrame(const InputBuffer_2& encrypted_buffer, - VideoFrame* video_frame) = 0; - - // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into - // |audio_frames|. Upon end-of-stream, the caller should call this function - // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty - // |audio_frames| is produced. - // - // Returns kSuccess if decryption and decoding both succeeded, in which case - // the callee will have filled |audio_frames| and passed the ownership of - // |data| in |audio_frames| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kNeedMoreData if more data was needed by the decoder to generate - // audio samples (e.g. during initialization and end-of-stream). - // Returns kDecryptError if any decryption error happened. - // Returns kDecodeError if any decoding error happened. - // If the return value is not kSuccess, |audio_frames| should be ignored by - // the caller. - virtual Status DecryptAndDecodeSamples(const InputBuffer_2& encrypted_buffer, - AudioFrames* audio_frames) = 0; - - // Called by the host after a platform challenge was initiated via - // Host::SendPlatformChallenge(). - virtual void OnPlatformChallengeResponse( + // De-initializes the CDM decoder and sets it to an uninitialized state. The + // caller can initialize the decoder again after this call to re-initialize + // it. This can be used to reconfigure the decoder if the configuration + // changes. + virtual void DeinitializeDecoder(StreamType decoder_type) = 0; + + // Resets the CDM decoder to an initialized clean state. All internal buffers + // MUST be flushed. + virtual void ResetDecoder(StreamType decoder_type) = 0; + + // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a + // |video_frame|. Upon end-of-stream, the caller should call this function + // repeatedly with empty |encrypted_buffer| (|data| == NULL) until + // kNeedMoreData is returned. + // + // Returns kSuccess if decryption and decoding both succeeded, in which case + // the callee will have filled the |video_frame| and passed the ownership of + // |frame_buffer| in |video_frame| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kNeedMoreData if more data was needed by the decoder to generate + // a decoded frame (e.g. during initialization and end-of-stream). + // Returns kDecryptError if any decryption error happened. + // Returns kDecodeError if any decoding error happened. + // If the return value is not kSuccess, |video_frame| should be ignored by + // the caller. + virtual Status DecryptAndDecodeFrame(const InputBuffer_2& encrypted_buffer, + VideoFrame* video_frame) = 0; + + // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into + // |audio_frames|. Upon end-of-stream, the caller should call this function + // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty + // |audio_frames| is produced. + // + // Returns kSuccess if decryption and decoding both succeeded, in which case + // the callee will have filled |audio_frames| and passed the ownership of + // |data| in |audio_frames| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kNeedMoreData if more data was needed by the decoder to generate + // audio samples (e.g. during initialization and end-of-stream). + // Returns kDecryptError if any decryption error happened. + // Returns kDecodeError if any decoding error happened. + // If the return value is not kSuccess, |audio_frames| should be ignored by + // the caller. + virtual Status DecryptAndDecodeSamples(const InputBuffer_2& encrypted_buffer, + AudioFrames* audio_frames) = 0; + + // Called by the host after a platform challenge was initiated via + // Host::SendPlatformChallenge(). + virtual void OnPlatformChallengeResponse( const PlatformChallengeResponse& response) = 0; - // Called by the host after a call to Host::QueryOutputProtectionStatus(). The - // |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask| - // is a bit mask of OutputProtectionMethods. If |result| is kQueryFailed, - // then |link_mask| and |output_protection_mask| are undefined and should - // be ignored. - virtual void OnQueryOutputProtectionStatus( + // Called by the host after a call to Host::QueryOutputProtectionStatus(). The + // |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask| + // is a bit mask of OutputProtectionMethods. If |result| is kQueryFailed, + // then |link_mask| and |output_protection_mask| are undefined and should + // be ignored. + virtual void OnQueryOutputProtectionStatus( QueryResult result, uint32_t link_mask, uint32_t output_protection_mask) = 0; - // Called by the host after a call to Host::RequestStorageId(). If the - // version of the storage ID requested is available, |storage_id| and - // |storage_id_size| are set appropriately. |version| will be the same as - // what was requested, unless 0 (latest) was requested, in which case - // |version| will be the actual version number for the |storage_id| returned. - // If the requested version is not available, null/zero will be provided as - // |storage_id| and |storage_id_size|, respectively, and |version| should be - // ignored. - virtual void OnStorageId(uint32_t version, - const uint8_t* storage_id, - uint32_t storage_id_size) = 0; - - // Destroys the object in the same context as it was created. - virtual void Destroy() = 0; - - protected: - ContentDecryptionModule_10() {} - virtual ~ContentDecryptionModule_10() {} - }; - - // ----- Note: CDM interface(s) below still in development and not stable! ----- - - // ContentDecryptionModule interface that all CDMs need to implement. - // The interface is versioned for backward compatibility. - // Note: ContentDecryptionModule implementations must use the allocator - // provided in CreateCdmInstance() to allocate any Buffer that needs to - // be passed back to the caller. Implementations must call Buffer::Destroy() - // when a Buffer is created that will never be returned to the caller. - class CDM_CLASS_API ContentDecryptionModule_11 { - public: - static const int kVersion = 11; - static const bool kIsStable = false; - typedef Host_11 Host; - - // Initializes the CDM instance, providing information about permitted - // functionalities. The CDM must respond by calling Host::OnInitialized() - // with whether the initialization succeeded. No other calls will be made by - // the host before Host::OnInitialized() returns. - // If |allow_distinctive_identifier| is false, messages from the CDM, - // such as message events, must not contain a Distinctive Identifier, - // even in an encrypted form. - // If |allow_persistent_state| is false, the CDM must not attempt to - // persist state. Calls to CreateFileIO() will fail. - // If |use_hw_secure_codecs| is true, the CDM must ensure the decryption key - // and video buffers (compressed and uncompressed) are securely protected by - // hardware. - virtual void Initialize(bool allow_distinctive_identifier, - bool allow_persistent_state, - bool use_hw_secure_codecs) = 0; - - // Gets the key status if the CDM has a hypothetical key with the |policy|. - // The CDM must respond by calling either Host::OnResolveKeyStatusPromise() - // with the result key status or Host::OnRejectPromise() if an unexpected - // error happened or this method is not supported. - virtual void GetStatusForPolicy(uint32_t promise_id, - const Policy& policy) = 0; - - // SetServerCertificate(), CreateSessionAndGenerateRequest(), LoadSession(), - // UpdateSession(), CloseSession(), and RemoveSession() all accept a - // |promise_id|, which must be passed to the completion Host method - // (e.g. Host::OnResolveNewSessionPromise()). - - // Provides a server certificate to be used to encrypt messages to the - // license server. The CDM must respond by calling either - // Host::OnResolvePromise() or Host::OnRejectPromise(). - // If the CDM does not support server certificates, the promise should be - // rejected with kExceptionNotSupportedError. If |server_certificate_data| - // is empty, reject with kExceptionTypeError. Any other error should be - // rejected with kExceptionInvalidStateError or kExceptionQuotaExceededError. - // TODO(crbug.com/796417): Add support for the promise to return true or - // false, rather than using kExceptionNotSupportedError to mean false. - virtual void SetServerCertificate(uint32_t promise_id, - const uint8_t* server_certificate_data, - uint32_t server_certificate_data_size) = 0; - - // Creates a session given |session_type|, |init_data_type|, and |init_data|. - // The CDM must respond by calling either Host::OnResolveNewSessionPromise() - // or Host::OnRejectPromise(). - virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, - SessionType session_type, - InitDataType init_data_type, - const uint8_t* init_data, - uint32_t init_data_size) = 0; - - // Loads the session of type |session_type| specified by |session_id|. - // The CDM must respond by calling either Host::OnResolveNewSessionPromise() - // or Host::OnRejectPromise(). If the session is not found, call - // Host::OnResolveNewSessionPromise() with session_id = NULL. - virtual void LoadSession(uint32_t promise_id, - SessionType session_type, - const char* session_id, - uint32_t session_id_size) = 0; - - // Updates the session with |response|. The CDM must respond by calling - // either Host::OnResolvePromise() or Host::OnRejectPromise(). - virtual void UpdateSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size, - const uint8_t* response, - uint32_t response_size) = 0; - - // Requests that the CDM close the session. The CDM must respond by calling - // either Host::OnResolvePromise() or Host::OnRejectPromise() when the request - // has been processed. This may be before the session is closed. Once the - // session is closed, Host::OnSessionClosed() must also be called. - virtual void CloseSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Removes any stored session data associated with this session. Removes all - // license(s) and key(s) associated with the session, whether they are in - // memory, persistent store, or both. For persistent session types, other - // session data (e.g. record of license destruction) will be cleared as - // defined for each session type once a release message acknowledgment is - // processed by UpdateSession(). The CDM must respond by calling either - // Host::OnResolvePromise() or Host::OnRejectPromise() when the request has - // been processed. - virtual void RemoveSession(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Performs scheduled operation with |context| when the timer fires. - virtual void TimerExpired(void* context) = 0; - - // Decrypts the |encrypted_buffer|. - // - // Returns kSuccess if decryption succeeded, in which case the callee - // should have filled the |decrypted_buffer| and passed the ownership of - // |data| in |decrypted_buffer| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kDecryptError if any other error happened. - // If the return value is not kSuccess, |decrypted_buffer| should be ignored - // by the caller. - virtual Status Decrypt(const InputBuffer_2& encrypted_buffer, - DecryptedBlock* decrypted_buffer) = 0; - - // Initializes the CDM audio decoder with |audio_decoder_config|. This - // function must be called before DecryptAndDecodeSamples() is called. - // - // Returns kSuccess if the |audio_decoder_config| is supported and the CDM - // audio decoder is successfully initialized. - // Returns kInitializationError if |audio_decoder_config| is not supported. - // The CDM may still be able to do Decrypt(). - // Returns kDeferredInitialization if the CDM is not ready to initialize the - // decoder at this time. Must call Host::OnDeferredInitializationDone() once - // initialization is complete. - virtual Status InitializeAudioDecoder( + // Called by the host after a call to Host::RequestStorageId(). If the + // version of the storage ID requested is available, |storage_id| and + // |storage_id_size| are set appropriately. |version| will be the same as + // what was requested, unless 0 (latest) was requested, in which case + // |version| will be the actual version number for the |storage_id| returned. + // If the requested version is not available, null/zero will be provided as + // |storage_id| and |storage_id_size|, respectively, and |version| should be + // ignored. + virtual void OnStorageId(uint32_t version, + const uint8_t* storage_id, + uint32_t storage_id_size) = 0; + + // Destroys the object in the same context as it was created. + virtual void Destroy() = 0; + + protected: + ContentDecryptionModule_11() {} + virtual ~ContentDecryptionModule_11() {} +}; + +// ----- Note: CDM interface(s) below still in development and not stable! ----- + +// ContentDecryptionModule interface that all CDMs need to implement. +// The interface is versioned for backward compatibility. +// Note: ContentDecryptionModule implementations must use the allocator +// provided in CreateCdmInstance() to allocate any Buffer that needs to +// be passed back to the caller. Implementations must call Buffer::Destroy() +// when a Buffer is created that will never be returned to the caller. +class CDM_CLASS_API ContentDecryptionModule_12 { + public: + static const int kVersion = 12; + static const bool kIsStable = false; + typedef Host_12 Host; + + // Initializes the CDM instance, providing information about permitted + // functionalities. The CDM must respond by calling Host::OnInitialized() + // with whether the initialization succeeded. No other calls will be made by + // the host before Host::OnInitialized() returns. + // If |allow_distinctive_identifier| is false, messages from the CDM, + // such as message events, must not contain a Distinctive Identifier, + // even in an encrypted form. + // If |allow_persistent_state| is false, the CDM must not attempt to + // persist state. Calls to CreateFileIO() will fail. + // If |use_hw_secure_codecs| is true, the CDM must ensure the decryption key + // and video buffers (compressed and uncompressed) are securely protected by + // hardware. + virtual void Initialize(bool allow_distinctive_identifier, + bool allow_persistent_state, + bool use_hw_secure_codecs) = 0; + + // Gets the key status if the CDM has a hypothetical key with the |policy|. + // The CDM must respond by calling either Host::OnResolveKeyStatusPromise() + // with the result key status or Host::OnRejectPromise() if an unexpected + // error happened or this method is not supported. + virtual void GetStatusForPolicy(uint32_t promise_id, + const Policy& policy) = 0; + + // SetServerCertificate(), CreateSessionAndGenerateRequest(), LoadSession(), + // UpdateSession(), CloseSession(), and RemoveSession() all accept a + // |promise_id|, which must be passed to the completion Host method + // (e.g. Host::OnResolveNewSessionPromise()). + + // Provides a server certificate to be used to encrypt messages to the + // license server. The CDM must respond by calling either + // Host::OnResolvePromise() or Host::OnRejectPromise(). + // If the CDM does not support server certificates, the promise should be + // rejected with kExceptionNotSupportedError. If |server_certificate_data| + // is empty, reject with kExceptionTypeError. Any other error should be + // rejected with kExceptionInvalidStateError or kExceptionQuotaExceededError. + // TODO(crbug.com/796417): Add support for the promise to return true or + // false, rather than using kExceptionNotSupportedError to mean false. + virtual void SetServerCertificate(uint32_t promise_id, + const uint8_t* server_certificate_data, + uint32_t server_certificate_data_size) = 0; + + // Creates a session given |session_type|, |init_data_type|, and |init_data|. + // The CDM must respond by calling either Host::OnResolveNewSessionPromise() + // or Host::OnRejectPromise(). + virtual void CreateSessionAndGenerateRequest(uint32_t promise_id, + SessionType session_type, + InitDataType init_data_type, + const uint8_t* init_data, + uint32_t init_data_size) = 0; + + // Loads the session of type |session_type| specified by |session_id|. + // The CDM must respond by calling either Host::OnResolveNewSessionPromise() + // or Host::OnRejectPromise(). If the session is not found, call + // Host::OnResolveNewSessionPromise() with session_id = NULL. + virtual void LoadSession(uint32_t promise_id, + SessionType session_type, + const char* session_id, + uint32_t session_id_size) = 0; + + // Updates the session with |response|. The CDM must respond by calling + // either Host::OnResolvePromise() or Host::OnRejectPromise(). + virtual void UpdateSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size, + const uint8_t* response, + uint32_t response_size) = 0; + + // Requests that the CDM close the session. The CDM must respond by calling + // either Host::OnResolvePromise() or Host::OnRejectPromise() when the request + // has been processed. This may be before the session is closed. Once the + // session is closed, Host::OnSessionClosed() must also be called. + virtual void CloseSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Removes any stored session data associated with this session. Removes all + // license(s) and key(s) associated with the session, whether they are in + // memory, persistent store, or both. For persistent session types, other + // session data (e.g. record of license destruction) will be cleared as + // defined for each session type once a release message acknowledgment is + // processed by UpdateSession(). The CDM must respond by calling either + // Host::OnResolvePromise() or Host::OnRejectPromise() when the request has + // been processed. + virtual void RemoveSession(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Performs scheduled operation with |context| when the timer fires. + virtual void TimerExpired(void* context) = 0; + + // Decrypts the |encrypted_buffer|. + // + // Returns kSuccess if decryption succeeded, in which case the callee + // should have filled the |decrypted_buffer| and passed the ownership of + // |data| in |decrypted_buffer| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kDecryptError if any other error happened. + // If the return value is not kSuccess, |decrypted_buffer| should be ignored + // by the caller. + virtual Status Decrypt(const InputBuffer_2& encrypted_buffer, + DecryptedBlock* decrypted_buffer) = 0; + + // Initializes the CDM audio decoder with |audio_decoder_config|. This + // function must be called before DecryptAndDecodeSamples() is called. + // + // Returns kSuccess if the |audio_decoder_config| is supported and the CDM + // audio decoder is successfully initialized. + // Returns kInitializationError if |audio_decoder_config| is not supported. + // The CDM may still be able to do Decrypt(). + // Returns kDeferredInitialization if the CDM is not ready to initialize the + // decoder at this time. Must call Host::OnDeferredInitializationDone() once + // initialization is complete. + virtual Status InitializeAudioDecoder( const AudioDecoderConfig_2& audio_decoder_config) = 0; - // Initializes the CDM video decoder with |video_decoder_config|. This - // function must be called before DecryptAndDecodeFrame() is called. - // - // Returns kSuccess if the |video_decoder_config| is supported and the CDM - // video decoder is successfully initialized. - // Returns kInitializationError if |video_decoder_config| is not supported. - // The CDM may still be able to do Decrypt(). - // Returns kDeferredInitialization if the CDM is not ready to initialize the - // decoder at this time. Must call Host::OnDeferredInitializationDone() once - // initialization is complete. - virtual Status InitializeVideoDecoder( + // Initializes the CDM video decoder with |video_decoder_config|. This + // function must be called before DecryptAndDecodeFrame() is called. + // + // Returns kSuccess if the |video_decoder_config| is supported and the CDM + // video decoder is successfully initialized. + // Returns kInitializationError if |video_decoder_config| is not supported. + // The CDM may still be able to do Decrypt(). + // Returns kDeferredInitialization if the CDM is not ready to initialize the + // decoder at this time. Must call Host::OnDeferredInitializationDone() once + // initialization is complete. + virtual Status InitializeVideoDecoder( const VideoDecoderConfig_3& video_decoder_config) = 0; - // De-initializes the CDM decoder and sets it to an uninitialized state. The - // caller can initialize the decoder again after this call to re-initialize - // it. This can be used to reconfigure the decoder if the configuration - // changes. - virtual void DeinitializeDecoder(StreamType decoder_type) = 0; - - // Resets the CDM decoder to an initialized clean state. All internal buffers - // MUST be flushed. - virtual void ResetDecoder(StreamType decoder_type) = 0; - - // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a - // |video_frame|. Upon end-of-stream, the caller should call this function - // repeatedly with empty |encrypted_buffer| (|data| == NULL) until - // kNeedMoreData is returned. - // - // Returns kSuccess if decryption and decoding both succeeded, in which case - // the callee will have filled the |video_frame| and passed the ownership of - // |frame_buffer| in |video_frame| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kNeedMoreData if more data was needed by the decoder to generate - // a decoded frame (e.g. during initialization and end-of-stream). - // Returns kDecryptError if any decryption error happened. - // Returns kDecodeError if any decoding error happened. - // If the return value is not kSuccess, |video_frame| should be ignored by - // the caller. - virtual Status DecryptAndDecodeFrame(const InputBuffer_2& encrypted_buffer, - VideoFrame_2* video_frame) = 0; - - // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into - // |audio_frames|. Upon end-of-stream, the caller should call this function - // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty - // |audio_frames| is produced. - // - // Returns kSuccess if decryption and decoding both succeeded, in which case - // the callee will have filled |audio_frames| and passed the ownership of - // |data| in |audio_frames| to the caller. - // Returns kNoKey if the CDM did not have the necessary decryption key - // to decrypt. - // Returns kNeedMoreData if more data was needed by the decoder to generate - // audio samples (e.g. during initialization and end-of-stream). - // Returns kDecryptError if any decryption error happened. - // Returns kDecodeError if any decoding error happened. - // If the return value is not kSuccess, |audio_frames| should be ignored by - // the caller. - virtual Status DecryptAndDecodeSamples(const InputBuffer_2& encrypted_buffer, - AudioFrames* audio_frames) = 0; - - // Called by the host after a platform challenge was initiated via - // Host::SendPlatformChallenge(). - virtual void OnPlatformChallengeResponse( + // De-initializes the CDM decoder and sets it to an uninitialized state. The + // caller can initialize the decoder again after this call to re-initialize + // it. This can be used to reconfigure the decoder if the configuration + // changes. + virtual void DeinitializeDecoder(StreamType decoder_type) = 0; + + // Resets the CDM decoder to an initialized clean state. All internal buffers + // MUST be flushed. + virtual void ResetDecoder(StreamType decoder_type) = 0; + + // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a + // |video_frame|. Upon end-of-stream, the caller should call this function + // repeatedly with empty |encrypted_buffer| (|data| == NULL) until + // kNeedMoreData is returned. + // + // Returns kSuccess if decryption and decoding both succeeded, in which case + // the callee will have filled the |video_frame| and passed the ownership of + // |frame_buffer| in |video_frame| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kNeedMoreData if more data was needed by the decoder to generate + // a decoded frame (e.g. during initialization and end-of-stream). + // Returns kDecryptError if any decryption error happened. + // Returns kDecodeError if any decoding error happened. + // If the return value is not kSuccess, |video_frame| should be ignored by + // the caller. + virtual Status DecryptAndDecodeFrame(const InputBuffer_2& encrypted_buffer, + VideoFrame_2* video_frame) = 0; + + // Decrypts the |encrypted_buffer| and decodes the decrypted buffer into + // |audio_frames|. Upon end-of-stream, the caller should call this function + // repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty + // |audio_frames| is produced. + // + // Returns kSuccess if decryption and decoding both succeeded, in which case + // the callee will have filled |audio_frames| and passed the ownership of + // |data| in |audio_frames| to the caller. + // Returns kNoKey if the CDM did not have the necessary decryption key + // to decrypt. + // Returns kNeedMoreData if more data was needed by the decoder to generate + // audio samples (e.g. during initialization and end-of-stream). + // Returns kDecryptError if any decryption error happened. + // Returns kDecodeError if any decoding error happened. + // If the return value is not kSuccess, |audio_frames| should be ignored by + // the caller. + virtual Status DecryptAndDecodeSamples(const InputBuffer_2& encrypted_buffer, + AudioFrames* audio_frames) = 0; + + // Called by the host after a platform challenge was initiated via + // Host::SendPlatformChallenge(). + virtual void OnPlatformChallengeResponse( const PlatformChallengeResponse& response) = 0; - // Called by the host after a call to Host::QueryOutputProtectionStatus(). The - // |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask| - // is a bit mask of OutputProtectionMethods. If |result| is kQueryFailed, - // then |link_mask| and |output_protection_mask| are undefined and should - // be ignored. - virtual void OnQueryOutputProtectionStatus( + // Called by the host after a call to Host::QueryOutputProtectionStatus(). The + // |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask| + // is a bit mask of OutputProtectionMethods. If |result| is kQueryFailed, + // then |link_mask| and |output_protection_mask| are undefined and should + // be ignored. + virtual void OnQueryOutputProtectionStatus( QueryResult result, uint32_t link_mask, uint32_t output_protection_mask) = 0; - // Called by the host after a call to Host::RequestStorageId(). If the - // version of the storage ID requested is available, |storage_id| and - // |storage_id_size| are set appropriately. |version| will be the same as - // what was requested, unless 0 (latest) was requested, in which case - // |version| will be the actual version number for the |storage_id| returned. - // If the requested version is not available, null/zero will be provided as - // |storage_id| and |storage_id_size|, respectively, and |version| should be - // ignored. - virtual void OnStorageId(uint32_t version, - const uint8_t* storage_id, - uint32_t storage_id_size) = 0; - - // Destroys the object in the same context as it was created. - virtual void Destroy() = 0; - - protected: - ContentDecryptionModule_11() {} - virtual ~ContentDecryptionModule_11() {} - }; - - class CDM_CLASS_API Host_9 { - public: - static const int kVersion = 9; - - // Returns a Buffer* containing non-zero members upon success, or NULL on - // failure. The caller owns the Buffer* after this call. The buffer is not - // guaranteed to be zero initialized. The capacity of the allocated Buffer - // is guaranteed to be not less than |capacity|. - virtual Buffer* Allocate(uint32_t capacity) = 0; - - // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms| - // from now with |context|. - virtual void SetTimer(int64_t delay_ms, void* context) = 0; - - // Returns the current wall time. - virtual Time GetCurrentWallTime() = 0; - - // Called by the CDM when a key status is available in response to - // GetStatusForPolicy(). - virtual void OnResolveKeyStatusPromise(uint32_t promise_id, - KeyStatus key_status) = 0; - - // Called by the CDM when a session is created or loaded and the value for the - // MediaKeySession's sessionId attribute is available (|session_id|). - // This must be called before OnSessionMessage() or - // OnSessionKeysChange() is called for the same session. |session_id_size| - // should not include null termination. - // When called in response to LoadSession(), the |session_id| must be the - // same as the |session_id| passed in LoadSession(), or NULL if the - // session could not be loaded. - virtual void OnResolveNewSessionPromise(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Called by the CDM when a session is updated or released. - virtual void OnResolvePromise(uint32_t promise_id) = 0; - - // Called by the CDM when an error occurs as a result of one of the - // ContentDecryptionModule calls that accept a |promise_id|. - // |exception| must be specified. |error_message| and |system_code| - // are optional. |error_message_size| should not include null termination. - virtual void OnRejectPromise(uint32_t promise_id, - Exception exception, - uint32_t system_code, - const char* error_message, - uint32_t error_message_size) = 0; - - // Called by the CDM when it has a message for session |session_id|. - // Size parameters should not include null termination. - virtual void OnSessionMessage(const char* session_id, - uint32_t session_id_size, - MessageType message_type, - const char* message, - uint32_t message_size) = 0; - - // Called by the CDM when there has been a change in keys or their status for - // session |session_id|. |has_additional_usable_key| should be set if a - // key is newly usable (e.g. new key available, previously expired key has - // been renewed, etc.) and the browser should attempt to resume playback. - // |keys_info| is the list of key IDs for this session along with their - // current status. |keys_info_count| is the number of entries in |keys_info|. - // Size parameter for |session_id| should not include null termination. - virtual void OnSessionKeysChange(const char* session_id, - uint32_t session_id_size, - bool has_additional_usable_key, - const KeyInformation* keys_info, - uint32_t keys_info_count) = 0; - - // Called by the CDM when there has been a change in the expiration time for - // session |session_id|. This can happen as the result of an Update() call - // or some other event. If this happens as a result of a call to Update(), - // it must be called before resolving the Update() promise. |new_expiry_time| - // represents the time after which the key(s) in the session will no longer - // be usable for decryption. It can be 0 if no such time exists or if the - // license explicitly never expires. Size parameter should not include null - // termination. - virtual void OnExpirationChange(const char* session_id, - uint32_t session_id_size, - Time new_expiry_time) = 0; - - // Called by the CDM when session |session_id| is closed. Size - // parameter should not include null termination. - virtual void OnSessionClosed(const char* session_id, - uint32_t session_id_size) = 0; - - // The following are optional methods that may not be implemented on all - // platforms. - - // Sends a platform challenge for the given |service_id|. |challenge| is at - // most 256 bits of data to be signed. Once the challenge has been completed, - // the host will call ContentDecryptionModule::OnPlatformChallengeResponse() - // with the signed challenge response and platform certificate. Size - // parameters should not include null termination. - virtual void SendPlatformChallenge(const char* service_id, - uint32_t service_id_size, - const char* challenge, - uint32_t challenge_size) = 0; - - // Attempts to enable output protection (e.g. HDCP) on the display link. The - // |desired_protection_mask| is a bit mask of OutputProtectionMethods. No - // status callback is issued, the CDM must call QueryOutputProtectionStatus() - // periodically to ensure the desired protections are applied. - virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0; - - // Requests the current output protection status. Once the host has the status - // it will call ContentDecryptionModule::OnQueryOutputProtectionStatus(). - virtual void QueryOutputProtectionStatus() = 0; - - // Must be called by the CDM if it returned kDeferredInitialization during - // InitializeAudioDecoder() or InitializeVideoDecoder(). - virtual void OnDeferredInitializationDone(StreamType stream_type, - Status decoder_status) = 0; - - // Creates a FileIO object from the host to do file IO operation. Returns NULL - // if a FileIO object cannot be obtained. Once a valid FileIO object is - // returned, |client| must be valid until FileIO::Close() is called. The - // CDM can call this method multiple times to operate on different files. - virtual FileIO* CreateFileIO(FileIOClient* client) = 0; - - // Requests a specific version of the storage ID. A storage ID is a stable, - // device specific ID used by the CDM to securely store persistent data. The - // ID will be returned by the host via ContentDecryptionModule::OnStorageId(). - // If |version| is 0, the latest version will be returned. All |version|s - // that are greater than or equal to 0x80000000 are reserved for the CDM and - // should not be supported or returned by the host. The CDM must not expose - // the ID outside the client device, even in encrypted form. - virtual void RequestStorageId(uint32_t version) = 0; - - protected: - Host_9() {} - virtual ~Host_9() {} - }; - - class CDM_CLASS_API Host_10 { - public: - static const int kVersion = 10; - - // Returns a Buffer* containing non-zero members upon success, or NULL on - // failure. The caller owns the Buffer* after this call. The buffer is not - // guaranteed to be zero initialized. The capacity of the allocated Buffer - // is guaranteed to be not less than |capacity|. - virtual Buffer* Allocate(uint32_t capacity) = 0; - - // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms| - // from now with |context|. - virtual void SetTimer(int64_t delay_ms, void* context) = 0; - - // Returns the current wall time. - virtual Time GetCurrentWallTime() = 0; - - // Called by the CDM with the result after the CDM instance was initialized. - virtual void OnInitialized(bool success) = 0; - - // Called by the CDM when a key status is available in response to - // GetStatusForPolicy(). - virtual void OnResolveKeyStatusPromise(uint32_t promise_id, - KeyStatus key_status) = 0; - - // Called by the CDM when a session is created or loaded and the value for the - // MediaKeySession's sessionId attribute is available (|session_id|). - // This must be called before OnSessionMessage() or - // OnSessionKeysChange() is called for the same session. |session_id_size| - // should not include null termination. - // When called in response to LoadSession(), the |session_id| must be the - // same as the |session_id| passed in LoadSession(), or NULL if the - // session could not be loaded. - virtual void OnResolveNewSessionPromise(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Called by the CDM when a session is updated or released. - virtual void OnResolvePromise(uint32_t promise_id) = 0; - - // Called by the CDM when an error occurs as a result of one of the - // ContentDecryptionModule calls that accept a |promise_id|. - // |exception| must be specified. |error_message| and |system_code| - // are optional. |error_message_size| should not include null termination. - virtual void OnRejectPromise(uint32_t promise_id, - Exception exception, - uint32_t system_code, - const char* error_message, - uint32_t error_message_size) = 0; - - // Called by the CDM when it has a message for session |session_id|. - // Size parameters should not include null termination. - virtual void OnSessionMessage(const char* session_id, - uint32_t session_id_size, - MessageType message_type, - const char* message, - uint32_t message_size) = 0; - - // Called by the CDM when there has been a change in keys or their status for - // session |session_id|. |has_additional_usable_key| should be set if a - // key is newly usable (e.g. new key available, previously expired key has - // been renewed, etc.) and the browser should attempt to resume playback. - // |keys_info| is the list of key IDs for this session along with their - // current status. |keys_info_count| is the number of entries in |keys_info|. - // Size parameter for |session_id| should not include null termination. - virtual void OnSessionKeysChange(const char* session_id, - uint32_t session_id_size, - bool has_additional_usable_key, - const KeyInformation* keys_info, - uint32_t keys_info_count) = 0; - - // Called by the CDM when there has been a change in the expiration time for - // session |session_id|. This can happen as the result of an Update() call - // or some other event. If this happens as a result of a call to Update(), - // it must be called before resolving the Update() promise. |new_expiry_time| - // represents the time after which the key(s) in the session will no longer - // be usable for decryption. It can be 0 if no such time exists or if the - // license explicitly never expires. Size parameter should not include null - // termination. - virtual void OnExpirationChange(const char* session_id, - uint32_t session_id_size, - Time new_expiry_time) = 0; - - // Called by the CDM when session |session_id| is closed. Size - // parameter should not include null termination. - virtual void OnSessionClosed(const char* session_id, - uint32_t session_id_size) = 0; - - // The following are optional methods that may not be implemented on all - // platforms. - - // Sends a platform challenge for the given |service_id|. |challenge| is at - // most 256 bits of data to be signed. Once the challenge has been completed, - // the host will call ContentDecryptionModule::OnPlatformChallengeResponse() - // with the signed challenge response and platform certificate. Size - // parameters should not include null termination. - virtual void SendPlatformChallenge(const char* service_id, - uint32_t service_id_size, - const char* challenge, - uint32_t challenge_size) = 0; - - // Attempts to enable output protection (e.g. HDCP) on the display link. The - // |desired_protection_mask| is a bit mask of OutputProtectionMethods. No - // status callback is issued, the CDM must call QueryOutputProtectionStatus() - // periodically to ensure the desired protections are applied. - virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0; - - // Requests the current output protection status. Once the host has the status - // it will call ContentDecryptionModule::OnQueryOutputProtectionStatus(). - virtual void QueryOutputProtectionStatus() = 0; - - // Must be called by the CDM if it returned kDeferredInitialization during - // InitializeAudioDecoder() or InitializeVideoDecoder(). - virtual void OnDeferredInitializationDone(StreamType stream_type, - Status decoder_status) = 0; - - // Creates a FileIO object from the host to do file IO operation. Returns NULL - // if a FileIO object cannot be obtained. Once a valid FileIO object is - // returned, |client| must be valid until FileIO::Close() is called. The - // CDM can call this method multiple times to operate on different files. - virtual FileIO* CreateFileIO(FileIOClient* client) = 0; - - // Requests a specific version of the storage ID. A storage ID is a stable, - // device specific ID used by the CDM to securely store persistent data. The - // ID will be returned by the host via ContentDecryptionModule::OnStorageId(). - // If |version| is 0, the latest version will be returned. All |version|s - // that are greater than or equal to 0x80000000 are reserved for the CDM and - // should not be supported or returned by the host. The CDM must not expose - // the ID outside the client device, even in encrypted form. - virtual void RequestStorageId(uint32_t version) = 0; - - protected: - Host_10() {} - virtual ~Host_10() {} - }; - - class CDM_CLASS_API Host_11 { - public: - static const int kVersion = 11; - - // Returns a Buffer* containing non-zero members upon success, or NULL on - // failure. The caller owns the Buffer* after this call. The buffer is not - // guaranteed to be zero initialized. The capacity of the allocated Buffer - // is guaranteed to be not less than |capacity|. - virtual Buffer* Allocate(uint32_t capacity) = 0; - - // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms| - // from now with |context|. - virtual void SetTimer(int64_t delay_ms, void* context) = 0; - - // Returns the current wall time. - virtual Time GetCurrentWallTime() = 0; - - // Called by the CDM with the result after the CDM instance was initialized. - virtual void OnInitialized(bool success) = 0; - - // Called by the CDM when a key status is available in response to - // GetStatusForPolicy(). - virtual void OnResolveKeyStatusPromise(uint32_t promise_id, - KeyStatus key_status) = 0; - - // Called by the CDM when a session is created or loaded and the value for the - // MediaKeySession's sessionId attribute is available (|session_id|). - // This must be called before OnSessionMessage() or - // OnSessionKeysChange() is called for the same session. |session_id_size| - // should not include null termination. - // When called in response to LoadSession(), the |session_id| must be the - // same as the |session_id| passed in LoadSession(), or NULL if the - // session could not be loaded. - virtual void OnResolveNewSessionPromise(uint32_t promise_id, - const char* session_id, - uint32_t session_id_size) = 0; - - // Called by the CDM when a session is updated or released. - virtual void OnResolvePromise(uint32_t promise_id) = 0; - - // Called by the CDM when an error occurs as a result of one of the - // ContentDecryptionModule calls that accept a |promise_id|. - // |exception| must be specified. |error_message| and |system_code| - // are optional. |error_message_size| should not include null termination. - virtual void OnRejectPromise(uint32_t promise_id, - Exception exception, - uint32_t system_code, - const char* error_message, - uint32_t error_message_size) = 0; - - // Called by the CDM when it has a message for session |session_id|. - // Size parameters should not include null termination. - virtual void OnSessionMessage(const char* session_id, - uint32_t session_id_size, - MessageType message_type, - const char* message, - uint32_t message_size) = 0; - - // Called by the CDM when there has been a change in keys or their status for - // session |session_id|. |has_additional_usable_key| should be set if a - // key is newly usable (e.g. new key available, previously expired key has - // been renewed, etc.) and the browser should attempt to resume playback. - // |keys_info| is the list of key IDs for this session along with their - // current status. |keys_info_count| is the number of entries in |keys_info|. - // Size parameter for |session_id| should not include null termination. - virtual void OnSessionKeysChange(const char* session_id, - uint32_t session_id_size, - bool has_additional_usable_key, - const KeyInformation* keys_info, - uint32_t keys_info_count) = 0; - - // Called by the CDM when there has been a change in the expiration time for - // session |session_id|. This can happen as the result of an Update() call - // or some other event. If this happens as a result of a call to Update(), - // it must be called before resolving the Update() promise. |new_expiry_time| - // represents the time after which the key(s) in the session will no longer - // be usable for decryption. It can be 0 if no such time exists or if the - // license explicitly never expires. Size parameter should not include null - // termination. - virtual void OnExpirationChange(const char* session_id, - uint32_t session_id_size, - Time new_expiry_time) = 0; - - // Called by the CDM when session |session_id| is closed. Size - // parameter should not include null termination. - virtual void OnSessionClosed(const char* session_id, - uint32_t session_id_size) = 0; - - // The following are optional methods that may not be implemented on all - // platforms. - - // Sends a platform challenge for the given |service_id|. |challenge| is at - // most 256 bits of data to be signed. Once the challenge has been completed, - // the host will call ContentDecryptionModule::OnPlatformChallengeResponse() - // with the signed challenge response and platform certificate. Size - // parameters should not include null termination. - virtual void SendPlatformChallenge(const char* service_id, - uint32_t service_id_size, - const char* challenge, - uint32_t challenge_size) = 0; - - // Attempts to enable output protection (e.g. HDCP) on the display link. The - // |desired_protection_mask| is a bit mask of OutputProtectionMethods. No - // status callback is issued, the CDM must call QueryOutputProtectionStatus() - // periodically to ensure the desired protections are applied. - virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0; - - // Requests the current output protection status. Once the host has the status - // it will call ContentDecryptionModule::OnQueryOutputProtectionStatus(). - virtual void QueryOutputProtectionStatus() = 0; - - // Must be called by the CDM if it returned kDeferredInitialization during - // InitializeAudioDecoder() or InitializeVideoDecoder(). - virtual void OnDeferredInitializationDone(StreamType stream_type, - Status decoder_status) = 0; - - // Creates a FileIO object from the host to do file IO operation. Returns NULL - // if a FileIO object cannot be obtained. Once a valid FileIO object is - // returned, |client| must be valid until FileIO::Close() is called. The - // CDM can call this method multiple times to operate on different files. - virtual FileIO* CreateFileIO(FileIOClient* client) = 0; - - // Requests a CdmProxy that proxies part of CDM functionalities to a different - // entity, e.g. a hardware CDM module. A CDM instance can have at most one - // CdmProxy throughout its lifetime, which must be requested and initialized - // during CDM instance initialization time, i.e. in or after CDM::Initialize() - // and before OnInitialized() is called, to ensure proper connection of the - // CdmProxy and the media player (e.g. hardware decoder). The CdmProxy is - // owned by the host and is guaranteed to be valid throughout the CDM - // instance's lifetime. The CDM must ensure that the |client| remain valid - // before the CDM instance is destroyed. Returns null if CdmProxy is not - // supported, called before CDM::Initialize(), RequestCdmProxy() is called - // more than once, or called after the CDM instance has been initialized. - virtual CdmProxy* RequestCdmProxy(CdmProxyClient* client) = 0; - - // Requests a specific version of the storage ID. A storage ID is a stable, - // device specific ID used by the CDM to securely store persistent data. The - // ID will be returned by the host via ContentDecryptionModule::OnStorageId(). - // If |version| is 0, the latest version will be returned. All |version|s - // that are greater than or equal to 0x80000000 are reserved for the CDM and - // should not be supported or returned by the host. The CDM must not expose - // the ID outside the client device, even in encrypted form. - virtual void RequestStorageId(uint32_t version) = 0; - - protected: - Host_11() {} - virtual ~Host_11() {} - }; + // Called by the host after a call to Host::RequestStorageId(). If the + // version of the storage ID requested is available, |storage_id| and + // |storage_id_size| are set appropriately. |version| will be the same as + // what was requested, unless 0 (latest) was requested, in which case + // |version| will be the actual version number for the |storage_id| returned. + // If the requested version is not available, null/zero will be provided as + // |storage_id| and |storage_id_size|, respectively, and |version| should be + // ignored. + virtual void OnStorageId(uint32_t version, + const uint8_t* storage_id, + uint32_t storage_id_size) = 0; + + // Destroys the object in the same context as it was created. + virtual void Destroy() = 0; + + protected: + ContentDecryptionModule_12() {} + virtual ~ContentDecryptionModule_12() {} +}; + +class CDM_CLASS_API Host_10 { + public: + static const int kVersion = 10; + + // Returns a Buffer* containing non-zero members upon success, or NULL on + // failure. The caller owns the Buffer* after this call. The buffer is not + // guaranteed to be zero initialized. The capacity of the allocated Buffer + // is guaranteed to be not less than |capacity|. + virtual Buffer* Allocate(uint32_t capacity) = 0; + + // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms| + // from now with |context|. + virtual void SetTimer(int64_t delay_ms, void* context) = 0; + + // Returns the current wall time. + virtual Time GetCurrentWallTime() = 0; + + // Called by the CDM with the result after the CDM instance was initialized. + virtual void OnInitialized(bool success) = 0; + + // Called by the CDM when a key status is available in response to + // GetStatusForPolicy(). + virtual void OnResolveKeyStatusPromise(uint32_t promise_id, + KeyStatus key_status) = 0; + + // Called by the CDM when a session is created or loaded and the value for the + // MediaKeySession's sessionId attribute is available (|session_id|). + // This must be called before OnSessionMessage() or + // OnSessionKeysChange() is called for the same session. |session_id_size| + // should not include null termination. + // When called in response to LoadSession(), the |session_id| must be the + // same as the |session_id| passed in LoadSession(), or NULL if the + // session could not be loaded. + virtual void OnResolveNewSessionPromise(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Called by the CDM when a session is updated or released. + virtual void OnResolvePromise(uint32_t promise_id) = 0; + + // Called by the CDM when an error occurs as a result of one of the + // ContentDecryptionModule calls that accept a |promise_id|. + // |exception| must be specified. |error_message| and |system_code| + // are optional. |error_message_size| should not include null termination. + virtual void OnRejectPromise(uint32_t promise_id, + Exception exception, + uint32_t system_code, + const char* error_message, + uint32_t error_message_size) = 0; + + // Called by the CDM when it has a message for session |session_id|. + // Size parameters should not include null termination. + virtual void OnSessionMessage(const char* session_id, + uint32_t session_id_size, + MessageType message_type, + const char* message, + uint32_t message_size) = 0; + + // Called by the CDM when there has been a change in keys or their status for + // session |session_id|. |has_additional_usable_key| should be set if a + // key is newly usable (e.g. new key available, previously expired key has + // been renewed, etc.) and the browser should attempt to resume playback. + // |keys_info| is the list of key IDs for this session along with their + // current status. |keys_info_count| is the number of entries in |keys_info|. + // Size parameter for |session_id| should not include null termination. + virtual void OnSessionKeysChange(const char* session_id, + uint32_t session_id_size, + bool has_additional_usable_key, + const KeyInformation* keys_info, + uint32_t keys_info_count) = 0; + + // Called by the CDM when there has been a change in the expiration time for + // session |session_id|. This can happen as the result of an Update() call + // or some other event. If this happens as a result of a call to Update(), + // it must be called before resolving the Update() promise. |new_expiry_time| + // represents the time after which the key(s) in the session will no longer + // be usable for decryption. It can be 0 if no such time exists or if the + // license explicitly never expires. Size parameter should not include null + // termination. + virtual void OnExpirationChange(const char* session_id, + uint32_t session_id_size, + Time new_expiry_time) = 0; + + // Called by the CDM when session |session_id| is closed. Size + // parameter should not include null termination. + virtual void OnSessionClosed(const char* session_id, + uint32_t session_id_size) = 0; + + // The following are optional methods that may not be implemented on all + // platforms. + + // Sends a platform challenge for the given |service_id|. |challenge| is at + // most 256 bits of data to be signed. Once the challenge has been completed, + // the host will call ContentDecryptionModule::OnPlatformChallengeResponse() + // with the signed challenge response and platform certificate. Size + // parameters should not include null termination. + virtual void SendPlatformChallenge(const char* service_id, + uint32_t service_id_size, + const char* challenge, + uint32_t challenge_size) = 0; + + // Attempts to enable output protection (e.g. HDCP) on the display link. The + // |desired_protection_mask| is a bit mask of OutputProtectionMethods. No + // status callback is issued, the CDM must call QueryOutputProtectionStatus() + // periodically to ensure the desired protections are applied. + virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0; + + // Requests the current output protection status. Once the host has the status + // it will call ContentDecryptionModule::OnQueryOutputProtectionStatus(). + virtual void QueryOutputProtectionStatus() = 0; + + // Must be called by the CDM if it returned kDeferredInitialization during + // InitializeAudioDecoder() or InitializeVideoDecoder(). + virtual void OnDeferredInitializationDone(StreamType stream_type, + Status decoder_status) = 0; + + // Creates a FileIO object from the host to do file IO operation. Returns NULL + // if a FileIO object cannot be obtained. Once a valid FileIO object is + // returned, |client| must be valid until FileIO::Close() is called. The + // CDM can call this method multiple times to operate on different files. + virtual FileIO* CreateFileIO(FileIOClient* client) = 0; + + // Requests a specific version of the storage ID. A storage ID is a stable, + // device specific ID used by the CDM to securely store persistent data. The + // ID will be returned by the host via ContentDecryptionModule::OnStorageId(). + // If |version| is 0, the latest version will be returned. All |version|s + // that are greater than or equal to 0x80000000 are reserved for the CDM and + // should not be supported or returned by the host. The CDM must not expose + // the ID outside the client device, even in encrypted form. + virtual void RequestStorageId(uint32_t version) = 0; + + protected: + Host_10() {} + virtual ~Host_10() {} +}; + +class CDM_CLASS_API Host_11 { + public: + static const int kVersion = 11; + + // Returns a Buffer* containing non-zero members upon success, or NULL on + // failure. The caller owns the Buffer* after this call. The buffer is not + // guaranteed to be zero initialized. The capacity of the allocated Buffer + // is guaranteed to be not less than |capacity|. + virtual Buffer* Allocate(uint32_t capacity) = 0; + + // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms| + // from now with |context|. + virtual void SetTimer(int64_t delay_ms, void* context) = 0; + + // Returns the current wall time. + virtual Time GetCurrentWallTime() = 0; + + // Called by the CDM with the result after the CDM instance was initialized. + virtual void OnInitialized(bool success) = 0; + + // Called by the CDM when a key status is available in response to + // GetStatusForPolicy(). + virtual void OnResolveKeyStatusPromise(uint32_t promise_id, + KeyStatus key_status) = 0; + + // Called by the CDM when a session is created or loaded and the value for the + // MediaKeySession's sessionId attribute is available (|session_id|). + // This must be called before OnSessionMessage() or + // OnSessionKeysChange() is called for the same session. |session_id_size| + // should not include null termination. + // When called in response to LoadSession(), the |session_id| must be the + // same as the |session_id| passed in LoadSession(), or NULL if the + // session could not be loaded. + virtual void OnResolveNewSessionPromise(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Called by the CDM when a session is updated or released. + virtual void OnResolvePromise(uint32_t promise_id) = 0; + + // Called by the CDM when an error occurs as a result of one of the + // ContentDecryptionModule calls that accept a |promise_id|. + // |exception| must be specified. |error_message| and |system_code| + // are optional. |error_message_size| should not include null termination. + virtual void OnRejectPromise(uint32_t promise_id, + Exception exception, + uint32_t system_code, + const char* error_message, + uint32_t error_message_size) = 0; + + // Called by the CDM when it has a message for session |session_id|. + // Size parameters should not include null termination. + virtual void OnSessionMessage(const char* session_id, + uint32_t session_id_size, + MessageType message_type, + const char* message, + uint32_t message_size) = 0; + + // Called by the CDM when there has been a change in keys or their status for + // session |session_id|. |has_additional_usable_key| should be set if a + // key is newly usable (e.g. new key available, previously expired key has + // been renewed, etc.) and the browser should attempt to resume playback. + // |keys_info| is the list of key IDs for this session along with their + // current status. |keys_info_count| is the number of entries in |keys_info|. + // Size parameter for |session_id| should not include null termination. + virtual void OnSessionKeysChange(const char* session_id, + uint32_t session_id_size, + bool has_additional_usable_key, + const KeyInformation* keys_info, + uint32_t keys_info_count) = 0; + + // Called by the CDM when there has been a change in the expiration time for + // session |session_id|. This can happen as the result of an Update() call + // or some other event. If this happens as a result of a call to Update(), + // it must be called before resolving the Update() promise. |new_expiry_time| + // represents the time after which the key(s) in the session will no longer + // be usable for decryption. It can be 0 if no such time exists or if the + // license explicitly never expires. Size parameter should not include null + // termination. + virtual void OnExpirationChange(const char* session_id, + uint32_t session_id_size, + Time new_expiry_time) = 0; + + // Called by the CDM when session |session_id| is closed. Size + // parameter should not include null termination. + virtual void OnSessionClosed(const char* session_id, + uint32_t session_id_size) = 0; + + // The following are optional methods that may not be implemented on all + // platforms. + + // Sends a platform challenge for the given |service_id|. |challenge| is at + // most 256 bits of data to be signed. Once the challenge has been completed, + // the host will call ContentDecryptionModule::OnPlatformChallengeResponse() + // with the signed challenge response and platform certificate. Size + // parameters should not include null termination. + virtual void SendPlatformChallenge(const char* service_id, + uint32_t service_id_size, + const char* challenge, + uint32_t challenge_size) = 0; + + // Attempts to enable output protection (e.g. HDCP) on the display link. The + // |desired_protection_mask| is a bit mask of OutputProtectionMethods. No + // status callback is issued, the CDM must call QueryOutputProtectionStatus() + // periodically to ensure the desired protections are applied. + virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0; + + // Requests the current output protection status. Once the host has the status + // it will call ContentDecryptionModule::OnQueryOutputProtectionStatus(). + virtual void QueryOutputProtectionStatus() = 0; + + // Must be called by the CDM if it returned kDeferredInitialization during + // InitializeAudioDecoder() or InitializeVideoDecoder(). + virtual void OnDeferredInitializationDone(StreamType stream_type, + Status decoder_status) = 0; + + // Creates a FileIO object from the host to do file IO operation. Returns NULL + // if a FileIO object cannot be obtained. Once a valid FileIO object is + // returned, |client| must be valid until FileIO::Close() is called. The + // CDM can call this method multiple times to operate on different files. + virtual FileIO* CreateFileIO(FileIOClient* client) = 0; + + // Requests a specific version of the storage ID. A storage ID is a stable, + // device specific ID used by the CDM to securely store persistent data. The + // ID will be returned by the host via ContentDecryptionModule::OnStorageId(). + // If |version| is 0, the latest version will be returned. All |version|s + // that are greater than or equal to 0x80000000 are reserved for the CDM and + // should not be supported or returned by the host. The CDM must not expose + // the ID outside the client device, even in encrypted form. + virtual void RequestStorageId(uint32_t version) = 0; + + // Reports the metric |metric_name| with value |value| to the host. Can be + // called by the CDM at any time. May report the same metric multiple times + // during the lifetime of the CDM. + virtual void ReportMetrics(MetricName metric_name, uint64_t value) = 0; + + protected: + Host_11() {} + virtual ~Host_11() {} +}; + +class CDM_CLASS_API Host_12 { + public: + static const int kVersion = 12; + + // Returns a Buffer* containing non-zero members upon success, or NULL on + // failure. The caller owns the Buffer* after this call. The buffer is not + // guaranteed to be zero initialized. The capacity of the allocated Buffer + // is guaranteed to be not less than |capacity|. + virtual Buffer* Allocate(uint32_t capacity) = 0; + + // Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms| + // from now with |context|. + virtual void SetTimer(int64_t delay_ms, void* context) = 0; + + // Returns the current wall time. + virtual Time GetCurrentWallTime() = 0; + + // Called by the CDM with the result after the CDM instance was initialized. + virtual void OnInitialized(bool success) = 0; + + // Called by the CDM when a key status is available in response to + // GetStatusForPolicy(). + virtual void OnResolveKeyStatusPromise(uint32_t promise_id, + KeyStatus_2 key_status) = 0; + + // Called by the CDM when a session is created or loaded and the value for the + // MediaKeySession's sessionId attribute is available (|session_id|). + // This must be called before OnSessionMessage() or + // OnSessionKeysChange() is called for the same session. |session_id_size| + // should not include null termination. + // When called in response to LoadSession(), the |session_id| must be the + // same as the |session_id| passed in LoadSession(), or NULL if the + // session could not be loaded. + virtual void OnResolveNewSessionPromise(uint32_t promise_id, + const char* session_id, + uint32_t session_id_size) = 0; + + // Called by the CDM when a session is updated or released. + virtual void OnResolvePromise(uint32_t promise_id) = 0; + + // Called by the CDM when an error occurs as a result of one of the + // ContentDecryptionModule calls that accept a |promise_id|. + // |exception| must be specified. |error_message| and |system_code| + // are optional. |error_message_size| should not include null termination. + virtual void OnRejectPromise(uint32_t promise_id, + Exception exception, + uint32_t system_code, + const char* error_message, + uint32_t error_message_size) = 0; + + // Called by the CDM when it has a message for session |session_id|. + // Size parameters should not include null termination. + virtual void OnSessionMessage(const char* session_id, + uint32_t session_id_size, + MessageType message_type, + const char* message, + uint32_t message_size) = 0; + + // Called by the CDM when there has been a change in keys or their status for + // session |session_id|. |has_additional_usable_key| should be set if a + // key is newly usable (e.g. new key available, previously expired key has + // been renewed, etc.) and the browser should attempt to resume playback. + // |keys_info| is the list of key IDs for this session along with their + // current status. |keys_info_count| is the number of entries in |keys_info|. + // Size parameter for |session_id| should not include null termination. + virtual void OnSessionKeysChange(const char* session_id, + uint32_t session_id_size, + bool has_additional_usable_key, + const KeyInformation_2* keys_info, + uint32_t keys_info_count) = 0; + + // Called by the CDM when there has been a change in the expiration time for + // session |session_id|. This can happen as the result of an Update() call + // or some other event. If this happens as a result of a call to Update(), + // it must be called before resolving the Update() promise. |new_expiry_time| + // represents the time after which the key(s) in the session will no longer + // be usable for decryption. It can be 0 if no such time exists or if the + // license explicitly never expires. Size parameter should not include null + // termination. + virtual void OnExpirationChange(const char* session_id, + uint32_t session_id_size, + Time new_expiry_time) = 0; + + // Called by the CDM when session |session_id| is closed. Size + // parameter should not include null termination. + virtual void OnSessionClosed(const char* session_id, + uint32_t session_id_size) = 0; + + // The following are optional methods that may not be implemented on all + // platforms. + + // Sends a platform challenge for the given |service_id|. |challenge| is at + // most 256 bits of data to be signed. Once the challenge has been completed, + // the host will call ContentDecryptionModule::OnPlatformChallengeResponse() + // with the signed challenge response and platform certificate. Size + // parameters should not include null termination. + virtual void SendPlatformChallenge(const char* service_id, + uint32_t service_id_size, + const char* challenge, + uint32_t challenge_size) = 0; + + // Attempts to enable output protection (e.g. HDCP) on the display link. The + // |desired_protection_mask| is a bit mask of OutputProtectionMethods. No + // status callback is issued, the CDM must call QueryOutputProtectionStatus() + // periodically to ensure the desired protections are applied. + virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0; + + // Requests the current output protection status. Once the host has the status + // it will call ContentDecryptionModule::OnQueryOutputProtectionStatus(). + virtual void QueryOutputProtectionStatus() = 0; + + // Must be called by the CDM if it returned kDeferredInitialization during + // InitializeAudioDecoder() or InitializeVideoDecoder(). + virtual void OnDeferredInitializationDone(StreamType stream_type, + Status decoder_status) = 0; + + // Creates a FileIO object from the host to do file IO operation. Returns NULL + // if a FileIO object cannot be obtained. Once a valid FileIO object is + // returned, |client| must be valid until FileIO::Close() is called. The + // CDM can call this method multiple times to operate on different files. + virtual FileIO* CreateFileIO(FileIOClient* client) = 0; + + // Requests a specific version of the storage ID. A storage ID is a stable, + // device specific ID used by the CDM to securely store persistent data. The + // ID will be returned by the host via ContentDecryptionModule::OnStorageId(). + // If |version| is 0, the latest version will be returned. All |version|s + // that are greater than or equal to 0x80000000 are reserved for the CDM and + // should not be supported or returned by the host. The CDM must not expose + // the ID outside the client device, even in encrypted form. + virtual void RequestStorageId(uint32_t version) = 0; + + // Reports the metric |metric_name| with value |value| to the host. Can be + // called by the CDM at any time. May report the same metric multiple times + // during the lifetime of the CDM. + virtual void ReportMetrics(MetricName metric_name, uint64_t value) = 0; + + protected: + Host_12() {} + virtual ~Host_12() {} +}; } // namespace cdm -#endif // CDM_CONTENT_DECRYPTION_MODULE_H_ \ No newline at end of file +#endif // CDM_CONTENT_DECRYPTION_MODULE_H_ diff --git a/lib/cdm/cdm/media/cdm/api/content_decryption_module_proxy.h b/lib/cdm/cdm/media/cdm/api/content_decryption_module_proxy.h deleted file mode 100644 index e7ef22446..000000000 --- a/lib/cdm/cdm/media/cdm/api/content_decryption_module_proxy.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2017 The Chromium Authors. All rights reserved. - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: BSD-3-Clause - * See LICENSES/README.md for more information. - */ - -#ifndef CDM_CONTENT_DECRYPTION_MODULE_PROXY_H_ -#define CDM_CONTENT_DECRYPTION_MODULE_PROXY_H_ -#include "content_decryption_module_export.h" -#if defined(_MSC_VER) -typedef unsigned char uint8_t; -typedef unsigned int uint32_t; -typedef unsigned __int64 uint64_t; -#else -#include -#endif -namespace cdm { -class CDM_CLASS_API CdmProxyClient; -// A proxy class for the CDM. -// In general, the interpretation of the CdmProxy and CdmProxyClient method -// parameters are protocol dependent. For enum parameters, values outside the -// enum range may not work. -class CDM_CLASS_API CdmProxy { - public: - enum Function : uint32_t { - // For Intel Negotiate Crypto SessionKey Exchange (CSME) path to call - // ID3D11VideoContext::NegotiateCryptoSessionKeyExchange. - kIntelNegotiateCryptoSessionKeyExchange = 1, - // There will be more values in the future e.g. for D3D11 RSA method. - }; - // Initializes the proxy. The results will be returned in - // CdmProxyClient::OnInitialized(). - virtual void Initialize() = 0; - // Processes and updates the state of the proxy. - // |output_data_size| is required by some protocol to set up the output data. - // The operation may fail if the |output_data_size| is wrong. The results will - // be returned in CdmProxyClient::OnProcessed(). - virtual void Process(Function function, - uint32_t crypto_session_id, - const uint8_t* input_data, - uint32_t input_data_size, - uint32_t output_data_size) = 0; - // Creates a crypto session for handling media. - // If extra data has to be passed to further setup the media crypto session, - // pass the data as |input_data|. The results will be returned in - // CdmProxyClient::OnMediaCryptoSessionCreated(). - virtual void CreateMediaCryptoSession(const uint8_t* input_data, - uint32_t input_data_size) = 0; - // Sets a key for the session identified by |crypto_session_id|. - virtual void SetKey(uint32_t crypto_session_id, - const uint8_t* key_id, - uint32_t key_id_size, - const uint8_t* key_blob, - uint32_t key_blob_size) = 0; - // Removes a key for the session identified by |crypto_session_id|. - virtual void RemoveKey(uint32_t crypto_session_id, - const uint8_t* key_id, - uint32_t key_id_size) = 0; - protected: - CdmProxy() {} - virtual ~CdmProxy() {} -}; -// Responses to CdmProxy calls. All responses will be called asynchronously. -class CDM_CLASS_API CdmProxyClient { - public: - enum Status : uint32_t { - kOk, - kFail, - }; - enum Protocol : uint32_t { - kNone = 0, // No protocol supported. Can be used in failure cases. - kIntelConvergedSecurityAndManageabilityEngine, // Method using Intel CSME. - // There will be more values in the future e.g. kD3D11RsaHardware, - // kD3D11RsaSoftware to use the D3D11 RSA method. - }; - // Callback for Initialize(). If the proxy created a crypto session, then the - // ID for the crypto session is |crypto_session_id|. - virtual void OnInitialized(Status status, - Protocol protocol, - uint32_t crypto_session_id) = 0; - // Callback for Process(). |output_data| is the output of processing. - virtual void OnProcessed(Status status, - const uint8_t* output_data, - uint32_t output_data_size) = 0; - // Callback for CreateMediaCryptoSession(). On success: - // - |crypto_session_id| is the ID for the created crypto session. - // - |output_data| is extra value, if any. - // Otherwise, |crypto_session_id| and |output_data| should be ignored. - virtual void OnMediaCryptoSessionCreated(Status status, - uint32_t crypto_session_id, - uint64_t output_data) = 0; - // Called when there is a hardware reset and all the hardware context is lost. - virtual void NotifyHardwareReset() = 0; - protected: - CdmProxyClient() {} - virtual ~CdmProxyClient() {} -}; -} // namespace cdm -#endif // CDM_CONTENT_DECRYPTION_MODULE_PROXY_H_ \ No newline at end of file diff --git a/lib/cdm/cdm/media/cdm/cdm_adapter.cc b/lib/cdm/cdm/media/cdm/cdm_adapter.cc index 2a7d680a9..b12442f54 100644 --- a/lib/cdm/cdm/media/cdm/cdm_adapter.cc +++ b/lib/cdm/cdm/media/cdm/cdm_adapter.cc @@ -70,12 +70,12 @@ void* GetCdmHost(int host_interface_version, void* user_data) switch (host_interface_version) { - case cdm::Host_9::kVersion: - return static_cast(adapter); case cdm::Host_10::kVersion: return static_cast(adapter); case cdm::Host_11::kVersion: return static_cast(adapter); + case cdm::Host_12::kVersion: + return static_cast(adapter); default: return nullptr; } @@ -149,22 +149,6 @@ bool CreateDirs(const char* path) } // namespace -cdm::AudioDecoderConfig_1 ToAudioDecoderConfig_1( - const cdm::AudioDecoderConfig_2& config) { - return{ config.codec, - config.channel_count, - config.bits_per_channel, - config.samples_per_second, - config.extra_data, - config.extra_data_size }; -} - -cdm::VideoDecoderConfig_1 ToVideoDecoderConfig_1( - const cdm::VideoDecoderConfig_3& config) { - return{ config.codec, config.profile, config.format, - config.coded_size, config.extra_data, config.extra_data_size }; -} - cdm::VideoDecoderConfig_2 ToVideoDecoderConfig_2( const cdm::VideoDecoderConfig_3& config) { return{ config.codec, @@ -176,13 +160,6 @@ cdm::VideoDecoderConfig_2 ToVideoDecoderConfig_2( config.encryption_scheme }; } -cdm::InputBuffer_1 ToInputBuffer_1(const cdm::InputBuffer_2& buffer) { - return{ buffer.data, buffer.data_size, - buffer.key_id, buffer.key_id_size, - buffer.iv, buffer.iv_size, - buffer.subsamples, buffer.num_subsamples, - buffer.timestamp }; -} /******************************* CdmAdapter ****************************************/ @@ -200,7 +177,6 @@ CdmAdapter::CdmAdapter( , key_system_(key_system) , cdm_config_(cdm_config) , active_buffer_(0) -, cdm9_(0), cdm10_(0), cdm11_(0) { //DCHECK(!key_system_.empty()); Initialize(); @@ -208,12 +184,12 @@ CdmAdapter::CdmAdapter( CdmAdapter::~CdmAdapter() { - if (cdm9_) - cdm9_->Destroy(), cdm9_ = nullptr; - else if (cdm10_) - cdm10_->Destroy(), cdm10_ = nullptr; + if (cdm12_) + cdm12_->Destroy(), cdm12_ = nullptr; else if (cdm11_) cdm11_->Destroy(), cdm11_ = nullptr; + else if (cdm10_) + cdm10_->Destroy(), cdm10_ = nullptr; else return; @@ -225,14 +201,14 @@ CdmAdapter::~CdmAdapter() void CdmAdapter::Initialize() { m_isClosingSession = false; - if (cdm9_ || cdm10_ || cdm11_) + if (cdm12_ || cdm11_ || cdm10_) { - if (cdm9_) - cdm9_->Destroy(), cdm9_ = nullptr; - else if (cdm10_) - cdm10_->Destroy(), cdm10_ = nullptr; + if (cdm12_) + cdm12_->Destroy(), cdm12_ = nullptr; else if (cdm11_) cdm11_->Destroy(), cdm11_ = nullptr; + else if (cdm10_) + cdm10_->Destroy(), cdm10_ = nullptr; base::UnloadNativeLibrary(library_); library_ = 0; } @@ -259,17 +235,6 @@ void CdmAdapter::Initialize() } std::string version{get_cdm_verion_func()}; - - if (version == "4.10.2891.0") - { - // This version have unclear problems - // such as crashes on OnStorageId() method calls and others video decoding crashes - Log(LogLevel::ERROR, - "THE CDM VERSION \"4.10.2891.0\" IS NOT SUPPORTED DUE TO UNCLEAR LIBRARY ISSUES.\n" - "------------------------------> PLEASE INSTALL AN OLDER VERSION OF WIDEVINE CDM!"); - return; - } - Log(LogLevel::DEBUG, "CDM version: %s", version.c_str()); #if defined(OS_WIN) @@ -280,27 +245,32 @@ void CdmAdapter::Initialize() init_cdm_func(); - cdm11_ = static_cast(create_cdm_func(11, key_system_.data(), key_system_.size(), GetCdmHost, this)); + cdm12_ = static_cast(create_cdm_func( + 12, key_system_.data(), static_cast(key_system_.size()), GetCdmHost, this)); - if (!cdm11_) + if (!cdm12_) { - cdm10_ = static_cast(create_cdm_func(10, key_system_.data(), key_system_.size(), GetCdmHost, this)); + cdm11_ = static_cast(create_cdm_func( + 11, key_system_.data(), static_cast(key_system_.size()), GetCdmHost, this)); - if (!cdm10_) - cdm9_ = reinterpret_cast(create_cdm_func(9, key_system_.data(), key_system_.size(), GetCdmHost, this)); + if (!cdm11_) + { + cdm10_ = static_cast(create_cdm_func( + 10, key_system_.data(), static_cast(key_system_.size()), GetCdmHost, this)); + } } - if (cdm9_ || cdm10_ || cdm11_) + if (cdm12_ || cdm11_ || cdm10_) { - if (cdm9_) - cdm9_->Initialize(cdm_config_.allow_distinctive_identifier, - cdm_config_.allow_persistent_state); - else if(cdm10_) - cdm10_->Initialize(cdm_config_.allow_distinctive_identifier, + if(cdm12_) + cdm12_->Initialize(cdm_config_.allow_distinctive_identifier, cdm_config_.allow_persistent_state, false); else if (cdm11_) cdm11_->Initialize(cdm_config_.allow_distinctive_identifier, cdm_config_.allow_persistent_state, false); + else if (cdm10_) + cdm10_->Initialize(cdm_config_.allow_distinctive_identifier, + cdm_config_.allow_persistent_state, false); } else { @@ -330,15 +300,15 @@ void CdmAdapter::SetServerCertificate(uint32_t promise_id, server_certificate_data_size > limits::kMaxCertificateLength) { return; } - if (cdm9_) - cdm9_->SetServerCertificate(promise_id, server_certificate_data, - server_certificate_data_size); - else if (cdm10_) - cdm10_->SetServerCertificate(promise_id, server_certificate_data, + + if (cdm12_) + cdm12_->SetServerCertificate(promise_id, server_certificate_data, server_certificate_data_size); else if (cdm11_) cdm11_->SetServerCertificate(promise_id, server_certificate_data, server_certificate_data_size); + else if (cdm10_) + cdm10_->SetServerCertificate(promise_id, server_certificate_data, server_certificate_data_size); } void CdmAdapter::CreateSessionAndGenerateRequest(uint32_t promise_id, @@ -347,21 +317,15 @@ void CdmAdapter::CreateSessionAndGenerateRequest(uint32_t promise_id, const uint8_t* init_data, uint32_t init_data_size) { - if (cdm9_) - cdm9_->CreateSessionAndGenerateRequest( - promise_id, session_type, - init_data_type, init_data, - init_data_size); - else if (cdm10_) - cdm10_->CreateSessionAndGenerateRequest( - promise_id, session_type, - init_data_type, init_data, - init_data_size); - else if (cdm11_) - cdm11_->CreateSessionAndGenerateRequest( - promise_id, session_type, - init_data_type, init_data, - init_data_size); + if (cdm12_) + cdm12_->CreateSessionAndGenerateRequest(promise_id, session_type, init_data_type, init_data, + init_data_size); + else if (cdm11_) + cdm11_->CreateSessionAndGenerateRequest(promise_id, session_type, init_data_type, init_data, + init_data_size); + else if (cdm10_) + cdm10_->CreateSessionAndGenerateRequest(promise_id, session_type, init_data_type, init_data, + init_data_size); } void CdmAdapter::LoadSession(uint32_t promise_id, @@ -369,15 +333,12 @@ void CdmAdapter::LoadSession(uint32_t promise_id, const char* session_id, uint32_t session_id_size) { - if (cdm9_) - cdm9_->LoadSession(promise_id, session_type, - session_id, session_id_size); - else if (cdm10_) - cdm10_->LoadSession(promise_id, session_type, - session_id, session_id_size); + if (cdm12_) + cdm12_->LoadSession(promise_id, session_type, session_id, session_id_size); else if (cdm11_) - cdm11_->LoadSession(promise_id, session_type, - session_id, session_id_size); + cdm11_->LoadSession(promise_id, session_type, session_id, session_id_size); + else if (cdm10_) + cdm10_->LoadSession(promise_id, session_type, session_id, session_id_size); } void CdmAdapter::UpdateSession(uint32_t promise_id, @@ -386,15 +347,12 @@ void CdmAdapter::UpdateSession(uint32_t promise_id, const uint8_t* response, uint32_t response_size) { - if (cdm9_) - cdm9_->UpdateSession(promise_id, session_id, session_id_size, - response, response_size); - else if(cdm10_) - cdm10_->UpdateSession(promise_id, session_id, session_id_size, - response, response_size); + if (cdm12_) + cdm12_->UpdateSession(promise_id, session_id, session_id_size, response, response_size); else if (cdm11_) - cdm11_->UpdateSession(promise_id, session_id, session_id_size, - response, response_size); + cdm11_->UpdateSession(promise_id, session_id, session_id_size, response, response_size); + else if (cdm10_) + cdm10_->UpdateSession(promise_id, session_id, session_id_size, response, response_size); } void CdmAdapter::CloseSession(uint32_t promise_id, @@ -406,12 +364,12 @@ void CdmAdapter::CloseSession(uint32_t promise_id, m_isClosingSession = true; } m_sessionClosingCond.notify_all(); - if (cdm9_) - cdm9_->CloseSession(promise_id, session_id, session_id_size); - else if (cdm10_) - cdm10_->CloseSession(promise_id, session_id, session_id_size); + if (cdm12_) + cdm12_->CloseSession(promise_id, session_id, session_id_size); else if (cdm11_) cdm11_->CloseSession(promise_id, session_id, session_id_size); + else if (cdm10_) + cdm10_->CloseSession(promise_id, session_id, session_id_size); // remove any shared_ptr references left m_asyncTimerTasks.clear(); } @@ -420,22 +378,22 @@ void CdmAdapter::RemoveSession(uint32_t promise_id, const char* session_id, uint32_t session_id_size) { - if (cdm9_) - cdm9_->RemoveSession(promise_id, session_id, session_id_size); - else if (cdm10_) - cdm10_->RemoveSession(promise_id, session_id, session_id_size); + if (cdm12_) + cdm12_->RemoveSession(promise_id, session_id, session_id_size); else if (cdm11_) cdm11_->RemoveSession(promise_id, session_id, session_id_size); + else if (cdm10_) + cdm10_->RemoveSession(promise_id, session_id, session_id_size); } void CdmAdapter::TimerExpired(void* context) { - if (cdm9_) - cdm9_->TimerExpired(context); - else if (cdm10_) - cdm10_->TimerExpired(context); + if (cdm12_) + cdm12_->TimerExpired(context); else if (cdm11_) cdm11_->TimerExpired(context); + else if (cdm10_) + cdm10_->TimerExpired(context); } cdm::Status CdmAdapter::Decrypt(const cdm::InputBuffer_2& encrypted_buffer, @@ -450,15 +408,12 @@ cdm::Status CdmAdapter::Decrypt(const cdm::InputBuffer_2& encrypted_buffer, active_buffer_ = decrypted_buffer->DecryptedBuffer(); cdm::Status ret; - if (cdm9_) - ret = cdm9_->Decrypt(ToInputBuffer_1(encrypted_buffer), decrypted_buffer); + if (cdm12_) + ret = cdm12_->Decrypt(encrypted_buffer, decrypted_buffer); + else if (cdm11_) + ret = cdm11_->Decrypt(encrypted_buffer, decrypted_buffer); else if (cdm10_) ret = cdm10_->Decrypt(encrypted_buffer, decrypted_buffer); - else if (cdm11_) - { - cdm::InputBuffer_2 tmp(encrypted_buffer); - ret = cdm11_->Decrypt(tmp, decrypted_buffer); - } active_buffer_ = 0; return ret; @@ -467,45 +422,47 @@ cdm::Status CdmAdapter::Decrypt(const cdm::InputBuffer_2& encrypted_buffer, cdm::Status CdmAdapter::InitializeAudioDecoder( const cdm::AudioDecoderConfig_2& audio_decoder_config) { - if (cdm9_) - return cdm9_->InitializeAudioDecoder(ToAudioDecoderConfig_1(audio_decoder_config)); - else if (cdm10_) - return cdm10_->InitializeAudioDecoder(audio_decoder_config); + if (cdm12_) + return cdm12_->InitializeAudioDecoder(audio_decoder_config); else if (cdm11_) return cdm11_->InitializeAudioDecoder(audio_decoder_config); + else if (cdm10_) + return cdm10_->InitializeAudioDecoder(audio_decoder_config); + return cdm::kDeferredInitialization; } cdm::Status CdmAdapter::InitializeVideoDecoder( const cdm::VideoDecoderConfig_3& video_decoder_config) { - if (cdm9_) - return cdm9_->InitializeVideoDecoder(ToVideoDecoderConfig_1(video_decoder_config)); + if (cdm12_) + return cdm12_->InitializeVideoDecoder(video_decoder_config); + else if (cdm11_) + return cdm11_->InitializeVideoDecoder(ToVideoDecoderConfig_2(video_decoder_config)); else if (cdm10_) return cdm10_->InitializeVideoDecoder(ToVideoDecoderConfig_2(video_decoder_config)); - else if (cdm11_) - return cdm11_->InitializeVideoDecoder(video_decoder_config); + return cdm::kDeferredInitialization; } void CdmAdapter::DeinitializeDecoder(cdm::StreamType decoder_type) { - if (cdm9_) - cdm9_->DeinitializeDecoder(decoder_type); - else if (cdm10_) - cdm10_->DeinitializeDecoder(decoder_type); + if (cdm12_) + cdm12_->DeinitializeDecoder(decoder_type); else if (cdm11_) cdm11_->DeinitializeDecoder(decoder_type); + else if (cdm10_) + cdm10_->DeinitializeDecoder(decoder_type); } void CdmAdapter::ResetDecoder(cdm::StreamType decoder_type) { - if (cdm9_) - cdm9_->ResetDecoder(decoder_type); - else if (cdm10_) - cdm10_->ResetDecoder(decoder_type); + if (cdm12_) + cdm12_->ResetDecoder(decoder_type); else if (cdm11_) cdm11_->ResetDecoder(decoder_type); + else if (cdm10_) + cdm10_->ResetDecoder(decoder_type); } cdm::Status CdmAdapter::DecryptAndDecodeFrame(const cdm::InputBuffer_2& encrypted_buffer, @@ -514,12 +471,12 @@ cdm::Status CdmAdapter::DecryptAndDecodeFrame(const cdm::InputBuffer_2& encrypte std::lock_guard lock(decrypt_mutex_); cdm::Status ret(cdm::kDeferredInitialization); - if (cdm9_) - ret = cdm9_->DecryptAndDecodeFrame(ToInputBuffer_1(encrypted_buffer), video_frame); - else if (cdm10_) - ret = cdm10_->DecryptAndDecodeFrame(encrypted_buffer, video_frame); + if (cdm12_) + ret = cdm12_->DecryptAndDecodeFrame(encrypted_buffer, video_frame); else if (cdm11_) ret = cdm11_->DecryptAndDecodeFrame(encrypted_buffer, video_frame); + else if (cdm10_) + ret = cdm10_->DecryptAndDecodeFrame(encrypted_buffer, video_frame); active_buffer_ = 0; return ret; @@ -529,39 +486,36 @@ cdm::Status CdmAdapter::DecryptAndDecodeSamples(const cdm::InputBuffer_2& encryp cdm::AudioFrames* audio_frames) { std::lock_guard lock(decrypt_mutex_); - if (cdm9_) - return cdm9_->DecryptAndDecodeSamples(ToInputBuffer_1(encrypted_buffer), audio_frames); - else if (cdm10_) - return cdm10_->DecryptAndDecodeSamples(encrypted_buffer, audio_frames); + if (cdm12_) + return cdm12_->DecryptAndDecodeSamples(encrypted_buffer, audio_frames); else if (cdm11_) return cdm11_->DecryptAndDecodeSamples(encrypted_buffer, audio_frames); + else if (cdm10_) + return cdm10_->DecryptAndDecodeSamples(encrypted_buffer, audio_frames); return cdm::kDeferredInitialization; } void CdmAdapter::OnPlatformChallengeResponse( const cdm::PlatformChallengeResponse& response) { - if (cdm9_) - cdm9_->OnPlatformChallengeResponse(response); - else if (cdm10_) - cdm10_->OnPlatformChallengeResponse(response); + if (cdm12_) + cdm12_->OnPlatformChallengeResponse(response); else if (cdm11_) cdm11_->OnPlatformChallengeResponse(response); + else if (cdm10_) + cdm10_->OnPlatformChallengeResponse(response); } void CdmAdapter::OnQueryOutputProtectionStatus(cdm::QueryResult result, uint32_t link_mask, uint32_t output_protection_mask) { - if (cdm9_) - cdm9_->OnQueryOutputProtectionStatus(result, link_mask, - output_protection_mask); - else if (cdm10_) - cdm10_->OnQueryOutputProtectionStatus(result, link_mask, - output_protection_mask); + if (cdm12_) + cdm12_->OnQueryOutputProtectionStatus(result, link_mask, output_protection_mask); else if (cdm11_) - cdm11_->OnQueryOutputProtectionStatus(result, link_mask, - output_protection_mask); + cdm11_->OnQueryOutputProtectionStatus(result, link_mask, output_protection_mask); + else if (cdm10_) + cdm10_->OnQueryOutputProtectionStatus(result, link_mask, output_protection_mask); } /******************************** HOST *****************************************/ @@ -644,6 +598,27 @@ void CdmAdapter::OnSessionKeysChange(const char* session_id, } } +void CdmAdapter::OnSessionKeysChange(const char* session_id, + uint32_t session_id_size, + bool has_additional_usable_key, + const cdm::KeyInformation_2* keys_info, + uint32_t keys_info_count) +{ + for (uint32_t i(0); i < keys_info_count; ++i) + { + char buffer[128]; + char* bufferPtr{buffer}; + for (uint32_t j{0}; j < keys_info[i].key_id_size; ++j) + bufferPtr += std::snprintf(bufferPtr, 3, "%02X", (int)keys_info[i].key_id[j]); + Log(LogLevel::DEBUG, "OnSessionKeysChange: KID %s, Status: %d, System code: %u", buffer, + keys_info[i].status, keys_info[i].system_code); + + SendClientMessage(session_id, session_id_size, CdmAdapterClient::kSessionKeysChange, + keys_info[i].key_id, keys_info[i].key_id_size, + static_cast(keys_info[i].status)); + } +} + void CdmAdapter::OnExpirationChange(const char* session_id, uint32_t session_id_size, cdm::Time new_expiry_time) @@ -685,12 +660,14 @@ cdm::FileIO* CdmAdapter::CreateFileIO(cdm::FileIOClient* client) return new CdmFileIoImpl(cdm_base_path_, client); } - -// Host_9 specific implementations void CdmAdapter::OnResolveKeyStatusPromise(uint32_t promise_id, cdm::KeyStatus key_status) { } +void CdmAdapter::OnResolveKeyStatusPromise(uint32_t promise_id, cdm::KeyStatus_2 key_status) +{ +} + void CdmAdapter::OnRejectPromise(uint32_t promise_id, cdm::Exception exception, uint32_t system_code, const char* error_message, uint32_t error_message_size) { @@ -704,10 +681,16 @@ void CdmAdapter::OnSessionMessage(const char* session_id, uint32_t session_id_si void CdmAdapter::RequestStorageId(uint32_t version) { - if (cdm10_) - cdm10_->OnStorageId(1, nullptr, 0); + if (cdm12_) + cdm12_->OnStorageId(version, nullptr, 0); else if (cdm11_) - cdm11_->OnStorageId(1, nullptr, 0); + cdm11_->OnStorageId(version, nullptr, 0); + else if (cdm10_) + cdm10_->OnStorageId(version, nullptr, 0); +} + +void CdmAdapter::ReportMetrics(cdm::MetricName metric_name, uint64_t value) +{ } void CdmAdapter::OnInitialized(bool success) @@ -763,7 +746,7 @@ void CdmFileIoImpl::Read() } } else status = cdm::FileIOClient::Status::kSuccess; - client_->OnReadComplete(status, data_buffer_, sz); + client_->OnReadComplete(status, data_buffer_, static_cast(sz)); } void CdmFileIoImpl::Write(const uint8_t* data, uint32_t data_size) diff --git a/lib/cdm/cdm/media/cdm/cdm_adapter.h b/lib/cdm/cdm/media/cdm/cdm_adapter.h index d800281b9..7720a4e16 100644 --- a/lib/cdm/cdm/media/cdm/cdm_adapter.h +++ b/lib/cdm/cdm/media/cdm/cdm_adapter.h @@ -69,16 +69,16 @@ class CdmVideoFrame : public cdm::VideoFrame, public cdm::VideoFrame_2 { cdm::Size m_size; cdm::ColorSpace m_colorSpace; - uint32_t m_planeOffsets[cdm::VideoPlane::kMaxPlanes]; - uint32_t m_stride[cdm::VideoPlane::kMaxPlanes]; + uint32_t m_planeOffsets[cdm::kMaxPlanes]; + uint32_t m_stride[cdm::kMaxPlanes]; uint64_t m_pts; }; -class CdmAdapter : public std::enable_shared_from_this - , public cdm::Host_9 - , public cdm::Host_10 - , public cdm::Host_11 +class CdmAdapter : public std::enable_shared_from_this, + public cdm::Host_10, + public cdm::Host_11, + public cdm::Host_12 { public: void timerfunc(CdmAdapter* adp, int64_t delay, void* context); @@ -158,6 +158,9 @@ class CdmAdapter : public std::enable_shared_from_this void OnResolveKeyStatusPromise(uint32_t promise_id, cdm::KeyStatus key_status) override; + // Used by CDM12 and beyond + void OnResolveKeyStatusPromise(uint32_t promise_id, cdm::KeyStatus_2 key_status) override; + void OnResolveNewSessionPromise(uint32_t promise_id, const char* session_id, uint32_t session_id_size) override; @@ -180,6 +183,13 @@ class CdmAdapter : public std::enable_shared_from_this uint32_t session_id_size, bool has_additional_usable_key, const cdm::KeyInformation* keys_info, + uint32_t keys_info_count) override; + + // Used by CDM12 and beyond + void OnSessionKeysChange(const char* session_id, + uint32_t session_id_size, + bool has_additional_usable_key, + const cdm::KeyInformation_2* keys_info, uint32_t keys_info_count) override; void OnExpirationChange(const char* session_id, @@ -205,7 +215,7 @@ class CdmAdapter : public std::enable_shared_from_this void RequestStorageId(uint32_t version) override; - cdm::CdmProxy* RequestCdmProxy(cdm::CdmProxyClient* client) override { return nullptr; }; + void ReportMetrics(cdm::MetricName metric_name, uint64_t value) override; void OnInitialized(bool success) override; @@ -250,9 +260,9 @@ class CdmAdapter : public std::enable_shared_from_this cdm::MessageType message_type_; cdm::Buffer *active_buffer_; - cdm::ContentDecryptionModule_9 *cdm9_; - cdm::ContentDecryptionModule_10 *cdm10_; - cdm::ContentDecryptionModule_11 *cdm11_; + cdm::ContentDecryptionModule_10* cdm10_{nullptr}; + cdm::ContentDecryptionModule_11* cdm11_{nullptr}; + cdm::ContentDecryptionModule_12* cdm12_{nullptr}; DISALLOW_COPY_AND_ASSIGN(CdmAdapter); }; diff --git a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp index 0a2432261..4fd607b71 100644 --- a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp +++ b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp @@ -1125,7 +1125,7 @@ VIDEOCODEC_RETVAL CWVCencSingleSampleDecrypter::VideoFrameDataToPicture( picture->decodedDataSize = videoFrame.FrameBuffer()->Size(); picture->videoBufferHandle = static_cast(videoFrame.FrameBuffer())->Buffer(); - for (size_t i = 0; i < cdm::VideoPlane::kMaxPlanes; ++i) + for (size_t i = 0; i < cdm::kMaxPlanes; ++i) { picture->planeOffsets[i] = videoFrame.PlaneOffset(static_cast(i)); picture->stride[i] = videoFrame.Stride(static_cast(i)); From 9eb85d2f505efcb499369df46d14c693ac93e437 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 4 May 2025 07:10:24 +0000 Subject: [PATCH 76/91] changelog and version v21.5.13 (2025-05-04) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 31f617570..268e456a0 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 445276b9e..fd0b4b71b 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,7 @@ +v21.5.13 (2025-05-04) +- Fix crash with Widevine CDM 4.10.2891.0 +- [Widevine] Updated CDM interface + v21.5.12 (2025-04-27) - [Dash] Fix SegmentTemplate TSB to prevent use extra live delay workarounds From bb1cd31430ee190701bc3a0c24e9455aaf22f127 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 6 May 2025 11:07:37 +0200 Subject: [PATCH 77/91] [UrlUtils] Fix Join to keep dots in a path --- src/test/TestUtils.cpp | 11 +++++++++++ src/utils/UrlUtils.cpp | 33 +++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/test/TestUtils.cpp b/src/test/TestUtils.cpp index 200d434a6..6262a232c 100644 --- a/src/test/TestUtils.cpp +++ b/src/test/TestUtils.cpp @@ -134,6 +134,17 @@ TEST_F(UtilsTest, JoinUrls) otherUrl = "./"; EXPECT_EQ(URL::Join(baseUrl, otherUrl), "https://foo.bar/sub1/sub2/"); + + baseUrl = "https://foo.bar/sub1../sub2./"; + otherUrl = ".ending"; + EXPECT_EQ(URL::Join(baseUrl, otherUrl), "https://foo.bar/sub1../sub2./.ending"); + + otherUrl = "./.ending/."; + EXPECT_EQ(URL::Join(baseUrl, otherUrl), "https://foo.bar/sub1../sub2./.ending/"); + + otherUrl = "./.ending/./"; + EXPECT_EQ(URL::Join(baseUrl, otherUrl), "https://foo.bar/sub1../sub2./.ending/"); + // Less common and malformed test cases baseUrl = "https://foo.bar/sub1/sub2/"; diff --git a/src/utils/UrlUtils.cpp b/src/utils/UrlUtils.cpp index 74cb3307e..c2b82fdb7 100644 --- a/src/utils/UrlUtils.cpp +++ b/src/utils/UrlUtils.cpp @@ -78,6 +78,29 @@ bool isUrl(std::string url, return true; } +void RemovePrefixSingleDot(std::string& url) +{ + size_t pos{0}; + // Remove occurrences of "/./" preserving the separator + while ((pos = url.find("/./")) != std::string::npos) + { + url.erase(pos, 2); + } + + if (StringUtils::EndsWith(url, "/.")) + url.pop_back(); // Delete the dot and preserve the separator +} + +void RemovePrefixDoubleDot(std::string& url) +{ + size_t pos{0}; + // Remove occurrences of "/../" preserving the separator + while ((pos = url.find("/../")) != std::string::npos) + { + url.erase(pos, 3); + } +} + /* * \brief Remove and resolve special dot's from the end of the url. * e.g. "http://foo.bar/sub1/sub2/.././" will result "http://foo.bar/sub1/" @@ -88,18 +111,18 @@ std::string RemoveDotSegments(std::string url) size_t numSegsRemove{0}; size_t currPos{0}; size_t startPos{url.size() - 2}; - while ((currPos = url.rfind("/", startPos)) != std::string::npos) + while ((currPos = url.rfind('/', startPos)) != std::string::npos) { // Stop to ignore "/../" from the start of string, e.g. ignored --> "../../something/../" <-- handled - if (url.substr(currPos + 1, startPos - currPos + 1) != PREFIX_DOUBLE_DOT) + if (currPos == 0 || url.substr(currPos + 1, startPos - currPos + 1) != PREFIX_DOUBLE_DOT) break; startPos = currPos - 1; numSegsRemove++; } // Remove special prefixes - UTILS::STRING::ReplaceAll(url, PREFIX_DOUBLE_DOT, ""); - UTILS::STRING::ReplaceAll(url, PREFIX_SINGLE_DOT, ""); + RemovePrefixSingleDot(url); + RemovePrefixDoubleDot(url); size_t addrsStartPos{0}; if (IsUrlAbsolute(url)) @@ -286,8 +309,6 @@ std::string UTILS::URL::Join(std::string baseUrl, std::string relativeUrl) if (relativeUrl == ".") // Ignore single dot relativeUrl.clear(); - else if (relativeUrl.compare(0, 2, PREFIX_SINGLE_DOT) == 0) // Ignore prefix ./ - relativeUrl.erase(0, 2); // Sanitize for missing backslash if (relativeUrl == ".." || StringUtils::EndsWith(relativeUrl, "/..")) From 582bcd11d6eba709ee5a0d8e7449d0e4d00e6b40 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 08:51:24 +0000 Subject: [PATCH 78/91] changelog and version v21.5.14 (2025-05-15) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 268e456a0..6156e104c 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index fd0b4b71b..fa3bbe837 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.14 (2025-05-15) +- Fix playback problem due to URLs containing dots on paths + v21.5.13 (2025-05-04) - Fix crash with Widevine CDM 4.10.2891.0 - [Widevine] Updated CDM interface From 76a4f0bc71e43451e42d757bdbe1670019fc2fd2 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Thu, 8 May 2025 09:28:12 +0200 Subject: [PATCH 79/91] [UrlUtils] Removed unused endPos var --- src/utils/UrlUtils.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/UrlUtils.cpp b/src/utils/UrlUtils.cpp index c2b82fdb7..1d3e1148d 100644 --- a/src/utils/UrlUtils.cpp +++ b/src/utils/UrlUtils.cpp @@ -288,7 +288,6 @@ std::string UTILS::URL::GetBaseDomain(std::string url) const size_t portPos = url.find_first_of(':', domainStartPos); const size_t pathPos = url.find_first_of('/', domainStartPos); - size_t endPos = url.size(); if (portPos != std::string::npos && portPos < pathPos) url.erase(portPos); // remove port number else if (pathPos != std::string::npos) From 4d0244bdbcfd76add73b5b4384ffb5fa07f958b7 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Sat, 24 May 2025 13:32:10 +0200 Subject: [PATCH 80/91] [UrlUtils] Preserve url port number --- src/decrypters/Helpers.cpp | 11 +++++++++++ src/test/TestUtils.cpp | 4 ++-- src/utils/UrlUtils.cpp | 5 +---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/decrypters/Helpers.cpp b/src/decrypters/Helpers.cpp index 10c1cf979..b90f15e13 100644 --- a/src/decrypters/Helpers.cpp +++ b/src/decrypters/Helpers.cpp @@ -81,8 +81,19 @@ std::string DRM::GenerateUrlDomainHash(std::string_view url) // to avoid possible collisions, so we include the first directory path after the domain name // e.g. http://localhost:1234/addonservicename/other_dir/get_license?id=xyz // domain will result: http://localhost/addonservicename/ + // The port number will be removed, since add-ons should use each time a different random + // port number to avoid conflicts with other add-ons and/or system services if (STRING::Contains(baseDomain, "127.0.0.1") || STRING::Contains(baseDomain, "localhost")) { + const size_t bdStartPos = baseDomain.find("://") + 3; + const size_t bdPortPos = baseDomain.find_first_of(':', bdStartPos); + if (bdPortPos != std::string::npos) + { + // Remove the port number + // e.g. "http://localhost:1234" will remove ":1234" + baseDomain.erase(bdPortPos); + } + const size_t domainStartPos = url.find("://") + 3; const size_t pathStartPos = url.find_first_of('/', domainStartPos); if (pathStartPos != std::string::npos) diff --git a/src/test/TestUtils.cpp b/src/test/TestUtils.cpp index 6262a232c..25f564e44 100644 --- a/src/test/TestUtils.cpp +++ b/src/test/TestUtils.cpp @@ -44,10 +44,10 @@ TEST_F(UtilsTest, DetermineBaseDomain) EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar"); url = "https://www.foo.bar:1234"; - EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar"); + EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar:1234"); url = "https://www.foo.bar:1234/mpd/test.mpd?ping=pong"; - EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar"); + EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar:1234"); url = "https://www.foo.bar/example/smil:rtmp.smil/playlist.m3u8?ping=pong"; EXPECT_EQ(URL::GetBaseDomain(url), "https://www.foo.bar"); diff --git a/src/utils/UrlUtils.cpp b/src/utils/UrlUtils.cpp index 1d3e1148d..3e9fb1bed 100644 --- a/src/utils/UrlUtils.cpp +++ b/src/utils/UrlUtils.cpp @@ -285,12 +285,9 @@ std::string UTILS::URL::GetBaseDomain(std::string url) return ""; // Not valid const size_t domainStartPos = schemeEndPos + 3; - const size_t portPos = url.find_first_of(':', domainStartPos); const size_t pathPos = url.find_first_of('/', domainStartPos); - if (portPos != std::string::npos && portPos < pathPos) - url.erase(portPos); // remove port number - else if (pathPos != std::string::npos) + if (pathPos != std::string::npos) url.erase(pathPos); // remove from slash return url; From bc7f3ff15aa2de4487c4eca33f3cdc4d5a22e875 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 6 Jul 2025 07:54:23 +0000 Subject: [PATCH 81/91] changelog and version v21.5.15 (2025-07-06) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 6156e104c..f2e2a36fc 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index fa3bbe837..3a7e82410 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.15 (2025-07-06) +- Fix playback with IP with port number + v21.5.14 (2025-05-15) - Fix playback problem due to URLs containing dots on paths From 5dc352c4930695a0d4cf981137a9c8c5b01d77f6 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Fri, 26 Sep 2025 11:26:32 +0200 Subject: [PATCH 82/91] [FragmentedSampleReader] Reset crypto info on change If crypto info has been set previously, and the current package does not use it, it must be reset to prevent the decryptor from attempting to decrypt unencrypted content --- src/samplereader/FragmentedSampleReader.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index 9549abe7b..ec6b1315b 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -429,6 +429,11 @@ AP4_Result CFragmentedSampleReader::ProcessMoof(AP4_ContainerAtom* moof, LOG::LogF(LOGERROR, "Protection scheme %u not implemented.", schemeType); } } + else + { + // Reset for unencrypted content + m_readerCryptoInfo = CryptoInfo(); + } } SUCCESS: if (m_singleSampleDecryptor && m_codecHandler) From 0b4dbaeffd175c4cddd32f7fd61cf81f12bda27d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 06:38:36 +0000 Subject: [PATCH 83/91] changelog and version v21.5.16 (2025-09-29) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index f2e2a36fc..525ff41e4 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index 3a7e82410..daa0565e6 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.16 (2025-09-29) +- Fix no picture on MP4 videos with mixed encrypted/unencrypted contents + v21.5.15 (2025-07-06) - Fix playback with IP with port number From 7f0eb57eb193efc18605129430b3838cfb8877f5 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 11 Nov 2025 11:40:59 +0100 Subject: [PATCH 84/91] [FragmentedSampleReader] Fix decryption switching --- src/samplereader/FragmentedSampleReader.cpp | 47 ++++++++++----------- src/samplereader/FragmentedSampleReader.h | 3 +- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index ec6b1315b..e80a99ab2 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -47,7 +47,7 @@ CFragmentedSampleReader::~CFragmentedSampleReader() { if (m_singleSampleDecryptor) m_singleSampleDecryptor->RemovePool(m_poolId); - delete m_decrypter; + delete m_codecHandler; } @@ -58,11 +58,10 @@ bool CFragmentedSampleReader::Initialize(SESSION::CStream* stream) AP4_SampleDescription* desc{m_track->GetSampleDescription(0)}; if (desc->GetType() == AP4_SampleDescription::TYPE_PROTECTED) { - m_protectedDesc = static_cast(desc); + auto protectedDesc = static_cast(desc); AP4_ContainerAtom* schi; - if (m_protectedDesc->GetSchemeInfo() && - (schi = m_protectedDesc->GetSchemeInfo()->GetSchiAtom())) + if (protectedDesc->GetSchemeInfo() && (schi = protectedDesc->GetSchemeInfo()->GetSchiAtom())) { AP4_TencAtom* tenc(AP4_DYNAMIC_CAST(AP4_TencAtom, schi->GetChild(AP4_ATOM_TYPE_TENC, 0))); if (tenc && tenc->GetDefaultKid()) @@ -132,15 +131,10 @@ AP4_Result CFragmentedSampleReader::ReadSample() return AP4_FAILURE; AP4_Result result; + AP4_DataBuffer sampleData; if (!m_codecHandler->ReadNextSample(m_sample, m_sampleData)) { - bool useDecryptingDecoder = - m_protectedDesc && - (m_decrypterCaps.flags & DRM::DecrypterCapabilites::SSD_SECURE_PATH) != 0; - bool decrypterPresent{m_decrypter != nullptr}; - if (AP4_FAILED(result = ReadNextSample(m_track->GetId(), m_sample, - (m_decrypter || useDecryptingDecoder) ? m_encrypted - : m_sampleData))) + if (AP4_FAILED(result = ReadNextSample(m_track->GetId(), m_sample, sampleData))) { if (result == AP4_ERROR_EOS) { @@ -169,16 +163,15 @@ AP4_Result CFragmentedSampleReader::ReadSample() //AP4_AvcFrameParser::ParseFrameForSPS(m_sampleData.GetData(), m_sampleData.GetDataSize(), 4, sps); //Protection could have changed in ProcessMoof - if (!decrypterPresent && m_decrypter != nullptr && !useDecryptingDecoder) - m_encrypted.SetData(m_sampleData.GetData(), m_sampleData.GetDataSize()); - else if (decrypterPresent && m_decrypter == nullptr && !useDecryptingDecoder) - m_sampleData.SetData(m_encrypted.GetData(), m_encrypted.GetDataSize()); + bool useDecryptingDecoder = + m_singleSampleDecryptor && + (m_decrypterCaps.flags & DRM::DecrypterCapabilites::SSD_SECURE_PATH) != 0; if (m_decrypter) { - m_sampleData.Reserve(m_encrypted.GetDataSize()); + m_sampleData.Reserve(sampleData.GetDataSize()); if (AP4_FAILED(result = - m_decrypter->DecryptSampleData(m_poolId, m_encrypted, m_sampleData, NULL))) + m_decrypter->DecryptSampleData(m_poolId, sampleData, m_sampleData, NULL))) { LOG::Log(LOGERROR, "Decrypt Sample returns failure!"); if (++m_failCount > 50) @@ -198,10 +191,17 @@ AP4_Result CFragmentedSampleReader::ReadSample() } else if (useDecryptingDecoder) { - m_sampleData.Reserve(m_encrypted.GetDataSize()); - m_singleSampleDecryptor->DecryptSampleData(m_poolId, m_encrypted, m_sampleData, nullptr, 0, + // Should fall here for the specific case of unencrypted content, + // to help convert packets to annex-b + // it depends on decrypter implementation + m_sampleData.Reserve(sampleData.GetDataSize()); + m_singleSampleDecryptor->DecryptSampleData(m_poolId, sampleData, m_sampleData, nullptr, 0, nullptr, nullptr); } + else + { + m_sampleData.SetData(sampleData.GetData(), sampleData.GetDataSize()); + } if (m_codecHandler->Transform(m_sample.GetDts(), m_sample.GetDuration(), m_sampleData, m_track->GetMediaTimeScale())) @@ -233,8 +233,7 @@ uint64_t CFragmentedSampleReader::GetDuration() const bool CFragmentedSampleReader::IsEncrypted() const { - return (m_decrypterCaps.flags & DRM::DecrypterCapabilites::SSD_SECURE_PATH) != 0 && - m_decrypter != nullptr; + return (m_decrypterCaps.flags & DRM::DecrypterCapabilites::SSD_SECURE_PATH) != 0 && m_decrypter; } bool CFragmentedSampleReader::GetInformation(kodi::addon::InputstreamInfo& info) @@ -379,9 +378,6 @@ AP4_Result CFragmentedSampleReader::ProcessMoof(AP4_ContainerAtom* moof, AP4_CencSampleInfoTable* sample_table{nullptr}; AP4_UI32 algorithm_id = 0; - delete m_decrypter; - m_decrypter = 0; - AP4_ContainerAtom* traf = AP4_DYNAMIC_CAST(AP4_ContainerAtom, moof->GetChild(AP4_ATOM_TYPE_TRAF, 0)); @@ -406,7 +402,7 @@ AP4_Result CFragmentedSampleReader::ProcessMoof(AP4_ContainerAtom* moof, if (!m_singleSampleDecryptor) return AP4_ERROR_INVALID_PARAMETERS; - m_decrypter = new CAdaptiveCencSampleDecrypter(m_singleSampleDecryptor, sample_table); + m_decrypter = std::make_unique(m_singleSampleDecryptor, sample_table); // Inform decrypter of pattern decryption (CBCS) AP4_UI32 schemeType = m_protectedDesc->GetSchemeType(); @@ -432,6 +428,7 @@ AP4_Result CFragmentedSampleReader::ProcessMoof(AP4_ContainerAtom* moof, else { // Reset for unencrypted content + m_decrypter.reset(); m_readerCryptoInfo = CryptoInfo(); } } diff --git a/src/samplereader/FragmentedSampleReader.h b/src/samplereader/FragmentedSampleReader.h index ae2b3f985..a1bd5f06f 100644 --- a/src/samplereader/FragmentedSampleReader.h +++ b/src/samplereader/FragmentedSampleReader.h @@ -75,12 +75,11 @@ class ATTR_DLL_LOCAL CFragmentedSampleReader : public ISampleReader, public AP4_ uint64_t m_timeBaseExt{0}; uint64_t m_timeBaseInt{0}; AP4_Sample m_sample; - AP4_DataBuffer m_encrypted; AP4_DataBuffer m_sampleData; CodecHandler* m_codecHandler{nullptr}; std::vector m_defaultKey; AP4_ProtectedSampleDescription* m_protectedDesc{nullptr}; Adaptive_CencSingleSampleDecrypter* m_singleSampleDecryptor{nullptr}; - CAdaptiveCencSampleDecrypter* m_decrypter{nullptr}; + std::unique_ptr m_decrypter; CryptoInfo m_readerCryptoInfo{}; }; From 60bf03bc88bf90242eb352496f9c4c64c7c1b05f Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 10 Nov 2025 13:12:13 +0100 Subject: [PATCH 85/91] [WVCencSingleSampleDecrypter] Log missing clear/cipher bytes info --- src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp index 4fd607b71..b4ffbe2e1 100644 --- a/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp +++ b/src/decrypters/widevine/WVCencSingleSampleDecrypter.cpp @@ -1067,6 +1067,7 @@ VIDEOCODEC_RETVAL CWVCencSingleSampleDecrypter::DecryptAndDecodeVideo( if (sample->cryptoInfo && sample->cryptoInfo->numSubSamples > 0 && (!sample->cryptoInfo->clearBytes || !sample->cryptoInfo->cipherBytes)) { + LOG::LogF(LOGERROR, "Missing crypting clear/cipher bytes info"); return VC_ERROR; } From d94aa58f098122fb3d034ee75dba996b7a4c3d38 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 11 Nov 2025 11:49:18 +0100 Subject: [PATCH 86/91] [CdmTypeConversion] Fix and cleanup access to cryptoInfo --- src/decrypters/widevine/CdmTypeConversion.cpp | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/decrypters/widevine/CdmTypeConversion.cpp b/src/decrypters/widevine/CdmTypeConversion.cpp index 0d6695b83..460d4413b 100644 --- a/src/decrypters/widevine/CdmTypeConversion.cpp +++ b/src/decrypters/widevine/CdmTypeConversion.cpp @@ -204,37 +204,43 @@ void media::ToCdmInputBuffer(const DEMUX_PACKET* encryptedBuffer, inputBuffer->data_size = encryptedBuffer->iSize; inputBuffer->timestamp = encryptedBuffer->pts; - inputBuffer->key_id = encryptedBuffer->cryptoInfo->kid; - inputBuffer->key_id_size = 16; - inputBuffer->iv = encryptedBuffer->cryptoInfo->iv; - inputBuffer->iv_size = 16; - - const uint16_t numSubsamples = - encryptedBuffer->cryptoInfo ? encryptedBuffer->cryptoInfo->numSubSamples : 0; - if (numSubsamples > 0) + if (encryptedBuffer->cryptoInfo) { - subsamples->reserve(numSubsamples); - for (uint16_t i = 0; i < numSubsamples; i++) + DEMUX_CRYPTO_INFO* cryptoInfo = encryptedBuffer->cryptoInfo; + + inputBuffer->key_id = cryptoInfo->kid; + inputBuffer->key_id_size = 16; + inputBuffer->iv = cryptoInfo->iv; + inputBuffer->iv_size = 16; + + const uint16_t numSubsamples = cryptoInfo->numSubSamples; + if (numSubsamples > 0) { - subsamples->push_back({encryptedBuffer->cryptoInfo->clearBytes[i], - encryptedBuffer->cryptoInfo->cipherBytes[i]}); + subsamples->reserve(numSubsamples); + for (uint16_t i = 0; i < numSubsamples; i++) + { + subsamples->push_back({cryptoInfo->clearBytes[i], cryptoInfo->cipherBytes[i]}); + } + + inputBuffer->num_subsamples = numSubsamples; + inputBuffer->subsamples = subsamples->data(); + } + else + { + inputBuffer->num_subsamples = 0; + inputBuffer->subsamples = nullptr; } - } - - inputBuffer->subsamples = subsamples->data(); - inputBuffer->num_subsamples = numSubsamples; - if (encryptedBuffer->cryptoInfo) - { inputBuffer->encryption_scheme = - ToCdmEncryptionScheme(static_cast(encryptedBuffer->cryptoInfo->mode)); // ?? + ToCdmEncryptionScheme(static_cast(cryptoInfo->mode)); + + if (inputBuffer->encryption_scheme != cdm::EncryptionScheme::kUnencrypted) + { + inputBuffer->pattern = {cryptoInfo->cryptBlocks, cryptoInfo->skipBlocks}; + } } else - inputBuffer->encryption_scheme = cdm::EncryptionScheme::kUnencrypted; - - if (inputBuffer->encryption_scheme != cdm::EncryptionScheme::kUnencrypted) { - inputBuffer->pattern = {encryptedBuffer->cryptoInfo->cryptBlocks, - encryptedBuffer->cryptoInfo->skipBlocks}; + inputBuffer->encryption_scheme = cdm::EncryptionScheme::kUnencrypted; } } From 96204e352d8eb713e8b40bff0de83c6905dfba3e Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 10 Nov 2025 14:01:33 +0100 Subject: [PATCH 87/91] [FragmentedSampleReader] Removed rendundant m_protectedDesc check --- src/samplereader/FragmentedSampleReader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index e80a99ab2..5a09b90dd 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -381,7 +381,7 @@ AP4_Result CFragmentedSampleReader::ProcessMoof(AP4_ContainerAtom* moof, AP4_ContainerAtom* traf = AP4_DYNAMIC_CAST(AP4_ContainerAtom, moof->GetChild(AP4_ATOM_TYPE_TRAF, 0)); - if (!m_protectedDesc || !traf) + if (!traf) return AP4_ERROR_INVALID_FORMAT; // If the boxes saiz, saio, senc are missing, the stream does not conform to the specs and From 721883f04c9710950ec69eeee28e867a3f0765e1 Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Tue, 11 Nov 2025 11:52:26 +0100 Subject: [PATCH 88/91] [FragmentedSampleReader] Handle possible SSD DecryptSampleData failure --- src/samplereader/FragmentedSampleReader.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index 5a09b90dd..e3c6023f6 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -195,8 +195,12 @@ AP4_Result CFragmentedSampleReader::ReadSample() // to help convert packets to annex-b // it depends on decrypter implementation m_sampleData.Reserve(sampleData.GetDataSize()); - m_singleSampleDecryptor->DecryptSampleData(m_poolId, sampleData, m_sampleData, nullptr, 0, - nullptr, nullptr); + if (AP4_FAILED(result = m_singleSampleDecryptor->DecryptSampleData( + m_poolId, sampleData, m_sampleData, nullptr, 0, nullptr, nullptr))) + { + Reset(true); + return result; + } } else { From 1d79a6f59439b0d4dfa94e7e81425df3d5b7df4d Mon Sep 17 00:00:00 2001 From: CastagnaIT Date: Mon, 10 Nov 2025 17:56:35 +0100 Subject: [PATCH 89/91] [FragmentedSampleReader] Add useDecryptingDecoder todo comment --- src/samplereader/FragmentedSampleReader.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index e3c6023f6..b0c03c5b5 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -194,6 +194,8 @@ AP4_Result CFragmentedSampleReader::ReadSample() // Should fall here for the specific case of unencrypted content, // to help convert packets to annex-b // it depends on decrypter implementation + //! @todo: it appears to have been implemented in the past for Widevine + //! and may not be suitable for other decryptors m_sampleData.Reserve(sampleData.GetDataSize()); if (AP4_FAILED(result = m_singleSampleDecryptor->DecryptSampleData( m_poolId, sampleData, m_sampleData, nullptr, 0, nullptr, nullptr))) From 134329f8aec1a1de37f70f232e941e43aaed53c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Nov 2025 16:04:08 +0000 Subject: [PATCH 90/91] changelog and version v21.5.17 (2025-11-13) --- inputstream.adaptive/addon.xml.in | 2 +- inputstream.adaptive/changelog.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inputstream.adaptive/addon.xml.in b/inputstream.adaptive/addon.xml.in index 525ff41e4..73c7d96e1 100644 --- a/inputstream.adaptive/addon.xml.in +++ b/inputstream.adaptive/addon.xml.in @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ diff --git a/inputstream.adaptive/changelog.txt b/inputstream.adaptive/changelog.txt index daa0565e6..152b1ac78 100644 --- a/inputstream.adaptive/changelog.txt +++ b/inputstream.adaptive/changelog.txt @@ -1,3 +1,6 @@ +v21.5.17 (2025-11-13) +- Fix no picture on MP4 videos with mixed encrypted/unencrypted contents + v21.5.16 (2025-09-29) - Fix no picture on MP4 videos with mixed encrypted/unencrypted contents From ed23ebcc8b21df1eaadd3ded4dcf658df4eebbca Mon Sep 17 00:00:00 2001 From: Scott Harrison Date: Tue, 19 May 2026 23:46:01 +0100 Subject: [PATCH 91/91] Fix H.264 HW decode for AVC3 in-band streams (V4L2/m2m) On platforms using V4L2 mem2mem H.264 decoding (e.g. Raspberry Pi with OSMC's custom FFmpeg), the decoder's h264_xd_copy() function rejects avcC extradata with 0 SPS/0 PPS entries, causing a fallback to software decode. This format is used by AVC3 in-band streams (e.g. BBC iPlayer DASH) where SPS/PPS are carried in-band rather than in the codec private data. Fix by: - Detecting avcC with 0 SPS in Session::UpdateStream() and FragmentedSampleReader::UpdateSampleDescription(), and clearing extradata so the V4L2 decoder skips h264_xd_copy() - Adding AVCCodecHandler::Transform() to convert NALU length-prefixed packets (avcC framing) to Annex B start-code framing at decode time - Setting the AnnexB transform flag for all H.264 AVC1-4 formats (with and without SPS), ensuring consistent packet-level conversion --- src/Session.cpp | 40 +++++++++---- src/codechandler/AVCCodecHandler.cpp | 65 +++++++++++++++++++++ src/codechandler/AVCCodecHandler.h | 3 + src/samplereader/FragmentedSampleReader.cpp | 25 ++++++++ 4 files changed, 123 insertions(+), 10 deletions(-) diff --git a/src/Session.cpp b/src/Session.cpp index f2b0f1e26..1d4b7c59f 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -780,25 +780,45 @@ void CSession::UpdateStream(CStream& stream) stream.m_isEncrypted = rep->GetPsshSetPos() != PSSHSET_POS_DEFAULT; stream.m_info.SetExtraData(nullptr, 0); - if (!rep->GetCodecPrivateData().empty()) { - std::vector annexb; - const std::vector* extraData(&annexb); - + const auto& cpd = rep->GetCodecPrivateData(); const DRM::DecrypterCapabilites& caps{GetDecrypterCaps(rep->m_psshSetPos)}; + bool isAvcC = !cpd.empty() && cpd[0] == 0x01; + bool hasNoSPS = isAvcC && cpd.size() >= 6 && (cpd[5] & 0x1f) == 0; - if ((caps.flags & DRM::DecrypterCapabilites::SSD_ANNEXB_REQUIRED) && - stream.m_info.GetStreamType() == INPUTSTREAM_TYPE_VIDEO) + if ((caps.flags & DRM::DecrypterCapabilites::SSD_ANNEXB_REQUIRED) && !hasNoSPS) + { + std::vector annexb = AvcToAnnexb(cpd); + if (!annexb.empty()) + stream.m_info.SetExtraData(annexb.data(), annexb.size()); + else + { + LOG::LogF(LOGWARNING, "UpdateStream: AvcToAnnexb failed, using raw CPD"); + stream.m_info.SetExtraData(cpd.data(), cpd.size()); + } + } + else if (isAvcC && hasNoSPS) + { + // avcC with 0 SPS (AVC3 in-band) - skip extradata as V4L2 h264_xd_copy + // rejects avcC with 0 SPS/0 PPS; decoder gets SPS/PPS from in-band NALUs + stream.m_info.SetExtraData(nullptr, 0); + } + else if (isAvcC) { - LOG::Log(LOGDEBUG, "UpdateStream: Convert avc -> annexb"); - annexb = AvcToAnnexb(rep->GetCodecPrivateData()); + std::vector annexb = AvcToAnnexb(cpd); + if (!annexb.empty()) + stream.m_info.SetExtraData(annexb.data(), annexb.size()); + else + { + LOG::LogF(LOGWARNING, "UpdateStream: AvcToAnnexb failed, using raw CPD"); + stream.m_info.SetExtraData(cpd.data(), cpd.size()); + } } else { - extraData = &rep->GetCodecPrivateData(); + stream.m_info.SetExtraData(cpd.data(), cpd.size()); } - stream.m_info.SetExtraData(extraData->data(), extraData->size()); } stream.m_info.SetCodecFourCC(0); diff --git a/src/codechandler/AVCCodecHandler.cpp b/src/codechandler/AVCCodecHandler.cpp index 7f7ef7398..d8ff6ab93 100644 --- a/src/codechandler/AVCCodecHandler.cpp +++ b/src/codechandler/AVCCodecHandler.cpp @@ -238,3 +238,68 @@ bool AVCCodecHandler::GetInformation(kodi::addon::InputstreamInfo& info) } return isChanged; }; + +bool AVCCodecHandler::Transform(AP4_UI64 pts, AP4_UI32 duration, AP4_DataBuffer& buf, AP4_UI64 timescale) +{ + if (!m_needAnnexBTransform || m_naluLengthSize == 0) + return false; + + const AP4_Byte* src = buf.GetData(); + AP4_Size srcSize = buf.GetDataSize(); + if (srcSize < m_naluLengthSize) + return false; + + // Calculate output size: each NALU loses naluLengthSize bytes and gains 4 bytes (start code) + // Worst case: many small NALUs -> output grows. Allocate conservatively. + AP4_Size outSize = srcSize + (srcSize / m_naluLengthSize) * (4 - m_naluLengthSize) + 64; + AP4_DataBuffer outBuf; + outBuf.SetDataSize(outSize); + AP4_Byte* dst = outBuf.UseData(); + AP4_Size dstUsed = 0; + + const AP4_Byte startCode[4] = {0x00, 0x00, 0x00, 0x01}; + + while (srcSize >= m_naluLengthSize) + { + AP4_UI32 naluSize = 0; + switch (m_naluLengthSize) + { + case 1: naluSize = src[0]; break; + case 2: naluSize = (src[0] << 8) | src[1]; break; + case 4: naluSize = (src[0] << 24) | (src[1] << 16) | (src[2] << 8) | src[3]; break; + default: return false; + } + + if (naluSize == 0 || naluSize > srcSize - m_naluLengthSize) + break; + + // Ensure enough space in output buffer + AP4_Size needed = dstUsed + 4 + naluSize; + if (needed > outBuf.GetDataSize()) + { + outBuf.SetDataSize(needed + 256); + dst = outBuf.UseData(); + } + + // Write Annex B start code + memcpy(dst + dstUsed, startCode, 4); + dstUsed += 4; + + // Copy NALU data + memcpy(dst + dstUsed, src + m_naluLengthSize, naluSize); + dstUsed += naluSize; + + // Advance source + src += m_naluLengthSize + naluSize; + srcSize -= m_naluLengthSize + naluSize; + } + + if (dstUsed > 0) + { + buf.SetDataSize(dstUsed); + memcpy(buf.UseData(), outBuf.GetData(), dstUsed); + return true; + } + + return false; +} diff --git a/src/codechandler/AVCCodecHandler.h b/src/codechandler/AVCCodecHandler.h index b39aba54a..524e55be8 100644 --- a/src/codechandler/AVCCodecHandler.h +++ b/src/codechandler/AVCCodecHandler.h @@ -18,9 +18,12 @@ class ATTR_DLL_LOCAL AVCCodecHandler : public CodecHandler void UpdatePPSId(const AP4_DataBuffer& buffer) override; bool GetInformation(kodi::addon::InputstreamInfo& info) override; STREAMCODEC_PROFILE GetProfile() override { return m_codecProfile; }; + bool Transform(AP4_UI64 pts, AP4_UI32 duration, AP4_DataBuffer& buf, AP4_UI64 timescale) override; + void SetAnnexBTransformNeeded(bool needed) { m_needAnnexBTransform = needed; } private: unsigned int m_countPictureSetIds; STREAMCODEC_PROFILE m_codecProfile; bool m_needSliceInfo; + bool m_needAnnexBTransform = false; }; diff --git a/src/samplereader/FragmentedSampleReader.cpp b/src/samplereader/FragmentedSampleReader.cpp index b0c03c5b5..ba110829e 100644 --- a/src/samplereader/FragmentedSampleReader.cpp +++ b/src/samplereader/FragmentedSampleReader.cpp @@ -521,7 +521,32 @@ void CFragmentedSampleReader::UpdateSampleDescription() } if ((m_decrypterCaps.flags & DRM::DecrypterCapabilites::SSD_ANNEXB_REQUIRED) != 0) + { m_codecHandler->ExtraDataToAnnexB(); + } + else if (desc->GetFormat() == AP4_SAMPLE_FORMAT_AVC1 || + desc->GetFormat() == AP4_SAMPLE_FORMAT_AVC2 || + desc->GetFormat() == AP4_SAMPLE_FORMAT_AVC3 || + desc->GetFormat() == AP4_SAMPLE_FORMAT_AVC4) + { + bool hasNoSPS = m_codecHandler->m_extraData.GetDataSize() >= 6 && + m_codecHandler->m_extraData.GetData()[0] == 0x01 && + (m_codecHandler->m_extraData.GetData()[5] & 0x1f) == 0; + if (hasNoSPS) + { + m_codecHandler->m_extraData.SetDataSize(0); + static_cast(m_codecHandler)->SetAnnexBTransformNeeded(true); + } + else + { + if (!m_codecHandler->ExtraDataToAnnexB() || m_codecHandler->m_extraData.GetDataSize() == 0) + { + LOG::LogF(LOGWARNING, "UpdateSampleDescription: ExtraDataToAnnexB failed, clearing extradata"); + m_codecHandler->m_extraData.SetDataSize(0); + } + static_cast(m_codecHandler)->SetAnnexBTransformNeeded(true); + } + } } void CFragmentedSampleReader::ParseTrafTfrf(AP4_UuidAtom* uuidAtom)