diff --git a/fluxer_app/src/features/i18n/locales/ar/messages.po b/fluxer_app/src/features/i18n/locales/ar/messages.po index a642d1b7d..67a5e63dc 100644 --- a/fluxer_app/src/features/i18n/locales/ar/messages.po +++ b/fluxer_app/src/features/i18n/locales/ar/messages.po @@ -2764,11 +2764,6 @@ msgstr "متقدم" msgid "Advanced video settings" msgstr "إعدادات الفيديو المتقدمة" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "الإعلان عن ترميز فك تشفير محدود لفرض ترحيل الناشر" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "قد يتوقف Aero Snap وSnap Layouts عن العمل عند تمكين الشفافية." @@ -2990,7 +2985,7 @@ msgstr "السماح لأي شخص يمكنه عرض ملفك الشخصي با #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "السماح بـ AV1 لمشاركة الشاشة" @@ -3044,7 +3039,7 @@ msgstr "السماح لكل المجتمعات" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "السماح بـ H.265 (HEVC) لمشاركة الشاشة" @@ -4385,7 +4380,6 @@ msgstr "اقتراح الإكمال التلقائي: {label}، {selectedOptionP #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "اقتراح الإكمال التلقائي: {label}، {selectedOptionP #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "تلقائي" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "تلقائي ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (يتطلب الاشتراك)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "المقاييس الحيوية" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "معدل البت" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "اختر لون تمييز ملفك الشخصي" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "سيسكو" @@ -7432,11 +7425,6 @@ msgstr "الرمز:" msgid "Codec" msgstr "ترميز" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "اختبار التفاوض على الترميز" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "رموز تعبيرية" msgid "Empty favorites" msgstr "المفضلة فارغة" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "محاكاة ترميز فك التشفير (اختبار)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "تم تمكين المحتوى للبالغين." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "مسار برنامج الترميز" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "تفضيل المشفر للشاشات التي تتم مشاركتها حديثًا." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "إعدادات مسبقة للمشفر، وSVC، وتدفق احتياطي، ومعدل البت." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "التجميع" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 بث متزامن احتياطي" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (يتطلب تفعيلًا اختياريًا)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "قد يتسبب تسريع الجهاز في حدوث أخطاء في العرض مع النوافذ الشفافة. جرّب --disable-gpu إذا رأيت وميضًا أو تشويشًا." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "مشفر الأجهزة" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "افتح إعداداتك" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "برنامج ترميز OpenH264 على نظام Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "صورة" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "صورة داخل صورة" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "الرسائل المثبتة المنبثقة" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "صورة داخل صورة" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "التفضيلات..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "برنامج الترميز المفضل لمشاركة الشاشة" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "معاينة الصوت" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "معاينة، وإظهار في نافذة منفصلة، وسلوك الصورة المصغرة للبث المباشر" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "برنامج ترميز مشاركة الشاشة" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "عناصر تحكم مشفر مشاركة الشاشة" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "انتهت مشاركة الشاشة" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "تستخدم مشاركة الشاشة ترميزًا برمجيًا ({codec}). قد تنخفض الجودة ويزداد استخدام وحدة المعالجة المركزية. قد لا تدعم وحدة معالجة الرسومات لديك الترميز المادي لهذا برنامج الترميز." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "معاينة مشاركة الشاشة" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "سلوك معاينة مشاركة الشاشة" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "اجتماعي" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "مُشفّر برامج" @@ -30559,7 +30540,7 @@ msgstr "تم إخفاء البث" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "معاينة البث" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "تعليق" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "يجب أن يستخدم redirect_uri المقدم بروتوكول HTTP أو HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "توقفت عملية مشاركة الشاشة عن إرسال الفيديو، لذلك تم إيقاف مشاركة شاشتك." @@ -38320,6 +38301,12 @@ msgstr "تمت إزالة عنوان URL المخصص الخاص بك." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "تم تعيين عنوان URL المخصص الخاص بك إلى {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "توقف مُرمّز الفيديو الخاص بك عن ترميز الإطارات، لذا تم إيقاف مشاركة شاشتك. حاول المشاركة مرة أخرى." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json index 0cc80dcff..1a5a1e1fe 100644 --- a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json +++ b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json @@ -2034,6 +2034,10 @@ { "msgid": "{remaining, plural, one {+# more} other {+# more}}" }, + { + "msgctxt": "screen-share", + "msgid": "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." + }, { "msgctxt": "security-settings-section", "msgid": "Sign-in details" diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index f57f418c1..45438071a 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -2764,11 +2764,6 @@ msgstr "Разширени" msgid "Advanced video settings" msgstr "Разширени настройки за видео" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Рекламирай кодек с ограничено декодиране, за да принудиш миграция на издателя" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Функциите Aero Snap и Snap Layouts може да спрат да работят, докато прозрачността е активирана." @@ -2990,7 +2985,7 @@ msgstr "Позволява на всеки, който може да прегл #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Разреши AV1 за споделяне на екрана" @@ -3044,7 +3039,7 @@ msgstr "Разрешаване за всички общности" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Разреши H.265 (HEVC) за споделяне на екран" @@ -4385,7 +4380,6 @@ msgstr "Предложено автоматично довършване: {label #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Предложено автоматично довършване: {label #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Автоматично" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Автоматично ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (изисква активиране)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Биометрични данни" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Битрейт" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Изберете акцентен цвят на профила си" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Код:" msgid "Codec" msgstr "Кодек" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Тестване на договаряне на кодек" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Емотикони" msgid "Empty favorites" msgstr "Няма любими" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Емулиране на кодек за декодиране (тест)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Разрешено е съдържание за възрастни." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Път на енкодера" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Предпочитан кодек за нови споделяния на екрана." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Настройки за кодек, SVC, резервен поток и битрейт." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Групиране" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 симулкаст резервно копие" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (изисква активиране)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Хардуерното ускорение може да причини проблеми с изобразяването при прозрачни прозорци. Опитайте --disable-gpu, ако виждате трептене или размазване." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Хардуерен енкодер" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Отвори настройките си" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Софтуерен кодек OpenH264 за Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Снимка" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Картина в картината" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Изскачащи закачени съобщения" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Картина в картината" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Предпочитания..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Предпочитан кодек за споделяне на екран" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Преглед на звука" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Предварителен преглед, изскачащо прозорче и поведение на миниатюрата при стрийминг." @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Кодек за споделяне на екран" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Контроли за кодиране на споделяне на екрана" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Споделянето на екрана приключи" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Споделянето на екрана използва софтуерно кодиране ({codec}). Качеството може да е намалено, а използването на процесора – увеличено. Вашият графичен процесор може да не поддържа хардуерно кодиране за този кодек." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Визуализация на споделен екран" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Поведение при преглед на споделянето на екрана" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Социални" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Софтуерен кодек" @@ -30559,7 +30540,7 @@ msgstr "Потокът е скрит" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Преглед на стрийм" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Спиране" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Предоставеният redirect_uri трябва да използва HTTP или HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Източникът на споделяне на екрана спря да изпраща видео, поради което споделянето на екрана беше прекратено." @@ -38320,6 +38301,12 @@ msgstr "Вашият персонализиран URL адрес е премах msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Вашият персонализиран URL адрес е зададен на {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Вашият видео енкодер спря да кодира кадри, затова споделянето на екрана беше прекратено. Опитайте отново да споделите." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index a29ea103a..0eb74abe5 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -2764,11 +2764,6 @@ msgstr "Pokročilé" msgid "Advanced video settings" msgstr "Pokročilé nastavení videa" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Nabídnout omezený dekódovací kodek pro vynucení migrace vydavatele" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Funkce Aero Snap a Snap Layouts nemusí fungovat, pokud je zapnutá průhlednost." @@ -2990,7 +2985,7 @@ msgstr "Povolit všem, kdo si mohou zobrazit váš celý profil, aby viděli vá #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Povolit AV1 pro sdílení obrazovky" @@ -3044,7 +3039,7 @@ msgstr "Povolit pro všechny komunity" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Povolit H.265 (HEVC) pro sdílení obrazovky" @@ -4385,7 +4380,6 @@ msgstr "Návrh automatického dokončování: {label}, {selectedOptionPosition} #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Návrh automatického dokončování: {label}, {selectedOptionPosition} #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automaticky" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automaticky ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (vyžaduje přihlášení)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometrika" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Přenosová rychlost" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Vyberte barvu profilu" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kód:" msgid "Codec" msgstr "Kodek" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Testování vyjednávání kodeku" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emotikony" msgid "Empty favorites" msgstr "Oblíbené položky jsou prázdné" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emulovat dekódovací kodek (testování)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Povolil obsah pro dospělé." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Cesta kodéru" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferovaný kodek pro nové sdílení obrazovky." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Přednastavení kodeku, SVC, záložního streamu a datového toku." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Seskupování" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Záloha H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (vyžaduje zapnutí)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Hardwarová akcelerace může způsobovat chyby vykreslování s průhlednými okny. Pokud vidíte blikání nebo rozmazání, zkuste --disable-gpu." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardwarový enkodér" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Otevřít nastavení" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Softwarový kodek OpenH264 pro Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Obrázek" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Obraz v obraze" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Připnuté zprávy (vyskakovací okno)" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Obraz v obraze" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Předvolby..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Preferovaný kodek pro sdílení obrazovky" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Přehrát zvuk" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Náhled, vyskakovací okno a chování miniatur pro streamování" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Kodek sdílení obrazovky" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Ovládací prvky kodeku pro sdílení obrazovky" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Sdílení obrazovky ukončeno" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Sdílení obrazovky používá softwarové kódování ({codec}). Kvalita může být snížena a využití CPU zvýšeno. Vaše GPU nemusí podporovat hardwarové kódování pro tento kodek." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Náhled sdílení obrazovky" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Chování náhledu sdílení obrazovky" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Sociální sítě" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Softwarový enkodér" @@ -30559,7 +30540,7 @@ msgstr "Stream skryt" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Náhled streamu" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Pozastavit" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Zadané redirect_uri musí používat HTTP nebo HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Zdroj sdílení obrazovky přestal odesílat video, takže bylo ukončeno sdílení obrazovky." @@ -38320,6 +38301,12 @@ msgstr "Vaše vlastní URL adresa byla odebrána." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Vaše vlastní adresa URL byla nastavena na {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Váš video kodér přestal kódovat snímky, takže sdílení obrazovky bylo ukončeno. Zkuste sdílet znovu." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index 533fbb3f1..b2cc32875 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avanceret" msgid "Advanced video settings" msgstr "Avancerede videoindstillinger" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Annoncer en begrænset afkodningscodec for at tvinge udgivermigration" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap og Snap Layouts holder muligvis op med at virke, når gennemsigtighed er aktiveret." @@ -2990,7 +2985,7 @@ msgstr "Tillad alle, der kan se din fulde profil, at se din lokale tid på profi #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Tillad AV1 til skærmdeling" @@ -3044,7 +3039,7 @@ msgstr "Tillad for alle fællesskaber" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Tillad H.265 (HEVC) til skærmdeling" @@ -4385,7 +4380,6 @@ msgstr "Forslag til autoudfyldelse: {label}, {selectedOptionPosition} af {result #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Forslag til autoudfyldelse: {label}, {selectedOptionPosition} af {result #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatisk" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatisk ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (kræver tilvalg)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometri" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrate" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Vælg din profilfarve" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kode:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Test af codec-forhandling" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emojis" msgid "Empty favorites" msgstr "Tomme favoritter" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emuler afkodningscodec (test)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Modent indhold aktiveret." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Encodersti" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Encoderpræference for nye skærmdelinger." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encoder-, SVC-, backupstrøm- og bitrateforudindstillinger" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Gruppering" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264-simulcastbackup" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (kræver tilvalg)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Hardwareacceleration kan forårsage gengivelsesfejl med gennemsigtige vinduer. Prøv --disable-gpu, hvis du oplever flimmer eller udtværing." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardware-encoder" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Åbn dine indstillinger" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264-softwarekodek på Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Billede" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Billede i billede" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Fastgjorte beskeder (popout)" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Billede i billede" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Indstillinger..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Foretrækket codec til skærmdeling" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Afspil lyd" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Forhåndsvisning, popout og opførsel for stream-miniaturer" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec til skærmdeling" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Skærmdelingsindstillinger" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Skærmdeling afsluttet" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Skærmdeling bruger softwarekodning ({codec}). Kvaliteten kan være reduceret, og CPU-forbruget kan være øget. Din GPU understøtter muligvis ikke hardwarekodning til denne codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Forhåndsvisning af skærmdeling" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Adfærd for skærmdeling (forhåndsvisning)" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Socialt" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Software-encoder" @@ -30559,7 +30540,7 @@ msgstr "Stream skjult" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Streamforhåndsvisning" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Sæt på pause" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Den angivne redirect_uri skal bruge HTTP eller HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Skærmdelingskilden er stoppet med at sende video, så din skærmdeling blev stoppet." @@ -38320,6 +38301,12 @@ msgstr "Din tilpassede URL er blevet fjernet." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Din tilpassede URL er nu indstillet til {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Din video-encoder stoppede med at kode billeder, så din skærmdeling blev stoppet. Prøv at dele igen." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index 461d3c775..b85be5b2a 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -2764,11 +2764,6 @@ msgstr "Erweitert" msgid "Advanced video settings" msgstr "Erweiterte Videoeinstellungen" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Einen begrenzten Decode-Codec bewerben, um die Publisher-Migration zu erzwingen" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap und Snap Layouts funktionieren möglicherweise nicht, wenn die Transparenz aktiviert ist." @@ -2990,7 +2985,7 @@ msgstr "Allen, die dein vollständiges Profil sehen können, erlauben, deine lok #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "AV1 für Bildschirmfreigabe zulassen" @@ -3044,7 +3039,7 @@ msgstr "Für alle Communitys zulassen" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "H.265 (HEVC) für Bildschirmfreigabe zulassen" @@ -4385,7 +4380,6 @@ msgstr "Vervollständigungsvorschlag: {label}, {selectedOptionPosition} von {res #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Vervollständigungsvorschlag: {label}, {selectedOptionPosition} von {res #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatisch" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatisch ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (erfordert Opt-in)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometrie" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrate" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Akzentfarbe deines Profils wählen" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Code:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Codec-Aushandlung testen" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Esc" msgid "Empty favorites" msgstr "Favoriten leer" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Dekodiere Codec emulieren (Test)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Inhalte für Erwachsene aktiviert." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Encoder-Pfad" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Encoder-Einstellung für neue Bildschirmfreigaben." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encoder-, SVC-, Backup-Stream- und Bitraten-Voreinstellungen." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Gruppierung" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264-Simulcast-Backup" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (erfordert Opt-in)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Hardwarebeschleunigung kann bei transparenten Fenstern zu Darstellungsfehlern führen. Bitte versuche es mit --disable-gpu, wenn du Flackern oder Schlieren siehst." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardware-Encoder" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Einstellungen öffnen" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264-Softwarecodec für Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Bild" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Bild-in-Bild" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Pins als Pop-out" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Bild-in-Bild" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Einstellungen..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Bevorzugter Codec für Bildschirmfreigabe" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Ton vorhören" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Vorschau-, Popout- und Stream-Thumbnail-Verhalten" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec für Bildschirmfreigabe" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Bildschirmfreigabe-Encoder-Einstellungen" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Bildschirmfreigabe beendet" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Die Bildschirmfreigabe verwendet Software-Kodierung ({codec}). Die Qualität kann reduziert und die CPU-Auslastung erhöht sein. Deine GPU unterstützt möglicherweise keine Hardware-Kodierung für diesen Codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Bildschirmfreigabe-Vorschau" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Verhalten der Bildschirmfreigabe-Vorschau" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Soziales" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Software-Encoder" @@ -30559,7 +30540,7 @@ msgstr "Stream ausgeblendet" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Stream-Vorschau" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Pausieren" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Die angegebene redirect_uri muss HTTP oder HTTPS verwenden." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Die Bildschirmfreigabe hat das Senden von Video gestoppt, daher wurde Ihre Bildschirmfreigabe beendet." @@ -38320,6 +38301,12 @@ msgstr "Deine Vanity-URL wurde entfernt." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Deine Vanity-URL wurde auf {inviteEndpoint}/{vanitySlug} festgelegt" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Dein Video-Encoder hat aufgehört, Frames zu kodieren, daher wurde deine Bildschirmfreigabe beendet. Versuche es erneut." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index 811c70c04..9c649a4e8 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -2764,11 +2764,6 @@ msgstr "Για προχωρημένους" msgid "Advanced video settings" msgstr "Προηγμένες ρυθμίσεις βίντεο" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Διαφήμιση κωδικοποιητή αποκωδικοποίησης με όριο για αναγκαστική μετεγκατάσταση εκδότη" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Το Aero Snap και τα Snap Layouts ενδέχεται να σταματήσουν να λειτουργούν όταν είναι ενεργοποιημένη η διαφάνεια." @@ -2990,7 +2985,7 @@ msgstr "Να επιτρέπεται σε οποιονδήποτε μπορεί #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Να επιτρέπεται η AV1 για κοινή χρήση οθόνης" @@ -3044,7 +3039,7 @@ msgstr "Να επιτρέπεται σε όλες τις κοινότητες" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Να επιτρέπεται η χρήση H.265 (HEVC) για κοινή χρήση οθόνης" @@ -4385,7 +4380,6 @@ msgstr "Προτεινόμενη αυτόματη συμπλήρωση: {label}, #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Προτεινόμενη αυτόματη συμπλήρωση: {label}, #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Αυτόματη" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Αυτόματο ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (απαιτείται ενεργοποίηση)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Βιομετρικά στοιχεία" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Ρυθμός μετάδοσης δεδομένων" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Επίλεξε το χρώμα τόνου του προφίλ σου" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Κωδικός:" msgid "Codec" msgstr "Κωδικοποιητής" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Δοκιμή διαπραγμάτευσης κωδικοποιητή" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoji" msgid "Empty favorites" msgstr "Κενά αγαπημένα" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Εξομοίωση κωδικοποιητή αποκωδικοποίησης (δοκιμή)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Ενεργοποιήθηκε το περιεχόμενο για ενήλ #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Διαδρομή κωδικοποιητή" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Προτιμώμενος κωδικοποιητής για νέες κοινοποιήσεις οθόνης." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Ρυθμίσεις κωδικοποιητή, SVC, εφεδρικής ροής και ρυθμίσεων εύρους ζώνης" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Ομαδοποίηση" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Εφεδρικό H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (απαιτεί ενεργοποίηση)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Η επιτάχυνση υλικού μπορεί να προκαλέσει σφάλματα απόδοσης με διαφανή παράθυρα. Δοκιμάστε το --disable-gpu αν παρατηρήσετε τρεμόπαιγμα ή μουτζούρες." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Κωδικοποιητής υλικού" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Άνοιγμα ρυθμίσεων" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Ενεργοποίηση του λογισμικού κωδικοποιητή OpenH264 στο Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Εικόνα" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Εικόνα σε εικόνα" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Αναδυόμενο παράθυρο καρφιτσωμένων" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Εικόνα εντός εικόνας" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Προτιμήσεις..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Προτιμώμενος κωδικοποιητής κοινής χρήσης οθόνης" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Προεπισκόπηση ήχου" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Προεπισκόπηση, εμφάνιση σε ξεχωριστό παράθυρο και συμπεριφορά της μικρογραφίας ροής" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Κωδικοποιητής κοινής χρήσης οθόνης" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Έλεγχος κωδικοποιητή κοινής χρήσης οθόνης" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Η κοινή χρήση οθόνης έληξε" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Η κοινή χρήση οθόνης χρησιμοποιεί κωδικοποίηση λογισμικού ({codec}). Η ποιότητα ενδέχεται να είναι μειωμένη και η χρήση της CPU αυξημένη. Η GPU σας ενδέχεται να μην υποστηρίζει κωδικοποίηση υλικού για αυτόν τον κωδικοποιητή." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Προεπισκόπηση κοινής χρήσης οθόνης" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Συμπεριφορά προεπισκόπησης κοινής χρήσης οθόνης" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Κοινωνικά" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Ενσωματωμένος κωδικοποιητής" @@ -30559,7 +30540,7 @@ msgstr "Η ροή είναι κρυφή" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Προεπισκόπηση ροής" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Αναστολή" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Το redirect_uri που δόθηκε πρέπει να χρησιμοποιεί HTTP ή HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Η πηγή κοινής χρήσης οθόνης σταμάτησε να στέλνει βίντεο, επομένως η κοινή χρήση της οθόνης σας διακόπηκε." @@ -38320,6 +38301,12 @@ msgstr "Η προσαρμοσμένη διεύθυνση URL καταργήθη msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Η προσαρμοσμένη διεύθυνση URL έχει οριστεί σε {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Ο κωδικοποιητής βίντεο σταμάτησε να κωδικοποιεί καρέ, οπότε η κοινή χρήση οθόνης διακόπηκε. Δοκιμάστε να την μοιραστείτε ξανά." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/en-GB/messages.po b/fluxer_app/src/features/i18n/locales/en-GB/messages.po index af65c32b1..1d0156e38 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -2764,11 +2764,6 @@ msgstr "Advanced" msgid "Advanced video settings" msgstr "Advanced video settings" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Advertise a capped decode codec to force publisher migration" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap and Snap Layouts may stop working while transparency is enabled." @@ -2990,7 +2985,7 @@ msgstr "Allow anyone who can view your full profile to see your profile's local #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Allow AV1 for screen sharing" @@ -3044,7 +3039,7 @@ msgstr "Allow for all communities" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Allow H.265 (HEVC) for screen sharing" @@ -4385,7 +4380,6 @@ msgstr "Autocomplete suggestion: {label}, {selectedOptionPosition} of {resultCou #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Autocomplete suggestion: {label}, {selectedOptionPosition} of {resultCou #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatic" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatic ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (requires opt-in)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometrics" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrate" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Choose your profile accent colour" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Code:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Codec negotiation testing" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoticons" msgid "Empty favorites" msgstr "Empty favourites" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emulate decode codec (testing)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Enabled mature content." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Encoder path" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Encoder preference for new screen shares." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encoder, SVC, backup stream, and bitrate presets" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Grouping" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast backup" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (requires opt-in)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Hardware acceleration can cause rendering glitches with transparent windows. Try --disable-gpu if you see flicker or smearing." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardware encoder" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Open your settings" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264 software codec on Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Picture" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Picture-in-picture" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Pins pop out" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferences..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Preferred screen share codec" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Preview sound" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Preview, popout, and stream thumbnail behaviour" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Screen share codec" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Screen share encoder controls" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Screen share ended" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Screen share is using software encoding ({codec}). Quality may be reduced and CPU usage increased. Your GPU may not support hardware encoding for this codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Screen share preview" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Screen share preview behaviour" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Social" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Software encoder" @@ -30559,7 +30540,7 @@ msgstr "Stream hidden" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Stream preview" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Suspend" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "The redirect_uri provided must use HTTP or HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "The screen share source stopped sending video, so your screen share was stopped." @@ -38320,6 +38301,13 @@ msgstr "Your vanity URL has been removed." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" +# auto-i18n: reviewed unchanged +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/en-US/messages.po b/fluxer_app/src/features/i18n/locales/en-US/messages.po index a98b0621a..6660a7f1e 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -2765,11 +2765,6 @@ msgstr "Advanced" msgid "Advanced video settings" msgstr "Advanced video settings" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Advertise a capped decode codec to force publisher migration" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap and Snap Layouts can stop working while transparency is enabled." @@ -2991,7 +2986,7 @@ msgstr "Allow anyone who can view your full profile to see your profile local ti #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Allow AV1 for screen sharing" @@ -3045,7 +3040,7 @@ msgstr "Allow for all communities" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Allow H.265 (HEVC) for screen sharing" @@ -4386,7 +4381,6 @@ msgstr "Autocomplete suggestion: {label}, {selectedOptionPosition} of {resultCou #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4394,7 +4388,6 @@ msgstr "Autocomplete suggestion: {label}, {selectedOptionPosition} of {resultCou #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4408,7 +4401,7 @@ msgid "Automatic" msgstr "Automatic" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatic ({codec})" @@ -4508,7 +4501,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (requires opt-in)" @@ -4957,7 +4950,7 @@ msgid "Biometrics" msgstr "Biometrics" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrate" @@ -6821,7 +6814,7 @@ msgid "Choose your profile accent color" msgstr "Choose your profile accent color" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7433,11 +7426,6 @@ msgstr "Code:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Codec negotiation testing" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12586,13 +12574,6 @@ msgstr "Emoticons" msgid "Empty favorites" msgstr "Empty favorites" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emulate decode codec (testing)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12894,7 +12875,7 @@ msgstr "Enabled mature content." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Encoder path" @@ -12904,7 +12885,7 @@ msgid "Encoder preference for new screen shares." msgstr "Encoder preference for new screen shares." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encoder, SVC, backup stream, and bitrate presets" @@ -15692,7 +15673,7 @@ msgid "Grouping" msgstr "Grouping" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15707,7 +15688,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast backup" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (requires opt-in)" @@ -15763,7 +15744,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Hardware acceleration can cause rendering glitches with transparent windows. Try --disable-gpu if you see flicker or smearing." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardware encoder" @@ -22666,7 +22647,7 @@ msgid "Open your settings" msgstr "Open your settings" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264 software codec on Linux" @@ -23467,7 +23448,7 @@ msgid "Picture" msgstr "Picture" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Picture in picture" @@ -23587,7 +23568,7 @@ msgid "Pins popout" msgstr "Pins popout" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23821,7 +23802,7 @@ msgid "Preferences..." msgstr "Preferences..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Preferred screen share codec" @@ -23995,7 +23976,7 @@ msgid "Preview sound" msgstr "Preview sound" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Preview, popout, and stream thumbnail behavior" @@ -27011,12 +26992,12 @@ msgid "Screen share codec" msgstr "Screen share codec" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Screen share encoder controls" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Screen share ended" @@ -27032,12 +27013,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Screen share is using software encoding ({codec}). Quality may be reduced and CPU usage increased. Your GPU may not support hardware encoding for this codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Screen share preview" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Screen share preview behavior" @@ -29587,7 +29568,7 @@ msgid "Social" msgstr "Social" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Software encoder" @@ -30560,7 +30541,7 @@ msgstr "Stream hidden" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Stream preview" @@ -30779,7 +30760,7 @@ msgid "Suspend" msgstr "Suspend" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31595,7 +31576,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "The provided redirect_uri must use HTTP or HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "The screen share source stopped sending video, so your screen share was stopped." @@ -38321,6 +38302,12 @@ msgstr "Your vanity URL has been removed." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/es-419/messages.po b/fluxer_app/src/features/i18n/locales/es-419/messages.po index daefa9d95..c990cf3b1 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avanzado" msgid "Advanced video settings" msgstr "Configuración avanzada de video" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Anunciar un códec de decodificación limitado para forzar la migración del publicador" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap y Snap Layouts pueden dejar de funcionar mientras la transparencia esté activada." @@ -2990,7 +2985,7 @@ msgstr "Permitir que cualquiera que pueda ver tu perfil completo vea la hora loc #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Permitir AV1 para compartir pantalla" @@ -3044,7 +3039,7 @@ msgstr "Permitir en todas las comunidades" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Permitir H.265 (HEVC) para compartir pantalla" @@ -4385,7 +4380,6 @@ msgstr "Sugerencia de autocompletar: {label}, {selectedOptionPosition} de {resul #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Sugerencia de autocompletar: {label}, {selectedOptionPosition} de {resul #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automática" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automático ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (requiere activación)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Datos biométricos" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Tasa de bits" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Elige el color de énfasis de tu perfil" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Código:" msgid "Codec" msgstr "Códec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Prueba de negociación de códecs" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoticones" msgid "Empty favorites" msgstr "Favoritos vacíos" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emular códec de decodificación (pruebas)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Contenido para adultos activado." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Ruta del codificador" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferencia de codificador para nuevos flujos de pantalla." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Codificador, SVC, flujo secundario y ajustes preestablecidos de velocidad de bits" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Agrupación" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Respaldo H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (requiere activación)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "La aceleración de hardware puede causar fallas de renderizado con ventanas transparentes. Prueba --disable-gpu si ves parpadeos o manchas." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Codificador de hardware" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Abrir tu configuración" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Códec de software OpenH264 en Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Foto" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Imagen en imagen" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Ventana emergente de pines" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferencias..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Códec preferido para compartir pantalla" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Previsualizar sonido" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Comportamiento de la vista previa, ventana emergente y miniatura del stream" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Códec para compartir pantalla" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Controles del codificador para compartir pantalla" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Se detuvo el uso compartido de pantalla" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "La pantalla compartida está usando codificación por software ({codec}). La calidad podría reducirse y el uso de CPU, aumentar. Es posible que tu GPU no sea compatible con la codificación por hardware para este códec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Vista previa de compartir pantalla" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Comportamiento de la vista previa para compartir pantalla" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Social" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Codificador de software" @@ -30559,7 +30540,7 @@ msgstr "Transmisión oculta" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Vista previa del stream" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Suspender" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "La redirect_uri proporcionada debe usar HTTP o HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La fuente de uso compartido de pantalla dejó de enviar video, por lo que se detuvo el uso compartido de pantalla." @@ -38320,6 +38301,12 @@ msgstr "Se eliminó tu URL personalizada." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Tu URL personalizada se estableció en {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Tu codificador de video dejó de procesar fotogramas, por lo que se detuvo tu uso compartido de pantalla. Intenta compartir de nuevo." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/es-ES/messages.po b/fluxer_app/src/features/i18n/locales/es-ES/messages.po index 759e74bb5..9682b2fec 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avanzado" msgid "Advanced video settings" msgstr "Configuración avanzada de vídeo" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Anunciar un códec de decodificación limitado para forzar la migración del publicador" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap y Snap Layouts pueden dejar de funcionar mientras la transparencia esté activada." @@ -2990,7 +2985,7 @@ msgstr "Permitir que cualquiera que pueda ver tu perfil completo vea la hora loc #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Permitir AV1 para compartir pantalla" @@ -3044,7 +3039,7 @@ msgstr "Permitir en todas las comunidades" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Permitir H.265 (HEVC) para compartir pantalla" @@ -4385,7 +4380,6 @@ msgstr "Sugerencia de autocompletar: {label}, {selectedOptionPosition} de {resul #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Sugerencia de autocompletar: {label}, {selectedOptionPosition} de {resul #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automática" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automático ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (requiere activación)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Datos biométricos" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Tasa de bits" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Elige el color de énfasis de tu perfil" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Código:" msgid "Codec" msgstr "Códec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Prueba de negociación de códecs" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoticones" msgid "Empty favorites" msgstr "Favoritos vacíos" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emular códec de decodificación (pruebas)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Contenido para adultos activado." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Ruta del codificador" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferencia del codificador para nuevos flujos de pantalla compartida." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Codificador, SVC, flujo secundario y ajustes preestablecidos de velocidad de bits." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Agrupación" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Copia de seguridad H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (requiere activación)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "La aceleración de hardware puede causar fallos de renderizado con ventanas transparentes. Prueba --disable-gpu si ves parpadeos o manchas." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Codificador de hardware" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Abrir ajustes" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Códec de software OpenH264 en Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Imagen" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Imagen en imagen" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Ventana emergente de pines" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Plan" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferencias..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Códec de pantalla preferido" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Previsualizar sonido" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Comportamiento de la vista previa, ventana emergente y miniatura del stream." @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Códec para compartir pantalla" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Controles del codificador para compartir pantalla" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Finalizó el uso compartido de pantalla" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "La pantalla compartida está usando codificación por software ({codec}). La calidad podría reducirse y el uso de la CPU, aumentar. Es posible que tu GPU no sea compatible con la codificación por hardware para este códec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Previsualización de compartir pantalla" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Comportamiento de la vista previa para compartir pantalla" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Spam" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Codificador de software" @@ -30559,7 +30540,7 @@ msgstr "Transmisión oculta" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Vista previa de la transmisión" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Suspender" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "La redirect_uri proporcionada debe usar HTTP o HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La fuente de uso compartido de pantalla dejó de enviar vídeo, por lo que se detuvo el uso compartido de pantalla." @@ -38320,6 +38301,12 @@ msgstr "Se ha eliminado tu URL personalizada." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Tu URL personalizada se ha establecido en {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "El codificador de vídeo dejó de codificar fotogramas, por lo que se detuvo el uso compartido de pantalla. Intenta compartir de nuevo." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index 9f8d84128..0965cc539 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -2764,11 +2764,6 @@ msgstr "Lisäasetukset" msgid "Advanced video settings" msgstr "Edistyneet videoasetukset" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Mainosta rajoitettua dekoodauskoodekkia julkaisijan siirtymisen pakottamiseksi" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap ja Snap Layouts eivät välttämättä toimi, kun läpinäkyvyys on käytössä." @@ -2990,7 +2985,7 @@ msgstr "Anna kenen tahansa, joka voi tarkastella koko profiiliasi, nähdä profi #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Salli AV1 näytön jakamiseen" @@ -3044,7 +3039,7 @@ msgstr "Salli kaikille yhteisöille" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Salli H.265 (HEVC) näytön jakamiseen" @@ -4385,7 +4380,6 @@ msgstr "Automaattinen ehdotus: {label}, {selectedOptionPosition}/{resultCount}" #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Automaattinen ehdotus: {label}, {selectedOptionPosition}/{resultCount}" #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automaattinen" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automaattinen ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (vaatii valinnan)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometriikka" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bittinopeus" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Valitse profiilisi korostusväri" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Koodi:" msgid "Codec" msgstr "Koodekki" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Koodekin neuvottelun testaus" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Hymiöt" msgid "Empty favorites" msgstr "Ei suosikkeja" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Jäljittele dekoodauskoodekkia (testaus)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Salli aikuisille tarkoitettu sisältö." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Kooderin polku" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Ensisijainen enkooderi uusille näytönjakamistoiminnoille." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Enkooderin, SVC:n, varavirtauksen ja bittinopeuden esiasetukset." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Ryhmittely" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264-simulcast-varmuuskopio" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (vaatii valinnan)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Laitteistokiihdytys voi aiheuttaa renderöintivirheitä läpinäkyvien ikkunoiden kanssa. Kokeile --disable-gpu, jos näet välkkymistä tai sumentumista." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Laitteistopohjainen enkooderi" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Avaa asetukset" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264-ohjelmistokoodekki Linuxissa" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Kuva" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Kuva kuvassa" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Kiinnitysten ponnahdusikkuna" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Kuva kuvassa" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Asetukset..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Valitse näytön jakamisen koodekki" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Esikatsele ääntä" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Esikatselu-, ponnahdusikkuna- ja suoratoisto-kuvakaappakäyttäytyminen" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Näytönjaon koodekki" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Näytönjakamisen kooderin asetukset" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Näytönjako päättyi" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Näytönjako käyttää ohjelmistopohjaista koodausta ({codec}). Kuvanlaatu voi heikentyä ja suorittimen käyttö lisääntyä. Näytönohjaimesi ei ehkä tue laitteistopohjaista koodausta tälle koodekille." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Näytön jakamisen esikatselu" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Näytönjakamisen esikatselukäyttäytyminen" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Sosiaalinen" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Ohjelmistopohjainen kooderi" @@ -30559,7 +30540,7 @@ msgstr "Striimaus piilotettu" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Striimin esikatselu" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Keskeytä" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri-osoitteen on käytettävä HTTP- tai HTTPS-protokollaa." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Näytönjakolähde lopetti videon lähettämisen, joten näytönjako on lopetettu." @@ -38320,6 +38301,12 @@ msgstr "Osoitteesi on poistettu." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Osoitteeksi on asetettu {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Videokooderisi lopetti kuvien koodaamisen, joten näytön jakaminen pysäytettiin. Yritä jakaa uudelleen." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index b6a059d13..0c6b9457a 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avancé" msgid "Advanced video settings" msgstr "Paramètres vidéo avancés" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Annoncer un codec de décodage limité pour forcer la migration de l'éditeur" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Les fonctionnalités Aero Snap et Snap Layouts peuvent cesser de fonctionner lorsque la transparence est activée." @@ -2990,7 +2985,7 @@ msgstr "Autoriser toute personne qui peut consulter votre profil complet à voir #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Autoriser AV1 pour le partage d'écran" @@ -3044,7 +3039,7 @@ msgstr "Autoriser pour toutes les communautés" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Autoriser H.265 (HEVC) pour le partage d'écran" @@ -4385,7 +4380,6 @@ msgstr "Suggestion de saisie semi-automatique : {label}, {selectedOptionPosition #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Suggestion de saisie semi-automatique : {label}, {selectedOptionPosition #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatique" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatique ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (nécessite une activation)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Données biométriques" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Débit binaire" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Choisir la couleur d'accentuation de votre profil" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Code :" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Test de négociation de codec" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Émoticônes" msgid "Empty favorites" msgstr "Favoris vides" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Émuler le codec de décodage (test)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Contenu mature activé." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Chemin de l’encodeur" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Préférence d’encodeur pour les nouveaux partages d’écran." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encodeur, SVC, flux secondaire et préréglages du débit binaire." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Groupement" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Sauvegarde H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (nécessite une activation)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "L'accélération matérielle peut provoquer des problèmes d'affichage avec les fenêtres transparentes. Essayez --disable-gpu si vous constatez un scintillement ou des bavures." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Encodeur matériel" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Ouvrir vos réglages" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Codec logiciel OpenH264 sur Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Photo" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Image dans l'image" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Épingles (fenêtre flottante)" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Préférences..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Codec de partage d'écran préféré" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Écouter un aperçu" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Comportement de prévisualisation, d’affichage dans une fenêtre séparée et de vignette de flux." @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec de partage d'écran" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Commandes de l’encodeur de partage d’écran" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Partage d’écran terminé" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Le partage d'écran utilise l'encodage logiciel ({codec}). La qualité peut être réduite et l'utilisation du processeur augmentée. Votre GPU pourrait ne pas prendre en charge l'encodage matériel pour ce codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Aperçu du partage d'écran" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Comportement de l’aperçu du partage d’écran" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Social" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Encodeur logiciel" @@ -30559,7 +30540,7 @@ msgstr "Flux masqué" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Aperçu du stream" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Suspendre" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "L'URI de redirection fournie doit utiliser HTTP ou HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La source de partage d’écran a cessé d’envoyer des vidéos, votre partage d’écran a donc été arrêté." @@ -38320,6 +38301,12 @@ msgstr "Votre URL personnalisée a été supprimée." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Votre URL personnalisée a été définie sur {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Votre encodeur vidéo a cessé d'encoder des images, votre partage d'écran a donc été arrêté. Essayez de partager à nouveau." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index 5b089d36c..0cf43c470 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -2764,11 +2764,6 @@ msgstr "מתקדם" msgid "Advanced video settings" msgstr "הגדרות וידאו מתקדמות" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "פרסם קידוד פענוח מוגבל כדי לאלץ העברת מפרסם" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "הצמדת חלונות ופריסות הצמדה עלולים להפסיק לפעול כשהשקיפות מופעלת." @@ -2990,7 +2985,7 @@ msgstr "אפשר לכל מי שיכול לצפות בפרופיל המלא של #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "אפשר AV1 לשיתוף מסך" @@ -3044,7 +3039,7 @@ msgstr "אפשר לכל הקהילות" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "אפשר H.265 (HEVC) לשיתוף מסך" @@ -4385,7 +4380,6 @@ msgstr "השלמה אוטומטית: {label}, {selectedOptionPosition} מתוך #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "השלמה אוטומטית: {label}, {selectedOptionPosition} מתוך #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "אוטומטי" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "אוטומטי ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (דורש אישור מראש)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "אימות ביומטרי" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "קצב נתונים" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "בחרו את צבע ההדגשה של הפרופיל שלכם" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "סיסקו" @@ -7432,11 +7425,6 @@ msgstr "קוד:" msgid "Codec" msgstr "קודק" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "בדיקת משא ומתן על קודק" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "אמוטיקונים" msgid "Empty favorites" msgstr "אין מועדפים" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "דמה מקודד פענוח (בדיקה)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "הפעלת תוכן למבוגרים." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "נתיב מקודד" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "העדפת מקודד עבור שיתופי מסך חדשים." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "הגדרות מוקדמות למקודד, SVC, זרם גיבוי וקצב נתונים." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "קיבוץ" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "גיבוי H.264 בשידור סימולטני" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (דורש אישור מראש)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "האצת חומרה עלולה לגרום לבעיות רינדור עם חלונות שקופים. נסה --disable-gpu אם אתה רואה הבהוב או מריחה." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "מקודד חומרה" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "פתח/פתחי את ההגדרות שלך" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "קודק תוכנה OpenH264 בלינוקס" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "תמונה" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "תמונה בתוך תמונה" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "חלון קופץ של נעוצים" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "תמונה בתוך תמונה" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "העדפות..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "קודק שיתוף מסך מועדף" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "השמעת צליל" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "תצוגה מקדימה, פתיחה בחלון נפרד והתנהגות של תמונת מצב עבור סטרימינג." @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "קודק שיתוף מסך" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "בקרות מקודד שיתוף מסך" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "שיתוף מסך הסתיים" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "שיתוף המסך משתמש בקידוד תוכנה ({codec}). ייתכן שהאיכות תהיה נמוכה יותר וצריכת המעבד תגדל. ייתכן שהכרטיס הגרפי שלך אינו תומך בקידוד חומרה עבור רכיב ה־codec הזה." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "תצוגה מקדימה של שיתוף מסך" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "התנהגות תצוגה מקדימה של שיתוף מסך" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "חברתי" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "מקודד תוכנה" @@ -30559,7 +30540,7 @@ msgstr "הזרם מוסתר" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "תצוגה מקדימה של השידור" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "השהה" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "ה-redirect_uri שסופק חייב להשתמש ב-HTTP או ב-HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "מקור שיתוף המסך הפסיק לשלוח וידאו, ולכן שיתוף המסך שלך הופסק." @@ -38320,6 +38301,12 @@ msgstr "כתובת ה-URL המותאמת אישית שלך הוסרה." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "כתובת ה-URL המותאמת אישית שלך הוגדרה ל-‎{inviteEndpoint}/{vanitySlug}‎" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "מקודד הווידאו שלך הפסיק לקודד פריימים, ולכן שיתוף המסך שלך הופסק. נסה לשתף שוב." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index 30a1bf8aa..f5ba7b59a 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -2764,11 +2764,6 @@ msgstr "एडवांस" msgid "Advanced video settings" msgstr "उन्नत वीडियो सेटिंग्स" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "प्रकाशक माइग्रेशन को बाध्य करने के लिए एक कैप्ड डिकोड कोडेक का विज्ञापन करें" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "पारदर्शिता सक्षम होने पर एयरो स्नैप और स्नैप लेआउट काम करना बंद कर सकते हैं।" @@ -2990,7 +2985,7 @@ msgstr "जो कोई भी आपकी पूरी प्रोफ़ा #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "स्क्रीन शेयरिंग के लिए AV1 की अनुमति दें" @@ -3044,7 +3039,7 @@ msgstr "सभी कम्युनिटी के लिए अनुमत #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "H.265 (HEVC) को स्क्रीन शेयरिंग के लिए अनुमति दें" @@ -4385,7 +4380,6 @@ msgstr "ऑटो-कम्प्लीट सुझाव: {label}, {resultCoun #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "ऑटो-कम्प्लीट सुझाव: {label}, {resultCoun #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "स्वचालित" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "स्वचालित ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (ऑप्ट-इन आवश्यक)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "बायोमेट्रिक्स" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "बिटरेट" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "अपनी प्रोफ़ाइल का एक्सेंट रंग चुनें" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "सिस्को" @@ -7432,11 +7425,6 @@ msgstr "कोड:" msgid "Codec" msgstr "कोडेक" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "कोडेक बातचीत परीक्षण" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "इमोटिकॉन" msgid "Empty favorites" msgstr "पसंदीदा खाली हैं" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "डीकोड कोडेक का अनुकरण करें (परीक्षण)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "परिपक्व सामग्री सक्षम की ग #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "एन्कोडर पाथ" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "नए स्क्रीन शेयर के लिए एन्कोडर प्राथमिकता।" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "एन्कोडर, SVC, बैकअप स्ट्रीम और बिटरेट प्रीसेट।" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "ग्रुप करना" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 सिमुलकास्ट बैकअप" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (ऑप्ट-इन आवश्यक है)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "हार्डवेयर एक्सेलेरेशन से पारदर्शी विंडो में रेंडरिंग में गड़बड़ी हो सकती है. अगर आपको फ़्लिकर या स्मियरिंग दिखती है, तो --disable-gpu आज़माएँ." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "हार्डवेयर एन्कोडर" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "अपनी सेटिंग खोलें" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Linux पर OpenH264 सॉफ़्टवेयर कोडेक" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "तस्वीर" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "पिक्चर इन पिक्चर" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "पिन पॉपआउट" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "पिप" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "प्राथमिकताएँ..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "पसंदीदा स्क्रीन शेयर कोडेक" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "साउंड का प्रीव्यू करें" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "पूर्वावलोकन, पॉपआउट और स्ट्रीम थंबनेल व्यवहार" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "स्क्रीन शेयर कोडेक" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "स्क्रीन शेयर एनकोडर नियंत्रण" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "स्क्रीन शेयर समाप्त हो गया" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "स्क्रीन शेयर सॉफ़्टवेयर एन्कोडिंग ({codec}) का उपयोग कर रहा है। गुणवत्ता कम हो सकती है और CPU का उपयोग बढ़ सकता है। हो सकता है कि आपका GPU इस कोडेक के लिए हार्डवेयर एन्कोडिंग का समर्थन न करता हो।" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "स्क्रीन शेयर का प्रीव्यू" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "स्क्रीन शेयर पूर्वावलोकन व्यवहार" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "सोशल" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "सॉफ्टवेयर एनकोडर" @@ -30559,7 +30540,7 @@ msgstr "स्ट्रीम छिपी हुई है" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "स्ट्रीम का प्रीव्यू" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "निलंबित करें" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "दिया गया redirect_uri HTTP या HTTPS का उपयोग करना चाहिए।" #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "स्क्रीन शेयर स्रोत ने वीडियो भेजना बंद कर दिया है, इसलिए आपका स्क्रीन शेयर रोक दिया गया।" @@ -38320,6 +38301,12 @@ msgstr "आपका वैनिटी यूआरएल हटा दिय msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "आपकी वैनिटी URL को {inviteEndpoint}/{vanitySlug} पर सेट कर दिया गया है" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "आपका वीडियो एन्कोडर फ़्रेम एन्कोड करना बंद कर दिया, इसलिए आपकी स्क्रीन शेयरिंग रोक दी गई। दोबारा शेयर करने का प्रयास करें।" + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index 14187d293..347202921 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -2764,11 +2764,6 @@ msgstr "Napredno" msgid "Advanced video settings" msgstr "Napredne video postavke" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Ponudi ograničeni kodek za dekodiranje kako bi se prisilila migracija izdavača" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Značajke Aero Snap i Snap Layouts možda neće raditi dok je prozirnost omogućena." @@ -2990,7 +2985,7 @@ msgstr "Dopusti svima koji mogu vidjeti vaš cijeli profil da vide vaše lokalno #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Dopusti AV1 za dijeljenje zaslona" @@ -3044,7 +3039,7 @@ msgstr "Dopusti za sve zajednice" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Dopusti H.265 (HEVC) za dijeljenje zaslona" @@ -4385,7 +4380,6 @@ msgstr "Prijedlog automatskog dovršavanja: {label}, {selectedOptionPosition} od #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Prijedlog automatskog dovršavanja: {label}, {selectedOptionPosition} od #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatski" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatski ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (zahtijeva uključivanje)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometrija" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Brzina prijenosa podataka" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Odaberite boju naglaska profila" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kod:" msgid "Codec" msgstr "Kodek" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Testiranje pregovaranja o kodeku" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emotikoni" msgid "Empty favorites" msgstr "Prazni favoriti" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emuliraj kodek za dekodiranje (testiranje)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Omogućen je sadržaj za odrasle." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Putanja kodera" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Željeni enkoder za nove dijeljene zaslone." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Postavke enkodera, SVC-a, rezervne datoteke i brzine prijenosa." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Grupiranje" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast sigurnosna kopija" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (zahtijeva uključivanje)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Hardversko ubrzanje može uzrokovati greške u renderiranju s prozirnim prozorima. Pokušajte s --disable-gpu ako primijetite treperenje ili zamućenje." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardverski enkoder" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Otvori postavke" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Omogućavanje softverskog kodeka OpenH264 na Linuxu" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Slika" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Slika u slici" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Skočni prozor s pribadačama" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Slika u slici" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Postavke..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Preferirani kodek za dijeljenje zaslona" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Pretpregled zvuka" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Pregled, ponašanje u odvojenom prozoru i sličica za prijenos uživo" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Kodek za dijeljenje zaslona" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Kontrole za enkoder dijeljenja zaslona" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Dijeljenje zaslona završeno" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Dijeljenje zaslona koristi softversko kodiranje ({codec}). Kvaliteta može biti smanjena, a upotreba procesora povećana. Vaš GPU možda ne podržava hardversko kodiranje za ovaj kodek." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Pregled dijeljenja zaslona" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Ponašanje pregleda dijeljenja zaslona" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Društveno" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Softverski enkoder" @@ -30559,7 +30540,7 @@ msgstr "Strim skriven" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Pregled prijenosa" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Obustavi" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Navedeni redirect_uri mora koristiti HTTP ili HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Izvor dijeljenja zaslona prestao je slati video, pa je dijeljenje zaslona zaustavljeno." @@ -38320,6 +38301,12 @@ msgstr "Vaš prilagođeni URL je uklonjen." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Vaš prilagođeni URL postavljen je na {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Vaš video enkoder prestao je kodirati slike, stoga je dijeljenje zaslona zaustavljeno. Pokušajte ponovno dijeliti." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index ffa9e851b..5a2667b01 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -2764,11 +2764,6 @@ msgstr "Speciális" msgid "Advanced video settings" msgstr "Haladó videobeállítások" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Korlátozott dekódoló kodek hirdetése a kiadó áttelepítésének kikényszerítéséhez" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Az Aero Snap és a Snap Layouts nem működhet, ha az átlátszóság engedélyezve van." @@ -2990,7 +2985,7 @@ msgstr "Engedélyezi, hogy bárki, aki megtekintheti a teljes profilját, lássa #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "AV1 engedélyezése képernyőmegosztáshoz" @@ -3044,7 +3039,7 @@ msgstr "Engedélyezés minden közösség számára" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Engedélyezze a H.265 (HEVC) használatát képernyőmegosztáshoz" @@ -4385,7 +4380,6 @@ msgstr "Automatikus kiegészítési javaslat: {label}, {selectedOptionPosition}/ #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Automatikus kiegészítési javaslat: {label}, {selectedOptionPosition}/ #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatikus" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatikus ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (opt-in szükséges)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometria" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrátum" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Válaszd ki a profilod kiemelő színét" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kód:" msgid "Codec" msgstr "Kodek" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Kodek-egyeztetési tesztelés" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emotikonok" msgid "Empty favorites" msgstr "Üres kedvencek" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Dekódolási kodek emulálása (tesztelés)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Érett tartalom engedélyezve." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Kódoló elérési útja" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Az új képernyőmegosztásokhoz használt kódoló beállításai." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Kódoló, SVC, tartalék stream és bitrátabeállítások." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Csoportosítás" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast biztonsági mentés" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (opt-in szükséges)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "A hardveres gyorsítás átlátszó ablakok esetén megjelenítési hibákat okozhat. Próbálja meg a --disable-gpu opciót, ha villódzást vagy elmosódást tapasztal." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardveres kódoló" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Beállítások megnyitása" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Nyílt forráskódú H.264 videó kodek Linuxon" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Kép" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Kép a képben" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Rögzített üzenetek előugró ablaka" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Kép a képben" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Beállítások..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Képernyőmegosztás codec" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Hang előnézete" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Előnézet, külön ablakban való megjelenítés és videó miniatűr viselkedése" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Képernyőmegosztás kodek" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Képernyőmegosztás-kódoló beállításai" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "A képernyőmegosztás befejeződött" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "A képernyőmegosztás szoftveres kódolást használ ({codec}). A minőség romolhat, és a CPU-használat megnőhet. Lehet, hogy a GPU-ja nem támogatja a hardveres kódolást ehhez a kodekhez." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Képernyőmegosztás előnézete" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Képernyőmegosztás előnézetének viselkedése" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Közösségi" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Szoftveres kódoló" @@ -30559,7 +30540,7 @@ msgstr "Adatfolyam elrejtve" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Stream előnézete" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Felfüggesztés" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "A megadott redirect_uri-nak HTTP vagy HTTPS protokollt kell használnia." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "A képernyőmegosztás forrása leállította a videó küldését, ezért a képernyőmegosztása is befejeződött." @@ -38320,6 +38301,12 @@ msgstr "Az egyéni URL-ed eltávolítva." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Az egyéni meghívó URL-je beállítva: {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "A videokódoló nem kódolt képkockákat, ezért a képernyőmegosztás leállt. Próbáld meg újra megosztani." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index 74c1f4833..eaa258f40 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -2764,11 +2764,6 @@ msgstr "Lanjutan" msgid "Advanced video settings" msgstr "Pengaturan video lanjutan" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Iklankan codec dekode terbatas untuk memaksa migrasi penerbit" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap dan Snap Layouts dapat berhenti berfungsi saat transparansi diaktifkan." @@ -2990,7 +2985,7 @@ msgstr "Izinkan siapa pun yang dapat melihat profil lengkap Anda untuk melihat w #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Izinkan AV1 untuk berbagi layar" @@ -3044,7 +3039,7 @@ msgstr "Izinkan untuk semua komunitas" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Izinkan H.265 (HEVC) untuk berbagi layar" @@ -4385,7 +4380,6 @@ msgstr "Saran pelengkapan otomatis: {label}, {selectedOptionPosition} dari {resu #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Saran pelengkapan otomatis: {label}, {selectedOptionPosition} dari {resu #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Otomatis" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Otomatis ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (perlu ikut serta)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometrik" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrate" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Pilih warna aksen profil Anda" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kode:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Pengujian negosiasi codec" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emotikon" msgid "Empty favorites" msgstr "Favorit kosong" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emulasikan codec dekode (pengujian)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Konten dewasa diaktifkan." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Jalur encoder" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferensi encoder untuk berbagi layar baru." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encoder, SVC, aliran cadangan, dan preset bitrate" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Pengelompokan" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Cadangan simulcast H.264" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (perlu ikut serta)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Akselerasi hardware dapat menyebabkan gangguan rendering pada jendela transparan. Coba --disable-gpu jika Anda melihat kedipan atau buram." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Encoder perangkat keras" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Buka pengaturan Anda" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Codec perangkat lunak OpenH264 di Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Gambar" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Gambar dalam gambar" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Pin munculan" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferensi..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Codec berbagi layar pilihan" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Pratinjau suara" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Pratinjau, popout, dan perilaku thumbnail streaming" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Kodek berbagi layar" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Kontrol pengode video layar" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Berbagi layar berakhir" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Berbagi layar menggunakan encoding perangkat lunak ({codec}). Kualitas mungkin berkurang dan penggunaan CPU meningkat. GPU Anda mungkin tidak mendukung encoding perangkat keras untuk codec ini." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Pratinjau berbagi layar" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Pratinjau berbagi layar" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Sosial" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Encoder perangkat lunak" @@ -30559,7 +30540,7 @@ msgstr "Streaming disembunyikan" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Pratinjau streaming" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Tangguhkan" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri yang diberikan harus menggunakan HTTP atau HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Sumber berbagi layar berhenti mengirim video, sehingga berbagi layar Anda dihentikan." @@ -38320,6 +38301,12 @@ msgstr "URL kustom Anda telah dihapus." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "URL kustom Anda telah diatur ke {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Encoder video Anda berhenti mengenkode frame, jadi berbagi layar Anda dihentikan. Coba bagikan lagi." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index 2297bc6ca..2037fa869 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avanzate" msgid "Advanced video settings" msgstr "Impostazioni video avanzate" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Pubblica un codec di decodifica limitato per forzare la migrazione dell'editore" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Le funzionalità Aero Snap e Snap Layout potrebbero non funzionare correttamente se la trasparenza è attiva." @@ -2990,7 +2985,7 @@ msgstr "Consenti a chiunque possa visualizzare il tuo profilo completo di vedere #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Consenti AV1 per la condivisione dello schermo" @@ -3044,7 +3039,7 @@ msgstr "Consenti per tutte le community" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Consenti H.265 (HEVC) per la condivisione dello schermo" @@ -4385,7 +4380,6 @@ msgstr "Suggerimento di completamento automatico: {label}, {selectedOptionPositi #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Suggerimento di completamento automatico: {label}, {selectedOptionPositi #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatico" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatic ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (richiede attivazione)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometria" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrate" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Scegli il colore principale del tuo profilo" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Codice:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Test negoziazione codec" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoticon" msgid "Empty favorites" msgstr "Preferiti vuoti" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emula codec di decodifica (test)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Contenuti per adulti abilitati." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Percorso encoder" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferenza dell'encoder per le nuove condivisioni schermo." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Impostazioni dell'encoder, SVC, stream di backup e preset del bitrate" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Raggruppamento" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Backup simulcast H.264" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (richiede attivazione)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "L'accelerazione hardware può causare problemi di rendering con le finestre trasparenti. Prova --disable-gpu se noti sfarfallio o sbavature." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Encoder hardware" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Apri le impostazioni" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Codec software OpenH264 su Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Immagine" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Immagine in picture-in-picture" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Finestre a comparsa per i messaggi fissati" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferenze..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Codec preferito per la condivisione schermo" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Riproduci suono" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Anteprima, comportamento della finestra pop-out e dello streaming" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec di condivisione schermo" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Controlli dell'encoder per la condivisione dello schermo" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Screen share terminato" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "La condivisione schermo sta usando la codifica software ({codec}). La qualità potrebbe essere ridotta e l'utilizzo della CPU aumentato. La tua GPU potrebbe non supportare la codifica hardware per questo codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Anteprima condivisione schermo" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Anteprima della condivisione dello schermo" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Sociale" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Codec software" @@ -30559,7 +30540,7 @@ msgstr "Streaming nascosto" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Anteprima stream" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Sospendi" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "L'URI di reindirizzamento fornito deve usare HTTP o HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La sorgente della condivisione dello schermo ha smesso di inviare video, quindi la condivisione dello schermo è stata interrotta." @@ -38320,6 +38301,12 @@ msgstr "Il tuo URL personalizzato è stato rimosso." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "L'URL personalizzato è stato impostato su {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Il tuo codificatore video ha smesso di codificare i frame, quindi la condivisione dello schermo è stata interrotta. Riprova a condividere." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index 5a8904eb9..b09b865d3 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -2764,11 +2764,6 @@ msgstr "詳細設定" msgid "Advanced video settings" msgstr "高度なビデオ設定" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "デコードコーデックに上限を設定して、パブリッシャーの移行を強制します" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "透明化を有効にすると、Aero Snapとスナップレイアウトが機能しなくなることがあります。" @@ -2990,7 +2985,7 @@ msgstr "プロフィールを閲覧できるすべてのユーザーに、あな #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "画面共有でAV1を許可する" @@ -3044,7 +3039,7 @@ msgstr "すべてのコミュニティを許可" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "H.265 (HEVC) による画面共有を許可" @@ -4385,7 +4380,6 @@ msgstr "入力候補: {label}、{resultCount}件中{selectedOptionPosition}番 #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "入力候補: {label}、{resultCount}件中{selectedOptionPosition}番 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "自動" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "自動 ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1(オプトインが必要です)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "生体認証" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "ビットレート" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "プロフィールアクセントカラーを選択" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "コード:" msgid "Codec" msgstr "コーデック" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "コーデックネゴシエーションのテスト" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "絵文字" msgid "Empty favorites" msgstr "お気に入りはありません" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "デコードコーデックのエミュレート(テスト用)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "成人向けコンテンツを有効にしました。" #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "エンコーダーパス" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "新しい画面共有のエンコーダー設定" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "エンコーダー、SVC、バックアップストリーム、およびビットレートプリセット" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "グループ化" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 サイマルキャストバックアップ" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265(オプトインが必要です)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "ハードウェアアクセラレーションは、透過ウィンドウでレンダリングの不具合を引き起こす可能性があります。ちらつきやにじみが見られる場合は、「--disable-gpu」をお試しください。" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "ハードウェアエンコーダー" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "設定を開く" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264ソフトウェアコーデック(Linux)" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "写真" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "ピクチャーインピクチャー" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "ピンのポップアウト" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "ピクチャーインピクチャー" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "環境設定..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "画面共有の優先コーデック" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "サウンドをプレビュー" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "プレビュー、ポップアウト、およびストリーミングサムネイルの動作" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "画面共有コーデック" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "画面共有エンコーダー設定" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "画面共有が終了しました" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "画面共有でソフトウェアエンコード({codec})を使用しています。画質が低下し、CPU使用率が増加する可能性があります。お使いのGPUは、このコーデックのハードウェアエンコードに対応していない可能性があります。" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "画面共有プレビュー" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "画面共有プレビューの動作" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "ソーシャル" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "ソフトウェアエンコーダー" @@ -30559,7 +30540,7 @@ msgstr "ストリームを非表示にしました" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "ストリームプレビュー" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "一時停止" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "指定されたredirect_uriはHTTPまたはHTTPSを使用する必要があります。" #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "画面共有のソースがビデオの送信を停止したため、画面共有は停止されました。" @@ -38320,6 +38301,12 @@ msgstr "カスタムURLが削除されました。" msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "バニティURLを {inviteEndpoint}/{vanitySlug} に設定しました" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "動画エンコーダーがフレームのエンコードを停止したため、画面共有が停止しました。もう一度共有してみてください。" + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index 664159508..f9f5c0e39 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -2764,11 +2764,6 @@ msgstr "고급" msgid "Advanced video settings" msgstr "고급 비디오 설정" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "게시자 마이그레이션을 강제하기 위해 제한된 디코드 코덱을 광고" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "투명 효과가 활성화된 동안에는 에어로 스냅 및 스냅 레이아웃이 작동하지 않을 수 있습니다." @@ -2990,7 +2985,7 @@ msgstr "전체 프로필을 볼 수 있는 모든 사람이 내 프로필 현지 #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "화면 공유에 AV1 사용 허용" @@ -3044,7 +3039,7 @@ msgstr "모든 커뮤니티 허용" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "H.265(HEVC) 화면 공유 허용" @@ -4385,7 +4380,6 @@ msgstr "자동 완성 제안: {label}, {resultCount}개 중 {selectedOptionPosit #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "자동 완성 제안: {label}, {resultCount}개 중 {selectedOptionPosit #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "자동" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "자동 ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (옵트인 필요)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "생체 인식" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "비트 전송률" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "프로필 강조 색상 선택" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "시스코" @@ -7432,11 +7425,6 @@ msgstr "코드:" msgid "Codec" msgstr "코덱" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "코덱 협상 테스트" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "이모티콘" msgid "Empty favorites" msgstr "즐겨찾기 없음" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "디코딩 코덱 에뮬레이션 (테스트용)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "성인 콘텐츠를 사용하도록 설정했습니다." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "인코더 경로" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "새로운 화면 공유에 대한 인코더 설정" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "인코더, SVC, 백업 스트림 및 비트 전송률 사전 설정" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "그룹화" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 동시 전송 백업" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265(옵트인 필요)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "하드웨어 가속은 투명 창에서 렌더링 오류를 일으킬 수 있습니다. 화면 깜빡임이나 번짐 현상이 나타나면 --disable-gpu를 사용해 보세요." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "하드웨어 인코더" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "설정 열기" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Linux의 OpenH264 소프트웨어 코덱" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "사진" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "화면 속 화면" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "핀 팝업" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PIP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "환경설정..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "화면 공유 시 선호하는 코덱" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "사운드 미리 듣기" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "미리보기, 팝업 및 스트림 섬네일 동작 설정" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "화면 공유 코덱" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "화면 공유 인코더 컨트롤" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "화면 공유가 종료되었습니다" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "화면 공유에서 소프트웨어 인코딩({codec})을 사용하고 있습니다. 화질이 저하되고 CPU 사용량이 증가할 수 있습니다. GPU가 이 코덱에 대한 하드웨어 인코딩을 지원하지 않을 수 있습니다." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "화면 공유 미리보기" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "화면 공유 미리보기 동작" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "소셜" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "소프트웨어 인코더" @@ -30559,7 +30540,7 @@ msgstr "화면 공유 숨김" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "스트림 미리보기" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "일시 중단" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "제공된 redirect_uri는 HTTP 또는 HTTPS를 사용해야 합니다." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "화면 공유 소스가 더 이상 비디오를 보내지 않아 화면 공유가 중단되었습니다." @@ -38320,6 +38301,12 @@ msgstr "맞춤 URL이 삭제되었습니다." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "맞춤 URL이 {inviteEndpoint}/{vanitySlug}(으)로 설정되었습니다" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "동영상 인코더에서 프레임을 더 이상 인코딩하지 않아 화면 공유가 중지되었습니다. 다시 공유해 보세요." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index 087efe2b6..73ff82176 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -2764,11 +2764,6 @@ msgstr "Išplėstiniai" msgid "Advanced video settings" msgstr "Išplėstinės vaizdo įrašo nustatymai" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Reklamuoti apribotą dekodavimo kodeką, kad būtų priversta leisti siuntėjų migraciją" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "\"Aero Snap\" ir \"Snap Layouts\" gali nustoti veikti, kai įjungtas skaidrumas." @@ -2990,7 +2985,7 @@ msgstr "Leisti visiems, kurie gali matyti visą jūsų profilį, matyti jūsų p #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Leisti AV1 ekrano bendrinimui" @@ -3044,7 +3039,7 @@ msgstr "Leisti visoms bendruomenėms" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Leisti H.265 (HEVC) ekrano bendrinimui" @@ -4385,7 +4380,6 @@ msgstr "Automatinio užbaigimo pasiūlymas: {label}, {selectedOptionPosition} i #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Automatinio užbaigimo pasiūlymas: {label}, {selectedOptionPosition} i #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatinis" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatinis ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (reikia sutikimo)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometriniai duomenys" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "„Bitų srautas“" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Pasirinkite profilio akcento spalvą" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kodas:" msgid "Codec" msgstr "Kodekas" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Kodeko derybų testavimas" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Šypsenėliai" msgid "Empty favorites" msgstr "Nėra mėgstamiausių" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emuliuoti dekodavimo kodeką (testavimas)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Įjungtas brandus turinys." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Koderio kelias" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Naujų ekrano dalijimosi sesijų kodavimo nustatymas." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Kodavimo priemonė, SVC, atsarginis srautas ir bitų spartos nustatymai." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Grupavimas" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast atsarginė kopija" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (reikia pasirinkti papildomai)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Aparatinės įrangos spartinimas gali sukelti atvaizdavimo trikdžius su permatomais langais. Jei matote mirgėjimą ar išsiliejimą, pabandykite naudoti --disable-gpu." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Aparatinis kodavimo įrenginys" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Atidaryti nustatymus" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "„OpenH264“ programinė kodekė „Linux“ sistemoje" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Nuotrauka" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Vaizdas vaizde" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Prisegtų pranešimų iššokantis langas" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Vaizdas vaizde" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Nuostatos..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Pageidaujamas ekrano bendrinimo kodekas" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Peržiūrėti garsą" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Peržiūrėti, atidaryti išskleistame lange ir srauto miniatiūros" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Ekrano bendrinimo kodekas" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Ekrano dalijimosi įrašymo nustatymų valdikliai" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Ekrano dalijimasis baigėsi" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Ekrano bendrinimas naudoja programinės įrangos kodavimą ({codec}). Kokybė gali būti sumažinta, o procesoriaus naudojimas padidintas. Jūsų GPU gali nepalaikyti šio kodeko aparatinio kodavimo." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Ekrano bendrinimo peržiūra" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Ekrano dalijimosi peržiūros elgsena" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Socialiniai tinklai" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Programinis kodavimo įrenginys" @@ -30559,7 +30540,7 @@ msgstr "Srautas paslėptas" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Tiesioginės transliacijos peržiūra" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Pristabdyti" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Pateiktas \"redirect_uri\" turi naudoti HTTP arba HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Šaltinio, kuriuo dalijamasi ekranu, vaizdo perdavimas buvo sustabdytas, todėl ekrano dalijimasis buvo nutrauktas." @@ -38320,6 +38301,12 @@ msgstr "Jūsų pasirinktinis URL pašalintas." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Jūsų pasirinktinis URL nustatytas į {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Jūsų vaizdo įrašų kodavimo įrenginys nustojo koduoti kadrus, todėl jūsų ekrano bendrinimas buvo sustabdytas. Pabandykite bendrinti dar kartą." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 33d2789de..1df3b85e5 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -2764,11 +2764,6 @@ msgstr "Geavanceerd" msgid "Advanced video settings" msgstr "Geavanceerde video-instellingen" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Adverteer een beperkte decode-codec om migratie van de uitgever af te dwingen" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap en Snap Layouts werken mogelijk niet meer als transparantie is ingeschakeld." @@ -2990,7 +2985,7 @@ msgstr "Iedereen die je volledige profiel kan bekijken, mag je lokale profieltij #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "AV1 toestaan voor scherm delen" @@ -3044,7 +3039,7 @@ msgstr "Toestaan voor alle communities" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Sta H.265 (HEVC) toe voor scherm delen" @@ -4385,7 +4380,6 @@ msgstr "Automatisch aanvullen: {label}, {selectedOptionPosition} van {resultCoun #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Automatisch aanvullen: {label}, {selectedOptionPosition} van {resultCoun #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatisch" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatisch ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (vereist opt-in)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometrie" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitsnelheid" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Kies de accentkleur van je profiel" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Code:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Codeconderhandeling testen" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoticons" msgid "Empty favorites" msgstr "Favorieten leeg" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Decode-codec emuleren (testen)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Volwassen inhoud ingeschakeld." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Encoderpad" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Encoder voorkeur voor nieuwe schermdeling." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encoder, SVC, back-upstroom en bitrate-instellingen." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Groeperen" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast-back-up" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (vereist opt-in)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Hardwareversnelling kan weergavefouten veroorzaken bij transparante vensters. Probeer --disable-gpu als je flikkering of vegen ziet." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hardware-encoder" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Open je instellingen" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264 softwarecodec op Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Foto" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Beeld in beeld" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Vastgezette berichten pop-out" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Voorkeuren..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Voorkeurscodeset voor scherm delen" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Geluid beluisteren" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Voorbeeld, pop-up en gedrag van de streamminiatuur" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec voor scherm delen" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Instellingen voor schermdeling" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Schermdeling beëindigd" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Scherm delen gebruikt software-encoding ({codec}). De kwaliteit kan verminderd zijn en het CPU-gebruik verhoogd. Je GPU ondersteunt mogelijk geen hardware-encoding voor deze codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Voorbeeld scherm delen" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Voorbeeldweergave voor scherm delen" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Sociaal" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Software-encoder" @@ -30559,7 +30540,7 @@ msgstr "Stream verborgen" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Streamvoorbeeld" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Onderbreken" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "De opgegeven redirect_uri moet HTTP of HTTPS gebruiken." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "De bron van het scherm delen stuurt geen video meer, dus uw schermdeling is gestopt." @@ -38320,6 +38301,12 @@ msgstr "Je persoonlijke URL is verwijderd." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Je aangepaste URL is ingesteld op {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Je videocodeur is gestopt met het coderen van frames, dus je scherm delen is gestopt. Probeer het opnieuw." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index 8fc9949b0..b1856f52d 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avansert" msgid "Advanced video settings" msgstr "Avanserte videoinnstillinger" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Annonser en begrenset dekodekodek for å tvinge publiseringsmigrering" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap og Snap Layouts kan slutte å fungere når gjennomsiktighet er aktivert." @@ -2990,7 +2985,7 @@ msgstr "Tillat alle som kan se hele profilen din å se din lokale tid på profil #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Tillat AV1 for skjermdeling" @@ -3044,7 +3039,7 @@ msgstr "Tillat for alle fellesskap" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Tillat H.265 (HEVC) for skjermdeling" @@ -4385,7 +4380,6 @@ msgstr "Autofullfør-forslag: {label}, {selectedOptionPosition} av {resultCount} #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Autofullfør-forslag: {label}, {selectedOptionPosition} av {resultCount} #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatisk" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatisk ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (krever påmelding)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometri" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bithastighet" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Velg aksentfargen for profilen din" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kode:" msgid "Codec" msgstr "Kodek" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Testing av kodekforhandling" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emotikoner" msgid "Empty favorites" msgstr "Tom favorittliste" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emuler dekodingskodek (testing)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Aktiverte voksent innhold." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Koderbane" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Encoder-preferanse for nye skjermdelinger." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Encoder, SVC, sikkerhetskopistrøm og bitrate-innstillinger" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Gruppering" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast-sikkerhetskopi" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (krever påmelding)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Maskinvareakselerasjon kan forårsake gjengivelsesfeil med gjennomsiktige vinduer. Prøv --disable-gpu hvis du ser flimring eller smøring." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Maskinvarekoder" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Åpne innstillingene dine" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264 programvarekodek på Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Bilde" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Bilde i bilde" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Festede meldinger" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Bilde i bilde" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Valg..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Foretrukket skjermdelingskodek" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Forhåndsvis lyd" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Forhåndsvisning, popup og oppførsel for strømmeminiatyrbilder" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Skjermdelingskodek" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Kontroller for skjermdelingsenkoder" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Skjermdelingen ble avsluttet" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Skjermdeling bruker programvarekoding ({codec}). Kvaliteten kan bli redusert og CPU-bruken økt. GPU-en din støtter kanskje ikke maskinvarekoding for denne kodeken." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Forhåndsvisning av skjermdeling" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Visning av skjermdeling" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Sosialt" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Programvarekoder" @@ -30559,7 +30540,7 @@ msgstr "Strøm skjult" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Forhåndsvisning av strøm" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Suspendér" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Den oppgitte redirect_uri må bruke HTTP eller HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Kilden for skjermdelingen sluttet å sende video, så skjermdelingen ble stoppet." @@ -38320,6 +38301,12 @@ msgstr "Vanity-URL-en din er fjernet." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Din tilpassede URL er nå satt til {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Videokoderen din sluttet å kode bilder, så skjermdelingen ble stoppet. Prøv å dele igjen." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index 01a2d3a87..a94390a28 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -2764,11 +2764,6 @@ msgstr "Zaawansowane" msgid "Advanced video settings" msgstr "Ustawienia zaawansowane wideo" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Zaoferuj ograniczony kodek dekodowania, aby wymusić migrację wydawcy" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Funkcje Aero Snap i Snap Layouts mogą przestać działać, gdy włączona jest przezroczystość." @@ -2990,7 +2985,7 @@ msgstr "Zezwól każdemu, kto może wyświetlić twój pełny profil, na zobacze #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Zezwalaj na AV1 podczas udostępniania ekranu" @@ -3044,7 +3039,7 @@ msgstr "Zezwól dla wszystkich społeczności" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Zezwól na H.265 (HEVC) podczas udostępniania ekranu" @@ -4385,7 +4380,6 @@ msgstr "Sugestia autouzupełniania: {label}, {selectedOptionPosition} z {resultC #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Sugestia autouzupełniania: {label}, {selectedOptionPosition} z {resultC #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatycznie" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatyczne ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (wymaga zgody)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometria" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Przepływność" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Wybierz kolor akcentujący profilu" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kod:" msgid "Codec" msgstr "Kodek" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Testowanie negocjacji kodeka" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emotikony" msgid "Empty favorites" msgstr "Brak ulubionych" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emuluj kodek dekodowania (testowanie)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Włączono treści dla dorosłych." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Ścieżka kodera" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferowana metoda kodowania dla nowych udostępnień ekranu." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Metoda kodowania, SVC, strumień zapasowy i ustawienia przepływności." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Grupowanie" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Kopia zapasowa H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (wymaga włączenia)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Akceleracja sprzętowa może powodować błędy renderowania w przypadku przezroczystych okien. Spróbuj użyć opcji --disable-gpu, jeśli widzisz migotanie lub smużenie." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Koder sprzętowy" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Otwórz ustawienia" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Kodek OpenH264 na systemie Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Zdjęcie" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Obraz w obrazie" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Wyskakujące przypięte wiadomości" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Obraz w obrazie" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferencje..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Preferowany kodek udostępniania ekranu" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Podgląd dźwięku" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Podgląd, okienkowy i zachowanie miniatur strumieni" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Kodek udostępniania ekranu" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Sterowanie ustawieniami kodowania udostępniania ekranu" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Udostępnianie ekranu zakończone" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Udostępnianie ekranu korzysta z kodowania programowego ({codec}). Jakość może być obniżona, a użycie procesora zwiększone. Twój procesor graficzny może nie obsługiwać kodowania sprzętowego dla tego kodeka." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Podgląd udostępniania ekranu" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Zachowanie podglądu udostępniania ekranu" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Społecznościowe" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Koder oprogramowania" @@ -30559,7 +30540,7 @@ msgstr "Ukryto strumień" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Podgląd transmisji" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Zawieś" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Podany adres redirect_uri musi używać protokołu HTTP lub HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Źródło udostępniania ekranu przestało wysyłać wideo, więc udostępnianie ekranu zostało zatrzymane." @@ -38320,6 +38301,12 @@ msgstr "Twój niestandardowy adres URL został usunięty." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Twój niestandardowy adres URL został ustawiony na {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Twój koder wideo przestał kodować klatki, więc udostępnianie ekranu zostało zatrzymane. Spróbuj udostępnić ponownie." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po index 33df6d1db..c0858fd5c 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avançado" msgid "Advanced video settings" msgstr "Configurações avançadas de vídeo" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Anunciar um codec de decodificação com limite para forçar a migração do publicador" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "O Aero Snap e os Snap Layouts podem parar de funcionar enquanto a transparência estiver ativada." @@ -2990,7 +2985,7 @@ msgstr "Permitir que qualquer pessoa que possa ver seu perfil completo veja o ho #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Permitir AV1 para compartilhamento de tela" @@ -3044,7 +3039,7 @@ msgstr "Permitir para todas as comunidades" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Permitir H.265 (HEVC) para compartilhamento de tela" @@ -4385,7 +4380,6 @@ msgstr "Sugestão de preenchimento automático: {label}, {selectedOptionPosition #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Sugestão de preenchimento automático: {label}, {selectedOptionPosition #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automático" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automático ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (requer ativação)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometria" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Taxa de bits" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Escolha a cor de destaque do seu perfil" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Código:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Teste de negociação de codec" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoticons" msgid "Empty favorites" msgstr "Favoritos vazios" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emular codec de decodificação (teste)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Conteúdo adulto ativado." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Caminho do codificador" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferência do codificador para novos compartilhamentos de tela." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Codificador, SVC, fluxo de backup e predefinições de taxa de bits" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Agrupamento" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Backup H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (requer ativação)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "A aceleração de hardware pode causar falhas de renderização com janelas transparentes. Tente --disable-gpu se você notar cintilação ou manchas." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Codificador de hardware" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Abrir suas configurações" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264, codec de software para Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Foto" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Miniplayer" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Pop-out de pins" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferências..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Codec preferencial para compartilhamento de tela" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Prévia do som" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Pré-visualização, janela pop-out e comportamento do thumbnail de streaming" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec de compartilhamento de tela" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Controles do codificador de compartilhamento de tela" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Compartilhamento de tela encerrado" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "O compartilhamento de tela está usando codificação por software ({codec}). A qualidade pode ser reduzida e o uso da CPU aumentado. Sua GPU pode não ser compatível com a codificação por hardware para este codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Prévia do compartilhamento de tela" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Comportamento da visualização do compartilhamento de tela" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Social" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Codificador de software" @@ -30559,7 +30540,7 @@ msgstr "Transmissão oculta" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Prévia da transmissão" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Suspender" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "O redirect_uri fornecido precisa usar HTTP ou HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "A fonte de compartilhamento de tela parou de enviar vídeo, então o seu compartilhamento de tela foi interrompido." @@ -38320,6 +38301,12 @@ msgstr "Seu URL personalizado foi removido." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Seu URL personalizado foi definido como {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Seu codificador de vídeo parou de codificar quadros, então o compartilhamento de tela foi interrompido. Tente compartilhar novamente." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index 72f580b00..7fb0c5be0 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avansat" msgid "Advanced video settings" msgstr "Setări video avansate" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Promovează un codec de decodare limitat pentru a forța migrarea editorului" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Funcțiile Aero Snap și Snap Layouts pot înceta să funcționeze în timp ce transparența este activată." @@ -2990,7 +2985,7 @@ msgstr "Permite oricui îți poate vedea profilul complet să-ți vadă ora loca #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Permite AV1 pentru partajarea ecranului" @@ -3044,7 +3039,7 @@ msgstr "Permite pentru toate comunitățile" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Permite H.265 (HEVC) pentru partajarea ecranului" @@ -4385,7 +4380,6 @@ msgstr "Sugestie de completare automată: {label}, {selectedOptionPosition} din #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Sugestie de completare automată: {label}, {selectedOptionPosition} din #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automată" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automat ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (necesită activare)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometrie" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitrate" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Alege culoarea de accent a profilului tău" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Cod:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Testare negociere codec" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emoticon" msgid "Empty favorites" msgstr "Favorite goale" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emulează codec de decodare (testare)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Conținut matur activat." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Cale de codificare" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Preferința codorului pentru noile partajări de ecran." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Codorul, SVC, fluxul secundar și presetările de bitrate" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Grupare" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast de rezervă" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (necesită activare)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Accelerarea hardware poate cauza erori de randare cu ferestrele transparente. Încearcă --disable-gpu dacă observi pâlpâiri sau imagini neclare." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Codificator hardware" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Deschide setările" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Codec software OpenH264 pe Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Poză" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Imagine în imagine" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Ferestre pop-out cu mesaje fixate" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Preferințe..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Codec preferat pentru partajarea ecranului" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Previzualizează sunetul" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Previzualizare, comportament pentru ferestre separate și miniaturi de fluxuri" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec partajare ecran" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Controalele codificatorului pentru partajarea ecranului" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Partajarea ecranului s-a încheiat" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Partajarea ecranului utilizează codificarea software ({codec}). Calitatea poate fi redusă și utilizarea procesorului poate crește. Este posibil ca GPU-ul dvs. să nu accepte codificarea hardware pentru acest codec." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Previzualizare partajare ecran" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Previzualizare comportament partajare ecran" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Social" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Codec software" @@ -30559,7 +30540,7 @@ msgstr "Flux ascuns" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Previzualizare stream" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Suspendare" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri furnizat trebuie să utilizeze HTTP sau HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Sursa partajării ecranului a încetat să trimită video, astfel încât partajarea ecranului s-a oprit." @@ -38320,6 +38301,12 @@ msgstr "Adresa URL personalizată a fost eliminată." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Adresa URL personalizată a fost setată la {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Encoderul tău video a încetat să mai encodeze cadre, așa că partajarea ecranului a fost oprită. Încearcă să partajezi din nou." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index c29ed0a98..4945ff72b 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -2764,11 +2764,6 @@ msgstr "Расширенные" msgid "Advanced video settings" msgstr "Дополнительные настройки видео" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Рекламировать ограниченный кодек декодирования для принудительного переноса издателя" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Функции Aero Snap и Snap Layouts могут перестать работать при включенной прозрачности." @@ -2990,7 +2985,7 @@ msgstr "Разрешить всем, кто может просматриват #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Разрешить AV1 для демонстрации экрана" @@ -3044,7 +3039,7 @@ msgstr "Разрешить для всех сообществ" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Разрешить H.265 (HEVC) для демонстрации экрана" @@ -4385,7 +4380,6 @@ msgstr "Подсказка: {label}, {selectedOptionPosition} из {resultCount} #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Подсказка: {label}, {selectedOptionPosition} из {resultCount} #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Автоматически" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Автоматически ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (требуется подтверждение)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Биометрия" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Битрейт" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Выберите акцентный цвет профиля" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Код:" msgid "Codec" msgstr "Кодек" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Тестирование согласования кодеков" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Эмотиконы" msgid "Empty favorites" msgstr "Избранное пусто" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Эмулировать кодек декодирования (тестирование)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Включен контент для взрослых." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Путь кодировщика" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Настройки кодирования для новых трансляций экрана." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Кодек, SVC, резервный поток и предустановки битрейта" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Группировка" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Резервная копия H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (требуется согласие)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Аппаратное ускорение может вызывать сбои рендеринга с прозрачными окнами. Попробуйте --disable-gpu, если видите мерцание или размытие." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Аппаратный кодировщик" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Открыть настройки" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264 — программный кодек для Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Фото" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Картинка в картинке" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Всплывающее окно с закрепленными сообщениями" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Картинка в картинке" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Настройки..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Предпочтительный кодек для демонстрации экрана" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Предпросмотр звука" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Предварительный просмотр, открытие в отдельном окне и поведение миниатюр потока" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Кодек демонстрации экрана" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Настройки кодека для демонстрации экрана" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Общий доступ к экрану завершен" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Демонстрация экрана использует программное кодирование ({codec}). Качество может быть снижено, а загрузка ЦП увеличена. Ваш графический процессор может не поддерживать аппаратное кодирование для этого кодека." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Предпросмотр демонстрации экрана" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Поведение предварительного просмотра экрана при совместном использовании" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Соцсети" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Аппаратный кодек" @@ -30559,7 +30540,7 @@ msgstr "Трансляция скрыта" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Предпросмотр трансляции" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Приостановить" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Указанный redirect_uri должен использовать HTTP или HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Источник трансляции экрана прекратил передачу видео, поэтому трансляция экрана была остановлена." @@ -38320,6 +38301,12 @@ msgstr "Ваш короткий URL удалён." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Ваш персонализированный URL-адрес установлен на {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Ваш видеокодер перестал кодировать кадры, поэтому демонстрация экрана была остановлена. Попробуйте начать демонстрацию снова." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po index d7d73cb93..b121c55cd 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -2764,11 +2764,6 @@ msgstr "Avancerat" msgid "Advanced video settings" msgstr "Avancerade videoinställningar" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Annonsera en begränsad codec för att tvinga fram publiceringsmigrering" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap och fönsterfästning kan sluta fungera när transparens är aktiverat." @@ -2990,7 +2985,7 @@ msgstr "Tillåt alla som kan se din fullständiga profil att se din lokala tid i #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Tillåt AV1 för skärmdelning" @@ -3044,7 +3039,7 @@ msgstr "Tillåt för alla grupper" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Tillåt H.265 (HEVC) för skärmdelning" @@ -4385,7 +4380,6 @@ msgstr "Föreslagen komplettering: {label}, {selectedOptionPosition} av {resultC #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Föreslagen komplettering: {label}, {selectedOptionPosition} av {resultC #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Automatisk" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Automatisk ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (kräver aktivering)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biometri" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bitfrekvens" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Välj accentfärg för din profil" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kod:" msgid "Codec" msgstr "Codec" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Test av codec-förhandling" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emotikoner" msgid "Empty favorites" msgstr "Tomma favoriter" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Emulera avkodningscodec (test)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Moget innehåll aktiverat." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Kodningssökväg" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Inställningar för kodaren vid nya skärmdelningar." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Kodare, SVC, reservström och förinställningar för bithastighet" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Gruppering" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast-säkerhetskopia" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (kräver aktivering)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Maskinvaruacceleration kan orsaka grafikfel med transparenta fönster. Prova --disable-gpu om du ser flimmer eller suddighet." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Hårdvaruencoder" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Öppna dina inställningar" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264-programvarukodek för Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Bild" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Bild i bild" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Fästade meddelanden (popout)" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Bild-i-bild" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Inställningar..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Föredragen codec för skärmdelning" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Förhandsgranska ljud" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Förhandsvisning, popup och beteende för strömminiatyrer" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Skärmdelnings-codec" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Inställningar för skärmdelningskodare" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Skärmdelningen avslutades" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Skärmdelningen använder programvarukodning ({codec}). Kvaliteten kan bli sämre och CPU-användningen högre. Din GPU kanske inte har stöd för hårdvarukodning för den här kodeken." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Förhandsvisning av skärmdelning" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Förhandsvisning av skärmdelning" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Socialt" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Programvaruavkodare" @@ -30559,7 +30540,7 @@ msgstr "Stream dold" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Förhandsvisning av stream" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Pausa" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Den angivna redirect_uri måste använda HTTP eller HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Skärmdelningskällan slutade skicka video, så din skärmdelning har stoppats." @@ -38320,6 +38301,12 @@ msgstr "Din anpassade URL har tagits bort." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Din anpassade URL har ställts in till {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Din videokodare slutade koda bildrutor, så din skärmdelning stoppades. Försök dela igen." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index 09582d366..f60d58b21 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -2764,11 +2764,6 @@ msgstr "ขั้นสูง" msgid "Advanced video settings" msgstr "การตั้งค่าวิดีโอขั้นสูง" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "โฆษณาตัวแปลงสัญญาณถอดรหัสแบบจำกัดเพื่อบังคับการย้ายผู้เผยแพร่" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap และ Snap Layouts อาจหยุดทำงานเมื่อเปิดใช้งานความโปร่งใส" @@ -2990,7 +2985,7 @@ msgstr "อนุญาตให้ทุกคนที่ดูโปรไฟ #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "อนุญาต AV1 สำหรับการแชร์หน้าจอ" @@ -3044,7 +3039,7 @@ msgstr "อนุญาตสำหรับทุกชุมชน" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "อนุญาต H.265 (HEVC) สำหรับการแชร์หน้าจอ" @@ -4385,7 +4380,6 @@ msgstr "คำแนะนำเติมข้อความอัตโนม #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "คำแนะนำเติมข้อความอัตโนม #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "อัตโนมัติ" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "อัตโนมัติ ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (ต้องเปิดใช้งานก่อน)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "ไบโอเมตริกซ์" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "บิตเรต" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "เลือกสีโปรไฟล์ของคุณ" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "รหัส:" msgid "Codec" msgstr "ตัวแปลงสัญญาณ" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "การทดสอบการเจรจาโคเดก" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "อิโมติคอน" msgid "Empty favorites" msgstr "รายการโปรดว่างเปล่า" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "จำลองตัวแปลงรหัสถอดรหัส (ทดสอบ)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "เปิดใช้งานเนื้อหาสำหรับผ #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "เส้นทางตัวเข้ารหัส" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "การตั้งค่าตัวเข้ารหัสสำหรับแชร์หน้าจอใหม่" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "ตัวเข้ารหัส, SVC, สตรีมสำรอง และค่าที่ตั้งไว้ล่วงหน้าสำหรับบิตเรต" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "การจัดกลุ่ม" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "สำรอง H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (ต้องสมัครสมาชิกก่อน)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "การเร่งฮาร์ดแวร์อาจทำให้เกิดข้อผิดพลาดในการแสดงผลกับหน้าต่างโปร่งใส ลองใช้ --disable-gpu หากคุณเห็นการกะพริบหรือภาพซ้อน" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "ตัวเข้ารหัสฮาร์ดแวร์" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "เปิดการตั้งค่า" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "โคเดกซอฟต์แวร์ OpenH264 บน Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "รูปภาพ" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "รูปภาพในรูปภาพ" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "ป๊อปเอาต์ของหมุด" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "PiP" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "การตั้งค่า..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "ตัวแปลงสัญญาณที่ต้องการสำหรับการแชร์หน้าจอ" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "ลองฟังเสียง" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "ดูตัวอย่าง พฤติกรรมการป็อปอัพ และพฤติกรรมของภาพขนาดย่อสตรีม" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "ตัวแปลงสัญญาณการแชร์หน้าจอ" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "การควบคุมตัวเข้ารหัสสำหรับการแชร์หน้าจอ" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "การแชร์หน้าจอสิ้นสุดลง" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "การแชร์หน้าจอใช้การเข้ารหัสซอฟต์แวร์ ({codec}) คุณภาพอาจลดลงและการใช้งาน CPU อาจเพิ่มขึ้น GPU ของคุณอาจไม่รองรับการเข้ารหัสฮาร์ดแวร์สำหรับตัวแปลงสัญญาณนี้" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "ตัวอย่างการแชร์หน้าจอ" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "พฤติกรรมการแสดงตัวอย่างการแชร์หน้าจอ" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "โซเชียล" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "ตัวเข้ารหัสซอฟต์แวร์" @@ -30559,7 +30540,7 @@ msgstr "ซ่อนสตรีมแล้ว" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "ตัวอย่างสตรีม" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "ระงับชั่วคราว" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri ที่ระบุต้องใช้ HTTP หรือ HTTPS" #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "แหล่งที่มาของการแชร์หน้าจอหยุดส่งวิดีโอ ดังนั้นการแชร์หน้าจอก็จะหยุดลง" @@ -38320,6 +38301,12 @@ msgstr "URL เฉพาะของคุณถูกนำออกแล้ msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "URL ที่กำหนดเองของคุณถูกตั้งค่าเป็น {inviteEndpoint}/{vanitySlug} แล้ว" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "ตัวเข้ารหัสวิดีโอของคุณหยุดการเข้ารหัสเฟรม จึงหยุดการแชร์หน้าจอของคุณแล้ว ลองแชร์อีกครั้ง" + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index 3f80417f5..fa5eb1b05 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -2764,11 +2764,6 @@ msgstr "Gelişmiş" msgid "Advanced video settings" msgstr "Gelişmiş video ayarları" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Yayıncı geçişini zorlamak için sınırlı bir kod çözme kodeği reklamı yap" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Şeffaflık etkinleştirildiğinde Aero Snap ve Snap Düzenleri çalışmayı durdurabilir." @@ -2990,7 +2985,7 @@ msgstr "Profilinizin tamamını görüntüleyebilen herkesin yerel saatinizi gö #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Ekran paylaşımı için AV1'e izin ver" @@ -3044,7 +3039,7 @@ msgstr "Tüm topluluklara izin ver" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Ekran paylaşımı için H.265 (HEVC) kullanılmasına izin ver" @@ -4385,7 +4380,6 @@ msgstr "Otomatik tamamlama önerisi: {label}, {resultCount} sonuç içinde {sele #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Otomatik tamamlama önerisi: {label}, {resultCount} sonuç içinde {sele #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Otomatik" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Otomatik ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (katılım gerektirir)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Biyometrik veriler" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Bit hızı" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Profil vurgu renginizi seçin" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Kod:" msgid "Codec" msgstr "Kodek" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Kodek anlaşması testi" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Emojiler" msgid "Empty favorites" msgstr "Favoriler boş" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Kod çözme kodeğini öykün (test)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Yetişkinlere uygun içerik etkinleştirildi." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Kodlayıcı yolu" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Yeni ekran paylaşımları için kodlayıcı tercihi." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Kodlayıcı, SVC, yedek akış ve bit hızı ön ayarları" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Gruplama" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 simulcast yedeklemesi" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (katılım gerektirir)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Donanım hızlandırma, şeffaf pencerelerde görüntüleme sorunlarına neden olabilir. Titreme veya bulanıklık görüyorsanız --disable-gpu komutunu deneyin." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Donanım kodlayıcı" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Ayarlarınızı açın" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Linux'ta OpenH264 yazılım kodeki için ayarlar arama girişi açıklaması. Bu ayar arama girişinin neyi kontrol ettiğinin tek satırlık özeti." @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Resim" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Resim içinde resim" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Sabitlenmişler açılır penceresi" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Resim içinde resim" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Tercihler..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Tercih edilen ekran paylaşımı kodeği" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Sesi önizle" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Önizleme, açılır pencere ve akış küçük resim davranışı" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Ekran paylaşımı kodeği" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Ekran paylaşımı kodlayıcı ayarları" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Ekran paylaşımı sona erdi" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Ekran paylaşımı yazılım kodlaması kullanıyor ({codec}). Kalite düşebilir ve CPU kullanımı artabilir. GPU'nuz bu kodek için donanım kodlamayı desteklemeyebilir." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Ekran paylaşımı önizlemesi" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Ekran paylaşımı önizleme davranışı" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Sosyal" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Yazılım kodlayıcı" @@ -30559,7 +30540,7 @@ msgstr "Yayın gizlendi" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Yayın önizlemesi" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Askıya al" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Sağlanan redirect_uri HTTP veya HTTPS kullanmalıdır." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Ekran paylaşımı kaynağı video göndermeyi durdurdu, bu nedenle ekran paylaşımınız durduruldu." @@ -38320,6 +38301,12 @@ msgstr "Özel URL'niz kaldırıldı." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Özel URL'niz {inviteEndpoint}/{vanitySlug} olarak ayarlandı" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Video kodlayıcınız kare kodlamayı durdurduğu için ekran paylaşımınız durduruldu. Lütfen tekrar paylaşmayı deneyin." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index 74cfa334a..0d141c081 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -2764,11 +2764,6 @@ msgstr "Додатково" msgid "Advanced video settings" msgstr "Розширені налаштування відео" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Рекламувати обмежений кодек декодування для примусової міграції видавця" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Функції Aero Snap і Snap Layouts можуть не працювати, якщо ввімкнено прозорість." @@ -2990,7 +2985,7 @@ msgstr "Дозволити будь-кому, хто може перегляда #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Дозволити AV1 для демонстрації екрана" @@ -3044,7 +3039,7 @@ msgstr "Дозволити для всіх спільнот" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Дозволити H.265 (HEVC) для спільного доступу до екрана" @@ -4385,7 +4380,6 @@ msgstr "Пропозиція автозаповнення: {label}, {selectedOpt #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Пропозиція автозаповнення: {label}, {selectedOpt #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Автоматично" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Автоматично ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (потрібна згода)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Біометрія" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Бітрейт" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Виберіть акцентний колір профілю" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Код:" msgid "Codec" msgstr "Кодек" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Тестування узгодження кодеків" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Емотикони" msgid "Empty favorites" msgstr "Обрані відсутні" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Емулювати кодек декодування (тестування)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Увімкнено контент для дорослих." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Шлях кодувальника" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Налаштування кодека для нових трансляцій екрана." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Налаштування кодека, SVC, резервний потік і бітрейт." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Групування" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Резервна трансляція H.264" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (потрібно увімкнути)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Апаратне прискорення може спричинити збої візуалізації з прозорими вікнами. Спробуйте --disable-gpu, якщо бачите мерехтіння або розмиття." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Апаратний кодек" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Відкрийте налаштування" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Апаратний кодек OpenH264 для Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Зображення" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Картинка в картинці" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Закріплені повідомлення (спливаюче вікно)" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Картинка в картинці" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Параметри..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Бажаний кодек для демонстрації екрана" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Попередній перегляд звуку" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Попередній перегляд, відкриття у новому вікні та поведінка мініатюр потоку" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Кодек для демонстрації екрана" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Керування налаштуваннями кодека для демонстрації екрана" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Трансляцію екрана завершено" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Спільний доступ до екрана використовує програмне кодування ({codec}). Якість може бути знижена, а використання ЦП — збільшене. Ваш графічний процесор може не підтримувати апаратне кодування для цього кодека." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Попередній перегляд демонстрації екрана" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Попередній перегляд поведінки спільного доступу до екрана" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Соціальні мережі" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Апаратний кодек" @@ -30559,7 +30540,7 @@ msgstr "Трансляцію приховано" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Попередній перегляд трансляції" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Призупинити" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "Наданий redirect_uri має використовувати HTTP або HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Джерело спільного доступу до екрана припинило надсилання відео, тому спільний доступ до вашого екрана було зупинено." @@ -38320,6 +38301,12 @@ msgstr "Вашу власну URL-адресу видалено." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "Вашу спеціальну URL-адресу встановлено на {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Ваш відеокодер перестав кодувати кадри, тому спільний доступ до екрана було зупинено. Спробуйте поділитися знову." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index 8258f95c6..145c707f1 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -2764,11 +2764,6 @@ msgstr "Nâng cao" msgid "Advanced video settings" msgstr "Cài đặt video nâng cao" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "Quảng cáo codec giải mã giới hạn để buộc di chuyển nhà xuất bản" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "Aero Snap và Snap Layouts có thể ngừng hoạt động khi bật độ trong suốt." @@ -2990,7 +2985,7 @@ msgstr "Cho phép bất kỳ ai có thể xem hồ sơ đầy đủ của bạn #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "Cho phép AV1 khi chia sẻ màn hình" @@ -3044,7 +3039,7 @@ msgstr "Cho phép tất cả cộng đồng" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "Cho phép H.265 (HEVC) để chia sẻ màn hình" @@ -4385,7 +4380,6 @@ msgstr "Gợi ý tự động hoàn tất: {label}, {selectedOptionPosition} tr #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "Gợi ý tự động hoàn tất: {label}, {selectedOptionPosition} tr #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "Tự động" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "Tự động ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (yêu cầu bật tùy chọn)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "Sinh trắc học" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "Tốc độ bit" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "Chọn màu nhấn cho hồ sơ của bạn" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "Cisco" @@ -7432,11 +7425,6 @@ msgstr "Mã:" msgid "Codec" msgstr "Bộ mã hóa/giải mã" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "Kiểm tra đàm phán codec" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "Biểu tượng cảm xúc" msgid "Empty favorites" msgstr "Mục yêu thích trống" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "Mô phỏng codec giải mã (thử nghiệm)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "Đã bật nội dung nhạy cảm." #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "Đường dẫn bộ mã hóa" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "Ưu tiên bộ mã hóa cho các lần chia sẻ màn hình mới." #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "Bộ mã hóa, SVC, luồng dự phòng và cài đặt tốc độ bit." @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "Nhóm" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "Dự phòng H.264 simulcast" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (yêu cầu bật tùy chọn)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "Tăng tốc phần cứng có thể gây ra lỗi hiển thị với cửa sổ trong suốt. Hãy thử --disable-gpu nếu bạn thấy hiện tượng nhấp nháy hoặc nhòe." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "Bộ mã hóa phần cứng" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "Mở cài đặt của bạn" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "Mở codec phần mềm OpenH264 trên Linux" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "Ảnh" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "Ảnh trong ảnh" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "Ghim bật lên" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "Ảnh trong ảnh" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "Tùy chọn..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "Codec chia sẻ màn hình ưu tiên" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "Nghe thử âm thanh" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "Xem trước, mở rộng và hành vi của hình thu nhỏ luồng phát" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "Codec chia sẻ màn hình" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "Điều khiển bộ mã hóa chia sẻ màn hình" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "Chia sẻ màn hình đã kết thúc" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "Chia sẻ màn hình đang dùng mã hóa phần mềm ({codec}). Chất lượng có thể giảm và mức sử dụng CPU tăng. GPU của bạn có thể không hỗ trợ mã hóa phần cứng cho codec này." #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "Xem trước chia sẻ màn hình" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "Hành vi xem trước khi chia sẻ màn hình" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "Mạng xã hội" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "Bộ mã hóa phần mềm" @@ -30559,7 +30540,7 @@ msgstr "Đã ẩn luồng" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "Xem trước luồng" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "Tạm dừng" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "redirect_uri được cung cấp phải dùng HTTP hoặc HTTPS." #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Nguồn chia sẻ màn hình đã ngừng gửi video, vì vậy quá trình chia sẻ màn hình của bạn đã dừng." @@ -38320,6 +38301,12 @@ msgstr "URL tùy chỉnh của bạn đã bị gỡ bỏ." msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "URL tùy chỉnh của bạn đã được đặt thành {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "Bộ mã hóa video của bạn đã ngừng mã hóa khung hình, vì vậy lượt chia sẻ màn hình của bạn đã bị dừng. Hãy thử chia sẻ lại." + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po index e8fc182a9..ee1180154 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -2764,11 +2764,6 @@ msgstr "高级" msgid "Advanced video settings" msgstr "高级视频设置" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "宣传一个受限的解码编解码器以强制迁移发布者" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "启用透明效果时,Aero Snap 和 Snap Layouts 可能无法正常工作。" @@ -2990,7 +2985,7 @@ msgstr "允许任何能查看您完整个人资料的用户看到您的个人资 #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "允许 AV1 用于屏幕共享" @@ -3044,7 +3039,7 @@ msgstr "允许所有社群" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "允许使用 H.265 (HEVC) 进行屏幕共享" @@ -4385,7 +4380,6 @@ msgstr "自动填充建议:{label},{selectedOptionPosition}/{resultCount}" #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "自动填充建议:{label},{selectedOptionPosition}/{resultCount}" #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "自动" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "自动 ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1(需要选择加入)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "生物识别" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "比特率" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "选择你的资料页主题色" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "思科" @@ -7432,11 +7425,6 @@ msgstr "代码:" msgid "Codec" msgstr "编解码器" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "编解码器协商测试" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "表情符号" msgid "Empty favorites" msgstr "收藏为空" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "模拟解码编解码器(测试)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "已启用成人内容。" #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "编码器路径" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "新屏幕共享的首选编码器。" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "编码器、SVC、备用流和比特率预设。" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "分组" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 同播备份" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265(需要选择加入)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "硬件加速可能会导致透明窗口出现渲染故障。如果出现闪烁或涂抹,请尝试使用 --disable-gpu。" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "硬件编码器" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "打开设置" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "在 Linux 上启用 OpenH264 软件编解码器" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "图片" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "画中画" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "置顶弹窗" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "画中画" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "偏好设置..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "首选屏幕共享编解码器" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "试听提示音" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "预览、弹出和流式缩略图行为" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "屏幕共享编解码器" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "屏幕共享编码器设置" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "屏幕共享已结束" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "屏幕共享正在使用软件编码器 ({codec})。画面质量可能会降低,CPU 占用率可能会增加。您的 GPU 可能不支持此编码器的硬件编码。" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "屏幕共享预览" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "屏幕共享预览行为" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "社交" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "软件编码器" @@ -30559,7 +30540,7 @@ msgstr "屏幕共享已隐藏" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "直播预览" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "暂停" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "提供的 redirect_uri 必须使用 HTTP 或 HTTPS。" #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "屏幕共享源已停止发送视频,因此您的屏幕共享已停止。" @@ -38320,6 +38301,12 @@ msgstr "你的自定义URL已被移除。" msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "你的专属网址已设置为 {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "您的视频编码器停止编码帧,因此您的屏幕共享已停止。请重试共享。" + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po index 5ae16b2f5..b12b11447 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -2764,11 +2764,6 @@ msgstr "進階" msgid "Advanced video settings" msgstr "進階影片設定" -#. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 -msgid "Advertise a capped decode codec to force publisher migration" -msgstr "廣告一個有上限的解碼轉碼器,以強制發佈者遷移" - #: src/features/theme_studio/sections/ThemeStudioSettingsSection.tsx:300 msgid "Aero Snap and Snap Layouts can stop working while transparency is enabled." msgstr "啟用透明度時,Aero Snap 和 Snap Layouts 可能會停止運作。" @@ -2990,7 +2985,7 @@ msgstr "允許任何可檢視您完整個人檔案的人,查看您個人檔案 #. Settings search entry label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. #. Switch label for the AV1 screen-share opt-in. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:191 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:183 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:88 msgid "Allow AV1 for screen sharing" msgstr "允許 AV1 用於螢幕共享" @@ -3044,7 +3039,7 @@ msgstr "允許所有社群" #. Settings search entry label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. #. Switch label for the H.265/HEVC screen-share opt-in. H.265 and HEVC are codec names and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:195 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:187 #: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:92 msgid "Allow H.265 (HEVC) for screen sharing" msgstr "允許使用 H.265 (HEVC) 進行螢幕分享" @@ -4385,7 +4380,6 @@ msgstr "自動完成建議:{label},{selectedOptionPosition} / {resultCount}" #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. -#. Option label for the emulated decode codec select. Means advertise true decode support. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. #. Voice region picker option label meaning 'let Fluxer pick the best region automatically'. @@ -4393,7 +4387,6 @@ msgstr "自動完成建議:{label},{selectedOptionPosition} / {resultCount}" #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:64 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:104 #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:144 -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:168 #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts:263 #: src/features/voice/components/VoiceRegionSelector.tsx:16 #: src/features/voice/components/VoiceSettingsMenus.tsx:91 @@ -4407,7 +4400,7 @@ msgid "Automatic" msgstr "自動" #. Option label for the screen-share codec select. codec is the automatically selected codec label. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:177 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:169 msgid "Automatic ({codec})" msgstr "自動 ({codec})" @@ -4507,7 +4500,7 @@ msgid "AV1" msgstr "AV1" #. Option label for the screen-share codec select while the AV1 opt-in is off and the option is disabled. AV1 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:181 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 msgid "AV1 (requires opt-in)" msgstr "AV1 (需要選擇加入)" @@ -4956,7 +4949,7 @@ msgid "Biometrics" msgstr "生物辨識" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:181 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 msgid "Bitrate" msgstr "位元率" @@ -6820,7 +6813,7 @@ msgid "Choose your profile accent color" msgstr "選擇您的個人檔案主題顏色" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 msgid "Cisco" msgstr "思科" @@ -7432,11 +7425,6 @@ msgstr "代碼:" msgid "Codec" msgstr "編解碼器" -#. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:117 -msgid "Codec negotiation testing" -msgstr "轉碼器協商測試" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/SharedDescriptors.ts:17 @@ -12585,13 +12573,6 @@ msgstr "表情符號" msgid "Empty favorites" msgstr "沒有最愛項目" -#. Label for an advanced select that caps the best video codec this client advertises it can decode. -#. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:164 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 -msgid "Emulate decode codec (testing)" -msgstr "模擬解碼轉碼器 (測試中)" - #. Button label in the Linux Wayland input-access nagbar. #. Button label in the keybind settings system-wide shortcuts section. #. Button or menu action label in the invites disable invites button. Keep it concise. @@ -12893,7 +12874,7 @@ msgstr "已啟用成人內容。" #. Label for an advanced screen-share select. Refers to hardware or software video encoding. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:56 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 msgid "Encoder path" msgstr "編碼器路徑" @@ -12903,7 +12884,7 @@ msgid "Encoder preference for new screen shares." msgstr "新螢幕分享的編碼器偏好設定。" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:185 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 msgid "Encoder, SVC, backup stream, and bitrate presets" msgstr "編碼器、SVC、備份串流和位元速率預設值" @@ -15691,7 +15672,7 @@ msgid "Grouping" msgstr "分組" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:113 msgid "H.264" msgstr "H.264" @@ -15706,7 +15687,7 @@ msgid "H.264 simulcast backup" msgstr "H.264 同步串流備份" #. Option label for the screen-share codec select while the HEVC opt-in is off and the option is disabled. H.265 is a codec name and should stay literal. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:186 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:178 msgid "H.265 (requires opt-in)" msgstr "H.265 (需要選擇加入)" @@ -15762,7 +15743,7 @@ msgid "Hardware acceleration can cause rendering glitches with transparent windo msgstr "硬體加速可能會導致透明視窗出現渲染異常。如果看到閃爍或塗抹,請嘗試使用 --disable-gpu。" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:173 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 msgid "Hardware encoder" msgstr "硬體編碼器" @@ -22665,7 +22646,7 @@ msgid "Open your settings" msgstr "開啟設定" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:121 msgid "OpenH264 software codec on Linux" msgstr "OpenH264 軟體編解碼器(Linux)" @@ -23466,7 +23447,7 @@ msgid "Picture" msgstr "圖片" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:133 msgid "Picture in picture" msgstr "子母畫面" @@ -23586,7 +23567,7 @@ msgid "Pins popout" msgstr "釘選彈出視窗" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 msgid "PiP" msgstr "子母畫面" @@ -23820,7 +23801,7 @@ msgid "Preferences..." msgstr "偏好設定..." #. Accessible label for the advanced screen-share codec preference select. -#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:173 +#: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx:165 msgid "Preferred screen share codec" msgstr "偏好的螢幕分享轉碼器" @@ -23994,7 +23975,7 @@ msgid "Preview sound" msgstr "預覽音效" #. Settings search entry description. One-line summary of what the settings search entry controls. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:145 msgid "Preview, popout, and stream thumbnail behavior" msgstr "預覽、彈出和串流縮圖行為" @@ -27010,12 +26991,12 @@ msgid "Screen share codec" msgstr "螢幕分享編解碼器" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:161 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:149 msgid "Screen share encoder controls" msgstr "螢幕分享編碼器控制項" #. Title of a modal shown when an active screen share stops unexpectedly. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:97 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:99 msgctxt "screen-share" msgid "Screen share ended" msgstr "螢幕分享已結束" @@ -27031,12 +27012,12 @@ msgid "Screen share is using software encoding ({codec}). Quality may be reduced msgstr "螢幕分享正在使用軟體編碼 ({codec})。畫質可能會降低,且 CPU 使用率會增加。您的 GPU 可能不支援此編解碼器的硬體編碼。" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:129 msgid "Screen share preview" msgstr "螢幕分享預覽" #. Settings search entry label. Names the settings search entry in the settings UI. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:137 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:125 msgid "Screen share preview behavior" msgstr "螢幕分享預覽行為" @@ -29586,7 +29567,7 @@ msgid "Social" msgstr "社群" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:169 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:157 msgid "Software encoder" msgstr "軟體編碼器" @@ -30559,7 +30540,7 @@ msgstr "已隱藏串流" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the user settings voice activity card. Keep it concise. #: src/features/user/components/profile/VoiceActivityCard.tsx:90 -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:153 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:141 #: src/features/voice/components/StreamWatchHoverCard.tsx:21 msgid "Stream preview" msgstr "直播預覽" @@ -30778,7 +30759,7 @@ msgid "Suspend" msgstr "停用" #. Settings search synonym. Used to match this term when the user types it in the settings search bar. -#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:177 +#: src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts:165 msgid "SVC" msgstr "SVC" @@ -31594,7 +31575,7 @@ msgid "The provided redirect_uri must use HTTP or HTTPS." msgstr "提供的 redirect_uri 必須使用 HTTP 或 HTTPS。" #. Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls. -#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:102 +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:104 msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "螢幕分享來源已停止傳送視訊,因此您的螢幕分享已停止。" @@ -38320,6 +38301,12 @@ msgstr "您的自訂網址已移除。" msgid "Your vanity URL has been set to {inviteEndpoint}/{vanitySlug}" msgstr "您的自訂網址已設為 {inviteEndpoint}/{vanitySlug}" +#. Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop. +#: src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx:110 +msgctxt "screen-share" +msgid "Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again." +msgstr "您的視訊編碼器停止編碼影格,因此您的螢幕分享已停止。請再試一次分享。" + #. Label for the YouTube enrichment service toggle in the setup wizard. #: src/features/app/components/setup/SetupWizardSteps.tsx:285 msgid "YouTube enrichment" diff --git a/fluxer_app/src/features/user/components/modals/tabs/AdvancedSettingDirectControls.tsx b/fluxer_app/src/features/user/components/modals/tabs/AdvancedSettingDirectControls.tsx index 8836a224d..bf4705cd3 100644 --- a/fluxer_app/src/features/user/components/modals/tabs/AdvancedSettingDirectControls.tsx +++ b/fluxer_app/src/features/user/components/modals/tabs/AdvancedSettingDirectControls.tsx @@ -40,7 +40,6 @@ import { } from '@app/features/user/components/modals/tabs/advanced_settings_tab/AdvancedDesktopControls'; import {UnreadBadgeCustomizationControl} from '@app/features/user/components/modals/tabs/advanced_settings_tab/AdvancedExperimentalControls'; import { - EmulatedDecodeCodecCapControl, OpenH264Control, ScreenShareAv1OptInControl, ScreenShareCodecControl, @@ -87,7 +86,6 @@ export const DIRECT_CONTROL_ITEM_IDS = new Set([ 'voice-video-screen-share-codec', 'voice-video-screen-share-av1-opt-in', 'voice-video-screen-share-hevc-opt-in', - 'voice-video-emulated-decode-codec-cap', 'voice-video-openh264-codec', 'voice-video-screen-share-preview-behavior', 'voice-video-screen-share-encoder-controls', @@ -281,10 +279,6 @@ export const AdvancedSettingControl = observer(({item}: {item: SearchableSetting return ( ); - case 'voice-video-emulated-decode-codec-cap': - return ( - - ); case 'voice-video-openh264-codec': return ( diff --git a/fluxer_app/src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx b/fluxer_app/src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx index ab465b013..fa6f95f1e 100644 --- a/fluxer_app/src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx +++ b/fluxer_app/src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx @@ -161,14 +161,6 @@ const CONFIGURE_DESCRIPTOR = msg({ message: 'Configure', comment: 'Button label that opens a dedicated advanced settings modal for configuring screen-share encoder controls.', }); -const DECODE_CODEC_CAP_DESCRIPTOR = msg({ - message: 'Emulate decode codec (testing)', - comment: 'Label for an advanced select that caps the best video codec this client advertises it can decode.', -}); -const DECODE_CODEC_CAP_AUTO_DESCRIPTOR = msg({ - message: 'Automatic', - comment: 'Option label for the emulated decode codec select. Means advertise true decode support.', -}); const PREFERRED_SCREEN_SHARE_CODEC_DESCRIPTOR = msg({ message: 'Preferred screen share codec', @@ -269,29 +261,6 @@ export const ScreenShareHevcOptInControl = observer(() => { ); }); -export const EmulatedDecodeCodecCapControl = observer(() => { - const {i18n} = useLingui(); - const options: ReadonlyArray> = [ - {value: 'auto', label: i18n._(DECODE_CODEC_CAP_AUTO_DESCRIPTOR)}, - {value: 'av1', label: 'AV1'}, - {value: 'h265', label: 'H.265'}, - {value: 'vp9', label: 'VP9'}, - {value: 'h264', label: 'H.264'}, - {value: 'vp8', label: 'VP8'}, - ]; - return ( - - value={VoiceSettings.emulatedDecodeVideoCodecCap} - options={options} - onChange={(value) => VoiceSettingsCommands.update({emulatedDecodeVideoCodecCap: value})} - density="compact" - isSearchable={false} - aria-label={i18n._(DECODE_CODEC_CAP_DESCRIPTOR)} - data-flx="user.advanced-settings-tab.select.emulated-decode-codec-cap" - /> - ); -}); - export const OpenH264Control = observer(() => { const {i18n} = useLingui(); const handleChange = useCallback((value: boolean) => { diff --git a/fluxer_app/src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts b/fluxer_app/src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts index 22d1894c2..e43096e58 100644 --- a/fluxer_app/src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts +++ b/fluxer_app/src/features/user/components/settings_utils/search_index/VoiceVideoIndex.ts @@ -110,18 +110,6 @@ const OPENH264_VIDEO_CODEC_DESCRIPTOR = msg({ message: 'OpenH264 video codec', comment: 'Settings search entry label. Names the settings search entry in the settings UI.', }); -const EMULATE_DECODE_CODEC_DESCRIPTOR = msg({ - message: 'Emulate decode codec (testing)', - comment: 'Settings search entry label. Names the settings search entry in the settings UI.', -}); -const CODEC_NEGOTIATION_TESTING_DESCRIPTOR = msg({ - message: 'Codec negotiation testing', - comment: 'Settings search synonym. Used to match this term when the user types it in the settings search bar.', -}); -const ADVERTISE_A_CAPPED_DECODE_CODEC_TO_FORCE_PUBLISHER_MIGRATION_DESCRIPTOR = msg({ - message: 'Advertise a capped decode codec to force publisher migration', - comment: 'Settings search entry description. One-line summary of what the settings search entry controls.', -}); const H264_DESCRIPTOR = msg({ message: 'H.264', comment: 'Settings search synonym. Used to match this term when the user types it in the settings search bar.', @@ -248,16 +236,6 @@ export const voiceVideoIndex: Array = [ audience: 'advanced', tags: ['media', 'voice'], }, - { - id: 'voice-video-emulated-decode-codec-cap', - tabType: 'voice_video', - sectionId: 'video', - label: EMULATE_DECODE_CODEC_DESCRIPTOR, - keywords: [CODEC_NEGOTIATION_TESTING_DESCRIPTOR, CODEC_DESCRIPTOR, VIDEO_CODEC_DESCRIPTOR], - description: ADVERTISE_A_CAPPED_DECODE_CODEC_TO_FORCE_PUBLISHER_MIGRATION_DESCRIPTOR, - audience: 'advanced', - tags: ['media', 'voice'], - }, { id: 'voice-video-openh264-codec', tabType: 'voice_video', diff --git a/fluxer_app/src/features/voice/commands/VoiceSettingsCommands.ts b/fluxer_app/src/features/voice/commands/VoiceSettingsCommands.ts index 3ec003e97..09cd6c549 100644 --- a/fluxer_app/src/features/voice/commands/VoiceSettingsCommands.ts +++ b/fluxer_app/src/features/voice/commands/VoiceSettingsCommands.ts @@ -1,6 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import {Logger} from '@app/features/platform/utils/AppLogger'; import MediaEngine from '@app/features/voice/engine/MediaEngineFacade'; import VoiceSettings, { type CameraResolution, @@ -17,8 +16,6 @@ import type { } from '@app/features/voice/utils/CodecCapabilityDetector'; import {getActiveInputDeviceLabel, type VoiceProcessingMode} from '@app/features/voice/utils/VoiceProcessingProfile'; -const logger = new Logger('VoiceSettingsCommands'); - type VoiceSettingsPatch = Partial<{ inputDeviceId: string; outputDeviceId: string; @@ -62,7 +59,6 @@ type VoiceSettingsPatch = Partial<{ preferredScreenShareCodec: CodecPreference; screenShareAv1OptIn: boolean; screenShareHevcOptIn: boolean; - emulatedDecodeVideoCodecCap: CodecPreference; screenShareContentHint: ScreenShareContentHint; screenShareEncoderMode: ScreenShareEncoderMode; screenShareSoftwareQuality: ScreenShareSoftwareQuality; @@ -105,17 +101,6 @@ const CAMERA_BACKGROUND_REFRESH_KEYS: Array = [ 'mirrorCamera', ]; const CAMERA_CAPTURE_REFRESH_KEYS: Array = ['cameraResolution', 'videoDeviceId']; -const SCREEN_SHARE_CODEC_REFRESH_KEYS: Array = [ - 'preferredScreenShareCodec', - 'screenShareAv1OptIn', - 'screenShareHevcOptIn', - 'screenShareEncoderMode', - 'screenShareSoftwareQuality', - 'screenShareScalabilityMode', - 'screenShareBackupCodecMode', - 'openH264Enabled', -]; - function refreshMicrophone(): void { MediaEngine.refreshMicrophoneFromSettings(); } @@ -151,14 +136,6 @@ function shouldRefreshCameraCapture( return CAMERA_CAPTURE_REFRESH_KEYS.some((key) => settings[key] !== undefined && before[key] !== after[key]); } -function shouldRefreshScreenShareCodecNegotiation(settings: VoiceSettingsPatch): boolean { - return SCREEN_SHARE_CODEC_REFRESH_KEYS.some((key) => settings[key] !== undefined); -} - -async function refreshScreenShareCodecNegotiation(): Promise { - await MediaEngine.refreshActiveScreenShareCodecNegotiation(); -} - function applyUpdatedVoiceSettings( settings: VoiceSettingsPatch, refreshInput: boolean, @@ -186,11 +163,6 @@ function applyUpdatedVoiceSettings( if (shouldRefreshCameraCapture(settings, cameraCaptureBefore, readCameraCaptureRefreshValues())) { refreshCameraCapture(); } - if (shouldRefreshScreenShareCodecNegotiation(settings)) { - void refreshScreenShareCodecNegotiation().catch((error) => { - logger.warn('Failed to refresh active screen share codec negotiation after settings update', {error}); - }); - } } export function setVoiceProcessingModeForDeviceLabel(label: string, mode: VoiceProcessingMode): void { diff --git a/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts b/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts index 3da13f881..14ddbe8b1 100644 --- a/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts +++ b/fluxer_app/src/features/voice/engine/MediaEngineFacade.ts @@ -58,7 +58,6 @@ import { saveCurrentVoiceSessionRestoreSnapshot, type VoiceSessionRestoreSyncHandle, } from '@app/features/voice/engine/media_engine_facade/VoiceSessionRestoreSync'; -import ScreenShareCodecNegotiation from '@app/features/voice/engine/ScreenShareCodecNegotiation'; import ScreenSharePublicationMigration from '@app/features/voice/engine/ScreenSharePublicationMigration'; import {Store, useStoreVersion} from '@app/features/voice/engine/Store'; import {shouldMoveToAfkOnTick} from '@app/features/voice/engine/VoiceAfkTracking'; @@ -101,11 +100,6 @@ import { } from '@app/features/voice/engine/VoiceStreamWatchState'; import {type VoiceConnectionQuality, VoiceTrackSource} from '@app/features/voice/engine/VoiceTrackSource'; import {bindVoiceEngineV2AppAudioPreferencesSync} from '@app/features/voice/engine/v2/VoiceEngineV2AppAudioPreferencesSyncBinding'; -import {getLocalDecodableVideoCodecs} from '@app/features/voice/engine/v2/VoiceEngineV2AppCodecCapability'; -import { - computeVoiceEngineV2WatchedStreamGossip, - ingestVoiceEngineV2CodecGossip, -} from '@app/features/voice/engine/v2/VoiceEngineV2AppCodecGossipAdapter'; import voiceEngineV2AppConnectionHostAdapter, { type VoiceServerUpdateData, } from '@app/features/voice/engine/v2/VoiceEngineV2AppConnectionHostAdapter'; @@ -149,7 +143,6 @@ import VoiceCallLayout from '@app/features/voice/state/VoiceCallLayout'; import VoiceRegionTeleport from '@app/features/voice/state/VoiceRegionTeleport'; import VoiceSessionRestore, {type VoiceSessionRestoreSnapshot} from '@app/features/voice/state/VoiceSessionRestore'; import VoiceSettings from '@app/features/voice/state/VoiceSettings'; -import type {CodecPreference} from '@app/features/voice/utils/CodecCapabilityDetector'; import {setNativeAudioCaptureBridgeLifecycleBridge} from '@app/features/voice/utils/NativeAudioCaptureBridge'; import {areOrderedStringArraysEqual} from '@app/features/voice/utils/StringArrayUtils'; import {buildVoiceParticipantIdentity} from '@app/features/voice/utils/VoiceParticipantIdentity'; @@ -171,29 +164,22 @@ import type { VoiceEngineV2DisconnectReason, VoiceEngineV2GatewayVoiceState, VoiceEngineV2LatencyDataPoint, - VoiceEngineV2LocalStreamSource, VoiceEngineV2MicrophoneOptions, VoiceEngineV2Model, VoiceEngineV2PerTrackStats, VoiceEngineV2Snapshot, VoiceEngineV2StatsSample, VoiceEngineV2TransportInfo, - VoiceEngineV2VideoCodec, VoiceEngineV2VoiceStats, } from '@fluxer/voice_engine_v2'; -import { - encodeVoiceEngineV2CodecGossip, - shouldApplyGatewayVoiceStateEcho, - VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC, -} from '@fluxer/voice_engine_v2'; +import {shouldApplyGatewayVoiceStateEcho} from '@fluxer/voice_engine_v2'; import {type I18n, i18n as linguiI18n, type MessageDescriptor} from '@lingui/core'; -import { - type ConnectionQuality as LiveKitConnectionQuality, - type Participant, - type Room, - RoomEvent, - type ScreenShareCaptureOptions, - type TrackPublishOptions, +import type { + ConnectionQuality as LiveKitConnectionQuality, + Participant, + Room, + ScreenShareCaptureOptions, + TrackPublishOptions, } from 'livekit-client'; import {makeObservable, observable} from 'mobx'; @@ -278,14 +264,8 @@ function buildRoomEventDependencies(facade: { didChangeLocalState, publication, ), - isScreenShareCodecRepublishInFlight: () => - voiceEngineV2AppScreenShareExecutionAdapter.isScreenShareCodecRepublishInFlight(), - renegotiateActiveScreenShareCodec: (activeRoom, selection) => - voiceEngineV2AppScreenShareExecutionAdapter.renegotiateActiveScreenShareCodec( - activeRoom, - selection.codec, - selection.reason, - ), + isScreenSharePublicationReplaceInFlight: () => + voiceEngineV2AppScreenShareExecutionAdapter.isScreenSharePublicationReplaceInFlight(), }, subscriptions: { isScreenShareSubscribed: (participantIdentity) => @@ -336,17 +316,9 @@ class MediaEngineFacade extends Store { private voiceSessionRestoreSync: VoiceSessionRestoreSyncHandle | null = null; private outputDeviceSyncDisposer: (() => void) | null = null; private audioPreferencesSyncDisposer: (() => void) | null = null; - private videoCodecDecodeCapResyncDisposer: (() => void) | null = null; - private videoCodecPublishOverrideSyncDisposer: (() => void) | null = null; - private localStreamCodecReconcileScheduled = false; private localAudioReconcileCoalescer: VoiceLocalAudioReconcileCoalescerSnapshot = createVoiceLocalAudioReconcileCoalescerSnapshot(); private applyingGatewayVoiceStateEcho = false; - private previousWatchedStreamCodecGossip = new Map< - string, - {identity: string; source: VoiceEngineV2LocalStreamSource} - >(); - private videoCodecGossipReceiverDisposer: (() => void) | null = null; private i18n: I18n | null = linguiI18n; private pendingServerDisconnectTimeout: NodeJS.Timeout | null = null; private facadeSnapshot: MediaEngineFacadeSnapshot = createMediaEngineFacadeSnapshot(); @@ -497,7 +469,6 @@ class MediaEngineFacade extends Store { private initializeEngineStoreSync(): void { const forwardChange = () => { - this.scheduleLocalStreamCodecReconcile(); this.emitChange(); }; this.voiceEngineV2ProjectionStore.subscribe(forwardChange); @@ -766,17 +737,6 @@ class MediaEngineFacade extends Store { await voiceEngineV2AppMediaExecutionAdapter.refreshCameraCapture(); } - async refreshActiveScreenShareCodecNegotiation(): Promise { - const room = this.room; - const selection = await ScreenShareCodecNegotiation.publishLocalCapabilities(room, 'manual', {}); - const codec = - selection?.codec ?? - ScreenShareCodecNegotiation.selectScreenShareCodec(VoiceSettings.getPreferredScreenShareCodec()); - await voiceEngineV2AppScreenShareExecutionAdapter.renegotiateActiveScreenShareCodec(room, codec, 'manual', { - force: true, - }); - } - private reconcileLocalAudioStateInBackground(reason: string): void { const previous = this.localAudioReconcileCoalescer; const next = transitionVoiceLocalAudioReconcileCoalescerSnapshot(previous, {type: 'run.requested', reason}); @@ -2343,12 +2303,6 @@ class MediaEngineFacade extends Store { this.outputDeviceSyncDisposer = bindOutputDeviceSync(room); this.audioPreferencesSyncDisposer?.(); this.audioPreferencesSyncDisposer = this.bindAudioPreferencesSync(room); - this.videoCodecDecodeCapResyncDisposer?.(); - this.videoCodecDecodeCapResyncDisposer = this.bindVideoDecodeCapResync(); - this.videoCodecPublishOverrideSyncDisposer?.(); - this.videoCodecPublishOverrideSyncDisposer = this.bindVideoCodecPublishOverrideSync(); - this.videoCodecGossipReceiverDisposer?.(); - this.videoCodecGossipReceiverDisposer = this.bindVideoCodecGossipReceiver(room); this.startAfkTracking(); const channelId = voiceEngineV2AppConnectionHostAdapter.channelId; if (channelId) { @@ -2373,13 +2327,6 @@ class MediaEngineFacade extends Store { this.outputDeviceSyncDisposer = null; this.audioPreferencesSyncDisposer?.(); this.audioPreferencesSyncDisposer = null; - this.videoCodecDecodeCapResyncDisposer?.(); - this.videoCodecDecodeCapResyncDisposer = null; - this.videoCodecPublishOverrideSyncDisposer?.(); - this.videoCodecPublishOverrideSyncDisposer = null; - this.videoCodecGossipReceiverDisposer?.(); - this.videoCodecGossipReceiverDisposer = null; - this.previousWatchedStreamCodecGossip = new Map(); this.stopAfkTracking(); logger.info('All tracking stopped'); } @@ -2389,103 +2336,6 @@ class MediaEngineFacade extends Store { voiceEngineV2AppConnectionHostAdapter.abortConnection(); } - private bindVideoCodecPublishOverrideSync(): () => void { - assert.ok(this.voiceEngineV2Host != null, 'video codec publish override sync requires the v2 host'); - const apply = (source: VoiceEngineV2LocalStreamSource, preference: CodecPreference): void => { - this.voiceEngineV2Controller.setVideoCodecOverride(source, preference === 'auto' ? null : preference); - }; - let previousScreen: CodecPreference = VoiceSettings.getPreferredScreenShareCodec(); - let previousCamera: CodecPreference = VoiceSettings.getPreferredVideoCodec(); - apply('screen', previousScreen); - apply('camera', previousCamera); - return VoiceSettings.subscribe(() => { - const screen = VoiceSettings.getPreferredScreenShareCodec(); - if (screen !== previousScreen) { - previousScreen = screen; - apply('screen', screen); - } - const camera = VoiceSettings.getPreferredVideoCodec(); - if (camera !== previousCamera) { - previousCamera = camera; - apply('camera', camera); - } - }); - } - - private bindVideoDecodeCapResync(): () => void { - assert.ok(this.voiceEngineV2Host != null, 'video decode cap resync requires the v2 host'); - let previous: CodecPreference = VoiceSettings.getEmulatedDecodeVideoCodecCap(); - return VoiceSettings.subscribe(() => { - const current = VoiceSettings.getEmulatedDecodeVideoCodecCap(); - if (current === previous) return; - previous = current; - this.previousWatchedStreamCodecGossip = new Map(); - this.syncWatchedStreamCodecGossip(); - }); - } - - private scheduleLocalStreamCodecReconcile(): void { - if (this.localStreamCodecReconcileScheduled) return; - this.localStreamCodecReconcileScheduled = true; - queueMicrotask(() => { - this.localStreamCodecReconcileScheduled = false; - if (this.voiceEngineV2Host == null) return; - this.reconcileLocalStreamCodec('camera', this.voiceEngineV2Snapshot.camera); - this.reconcileLocalStreamCodec('screen', this.voiceEngineV2Snapshot.screen); - this.syncWatchedStreamCodecGossip(); - }); - } - - private syncWatchedStreamCodecGossip(): void { - const result = computeVoiceEngineV2WatchedStreamGossip( - this.previousWatchedStreamCodecGossip, - this.voiceEngineV2Snapshot.watchedStreams, - getLocalDecodableVideoCodecs(VoiceSettings.getEmulatedDecodeVideoCodecCap()), - ); - this.previousWatchedStreamCodecGossip = result.next; - for (const {destinationIdentity, message} of result.messages) { - this.voiceEngineV2Controller.publishData({ - payload: encodeVoiceEngineV2CodecGossip(message), - reliable: true, - topic: VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC, - destinationIdentities: [destinationIdentity], - }); - } - } - - private bindVideoCodecGossipReceiver(room: Room): () => void { - const handler = (payload: Uint8Array, participant?: Participant, _kind?: unknown, topic?: string): void => { - if (topic !== VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC) return; - const identity = participant?.identity; - if (!identity) return; - ingestVoiceEngineV2CodecGossip(this.voiceEngineV2Controller, identity, payload); - }; - room.on(RoomEvent.DataReceived, handler); - return () => { - room.off(RoomEvent.DataReceived, handler); - }; - } - - private reconcileLocalStreamCodec( - source: VoiceEngineV2LocalStreamSource, - media: { - status: string; - published: {codec?: VoiceEngineV2VideoCodec} | null; - desired: {codec?: VoiceEngineV2VideoCodec} | null; - }, - ): void { - const registered = this.voiceEngineV2Snapshot.codecNegotiation.streams[source] != null; - const active = media.published != null || media.status === 'publishing'; - if (!active) { - if (registered) this.voiceEngineV2Controller.unregisterLocalStreamCodec(source); - return; - } - if (registered) return; - const codec: VoiceEngineV2VideoCodec = media.published?.codec ?? media.desired?.codec ?? ''; - const streamIdentity = `${source}:${crypto.randomUUID()}`; - this.voiceEngineV2Controller.registerLocalStreamCodec(source, streamIdentity, codec); - } - private bindAudioPreferencesSync(room: Room): () => void { return bindVoiceEngineV2AppAudioPreferencesSync( room, diff --git a/fluxer_app/src/features/voice/engine/ScreenShareCodecNegotiation.ts b/fluxer_app/src/features/voice/engine/ScreenShareCodecNegotiation.ts index 547d4d6d5..d672f9740 100644 --- a/fluxer_app/src/features/voice/engine/ScreenShareCodecNegotiation.ts +++ b/fluxer_app/src/features/voice/engine/ScreenShareCodecNegotiation.ts @@ -72,7 +72,7 @@ const VIDEO_CODEC_PROTOCOL_TABLE: Record< type FluxerVideoCodecName = 'AV1' | 'H265' | 'H264' | 'VP9' | 'VP8'; type FluxerCodecName = 'opus' | FluxerVideoCodecName; type FluxerCodecType = 'audio' | 'video'; -export type NegotiationReason = +type NegotiationReason = | 'connected' | 'data' | 'participant-connected' @@ -115,7 +115,7 @@ export interface FluxerSessionUpdateMessage { export type FluxerCodecNegotiationMessage = FluxerSelectProtocolMessage | FluxerSessionUpdateMessage; -export interface CodecNegotiationSelection { +interface CodecNegotiationSelection { codec: VideoCodec; reason: NegotiationReason; candidates: Array; @@ -138,10 +138,6 @@ type ScreenShareCodecNegotiationMachineEvent = } | {type: 'negotiation.reset'}; -interface BindOptions { - onSelectedCodecChanged?: (selection: CodecNegotiationSelection) => void | Promise; -} - function createId(prefix: string): string { const cryptoObject = globalThis.crypto as Crypto | undefined; if (typeof cryptoObject?.randomUUID === 'function') return `${prefix}_${cryptoObject.randomUUID()}`; @@ -502,12 +498,10 @@ class ScreenShareCodecNegotiation { private selectedCodec: VideoCodec | null = null; private localCodecs: Array = []; private remoteCodecsByIdentity = new Map>(); - private bindOptions: BindOptions = {}; private rtcConnectionId = createId('rtc'); private mediaSessionId = createId('media'); private negotiationSnapshot = createScreenShareCodecNegotiationSnapshot(); private bindingRevision = 0; - private selectionRevision = 0; getSelectedCodec(): VideoCodec | null { return this.selectedCodec; @@ -585,10 +579,9 @@ class ScreenShareCodecNegotiation { return {knownRemoteCodecs, unknownParticipants}; } - bind(room: Room, options: BindOptions = {}): () => void { + bind(room: Room): () => void { this.dispose(); this.room = room; - this.bindOptions = options; const bindingRevision = this.bindingRevision; const onDataReceived = ( payload: Uint8Array, @@ -597,24 +590,24 @@ class ScreenShareCodecNegotiation { topic?: string, ): void => { if (topic !== PROTOCOL_TOPIC || !participant) return; - this.handleDataMessage(room, participant, payload, options, bindingRevision); + this.handleDataMessage(room, participant, payload, bindingRevision); }; const onParticipantConnected = (): void => { - void this.publishBoundLocalCapabilities(room, 'participant-connected', options, bindingRevision); + void this.publishBoundLocalCapabilities(room, 'participant-connected', bindingRevision); }; const onParticipantDisconnected = (participant: Participant): void => { if (!this.isBindingCurrent(room, bindingRevision)) return; this.remoteCodecsByIdentity.delete(participant.identity); - void this.updateSelection(room, 'participant-disconnected', options, bindingRevision); + void this.updateSelection(room, 'participant-disconnected', bindingRevision); }; const onReconnected = (): void => { - void this.publishBoundLocalCapabilities(room, 'reconnected', options, bindingRevision); + void this.publishBoundLocalCapabilities(room, 'reconnected', bindingRevision); }; room.on(RoomEvent.DataReceived, onDataReceived); room.on(RoomEvent.ParticipantConnected, onParticipantConnected); room.on(RoomEvent.ParticipantDisconnected, onParticipantDisconnected); room.on(RoomEvent.Reconnected, onReconnected); - void this.publishBoundLocalCapabilities(room, 'connected', options, bindingRevision); + void this.publishBoundLocalCapabilities(room, 'connected', bindingRevision); this.bindDisposer = () => { room.off(RoomEvent.DataReceived, onDataReceived); room.off(RoomEvent.ParticipantConnected, onParticipantConnected); @@ -626,13 +619,11 @@ class ScreenShareCodecNegotiation { dispose(): void { this.bindingRevision += 1; - this.selectionRevision += 1; this.bindDisposer?.(); this.bindDisposer = null; this.room = null; this.selectedCodec = null; this.localCodecs = []; - this.bindOptions = {}; this.remoteCodecsByIdentity.clear(); this.mediaSessionId = createId('media'); this.negotiationSnapshot = createScreenShareCodecNegotiationSnapshot(); @@ -641,16 +632,14 @@ class ScreenShareCodecNegotiation { async publishLocalCapabilities( room: Room | null = this.room, reason: NegotiationReason = 'manual', - options: BindOptions = this.bindOptions, ): Promise { if (!room) return null; - return await this.publishBoundLocalCapabilities(room, reason, options, this.bindingRevision); + return await this.publishBoundLocalCapabilities(room, reason, this.bindingRevision); } private async publishBoundLocalCapabilities( room: Room, reason: NegotiationReason, - options: BindOptions, bindingRevision: number, ): Promise { if (typeof window === 'undefined') return null; @@ -677,22 +666,16 @@ class ScreenShareCodecNegotiation { }; await this.publishMessage(room, message); if (!this.isBindingCurrent(room, bindingRevision)) return null; - return await this.updateSelection(room, reason, options, bindingRevision); + return await this.updateSelection(room, reason, bindingRevision); } - private handleDataMessage( - room: Room, - participant: Participant, - payload: Uint8Array, - options: BindOptions, - bindingRevision: number, - ): void { + private handleDataMessage(room: Room, participant: Participant, payload: Uint8Array, bindingRevision: number): void { if (!this.isBindingCurrent(room, bindingRevision)) return; const message = parseMessage(payload); if (!message) return; if (message.op === SELECT_PROTOCOL_OP) { this.remoteCodecsByIdentity.set(participant.identity, message.d.codecs); - void this.updateSelection(room, 'data', options, bindingRevision); + void this.updateSelection(room, 'data', bindingRevision); } else if (message.op === SESSION_UPDATE_OP) { this.remoteCodecsByIdentity.set(participant.identity, message.d.codecs); logger.debug('Received remote codec session update', { @@ -701,14 +684,13 @@ class ScreenShareCodecNegotiation { mediaSessionId: message.d.media_session_id, reason: message.d.reason, }); - void this.updateSelection(room, 'data', options, bindingRevision); + void this.updateSelection(room, 'data', bindingRevision); } } private async updateSelection( room: Room, reason: NegotiationReason, - options: BindOptions, bindingRevision: number, ): Promise { if (!room.localParticipant || !this.isBindingCurrent(room, bindingRevision)) return null; @@ -733,13 +715,10 @@ class ScreenShareCodecNegotiation { if (!selection) return null; this.selectedCodec = selection.codec; if (selection.codec === previousCodec) return selection; - const selectionRevision = ++this.selectionRevision; this.mediaSessionId = createId('media'); logger.info('Selected screen share codec from XState capability intersection', selection); await this.publishSessionUpdate(room, selection); - if (!this.isBindingCurrent(room, bindingRevision) || selectionRevision !== this.selectionRevision) return null; - await options.onSelectedCodecChanged?.(selection); - if (!this.isBindingCurrent(room, bindingRevision) || selectionRevision !== this.selectionRevision) return null; + if (!this.isBindingCurrent(room, bindingRevision)) return null; return selection; } diff --git a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts index 1a4393d26..2b00be0b4 100644 --- a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts +++ b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigration.ts @@ -3,20 +3,13 @@ import assert from 'node:assert/strict'; import {Logger} from '@app/features/platform/utils/AppLogger'; import { - createLocalMigrationReadinessState, - isLocalMigrationReadinessComplete, - type ScreenShareLocalMigrationReadinessState, - type ScreenShareMigrationReadinessResult, type ScreenShareRemoteMigrationEvent, type ScreenShareRemoteMigrationState, - selectLocalMigrationReadinessResult, - transitionLocalMigrationReadinessState, transitionRemoteScreenShareMigrationState, } from '@app/features/voice/engine/ScreenSharePublicationMigrationStateMachine'; import {Store} from '@app/features/voice/engine/Store'; import {selectVoiceMediaGraphViewerStreamKeys} from '@app/features/voice/engine/VoiceMediaGraph'; import {voiceMediaGraphStore} from '@app/features/voice/engine/VoiceMediaGraphStore'; -import {createVoiceMediaIdentity} from '@app/features/voice/engine/VoiceMediaIdentity'; import {getStreamKeyForParticipantIdentity} from '@app/features/voice/engine/VoiceStreamWatchState'; import {isScreenShareVideoCodecValue} from '@app/features/voice/engine/v2/VoiceEngineV2AppScreenShareNativePublishOptions'; import { @@ -47,13 +40,11 @@ const MIGRATION_MESSAGE_BYTES_MAX = 4096; const MIGRATION_IDENTIFIER_CHARS_MAX = 256; const TRACK_SID_CHARS_MAX = 256; const MIGRATION_REASON_CHARS_MAX = 512; -const DEFAULT_READY_TIMEOUT_MS = 5000; const REMOTE_READY_PROBE_TIMEOUT_MS = 6500; const REMOTE_MIGRATION_STATE_TIMEOUT_MS = 10000; const REMOTE_READY_PROBE_STATS_INTERVAL_MS = 200; const CANDIDATE_TRACK_NAME_MARKER = '.candidate.'; export const REMOTE_MIGRATION_STATES_MAX = 256; -export const LOCAL_MIGRATION_SESSIONS_MAX = 16; export const READY_PROBES_MAX = 64; export interface ScreenShareMigrationCandidateMessage { @@ -115,34 +106,10 @@ export type ScreenShareMigrationMessage = | ScreenShareMigrationCommitMessage | ScreenShareMigrationAbortMessage; -interface LocalMigrationInput { - room: Room; - publisherIdentity: string; - migrationId: string; - generation: number; - previousTrackSid: string | null; - candidateTrackSid: string; - codec: VideoCodec; - reason: string; - targetIdentities: ReadonlyArray; -} - -interface LocalBreakBeforeMakeMigrationInput { - migrationId: string; - generation: number; - previousTrackSid: string | null; - codec: VideoCodec; - reason: string; -} - interface ReadyProbe { dispose: () => void; } -function createId(prefix: string): string { - return `${prefix}_${createVoiceMediaIdentity()}`; -} - function isObject(value: unknown): value is Record { return value !== null && typeof value === 'object'; } @@ -344,97 +311,20 @@ function publishMigrationMessage( }); } -class ScreenShareLocalMigrationSession { - readonly migrationId: string; - readonly generation: number; - readonly previousTrackSid: string | null; - readonly candidateTrackSid: string; - private readinessState: ScreenShareLocalMigrationReadinessState; - private waitResolve: ((result: ScreenShareMigrationReadinessResult) => void) | null = null; - private waitTimer: NodeJS.Timeout | null = null; - - constructor(input: LocalMigrationInput) { - this.migrationId = input.migrationId; - this.generation = input.generation; - this.previousTrackSid = input.previousTrackSid; - this.candidateTrackSid = input.candidateTrackSid; - this.readinessState = createLocalMigrationReadinessState(input.targetIdentities); - } - - markReady(participantIdentity: string): void { - this.readinessState = transitionLocalMigrationReadinessState(this.readinessState, { - type: 'watcher.ready', - participantIdentity, - }); - this.resolveIfComplete(false); - } - - waitForReady(timeoutMs = DEFAULT_READY_TIMEOUT_MS): Promise { - if (isLocalMigrationReadinessComplete(this.readinessState)) { - return Promise.resolve(this.buildResult(false)); - } - return new Promise((resolve) => { - this.waitResolve = resolve; - this.waitTimer = setTimeout(() => { - this.waitTimer = null; - this.finish(true); - }, timeoutMs); - }); - } - - finish(timedOut = false): ScreenShareMigrationReadinessResult { - if (this.waitTimer) { - clearTimeout(this.waitTimer); - this.waitTimer = null; - } - const result = this.buildResult(timedOut); - this.waitResolve?.(result); - this.waitResolve = null; - return result; - } - - private resolveIfComplete(timedOut: boolean): void { - if (!isLocalMigrationReadinessComplete(this.readinessState)) return; - this.finish(timedOut); - } - - private buildResult(timedOut: boolean): ScreenShareMigrationReadinessResult { - return selectLocalMigrationReadinessResult(this.readinessState, timedOut); - } -} - class ScreenSharePublicationMigration extends Store { private room: Room | null = null; private bindDisposer: (() => void) | null = null; private guildId: string | null = null; private channelId: string | null = null; private remoteStatesByIdentity = new Map(); - private localSessionsById = new Map(); private readyProbesByKey = new Map(); private remoteStateExpiryTimersByIdentity = new Map(); version = 0; - createMigrationId(): string { - return createId('ssm'); - } - - getDefaultReadyTimeoutMs(): number { - return DEFAULT_READY_TIMEOUT_MS; - } - getRemoteMigrationStateTimeoutMs(): number { return REMOTE_MIGRATION_STATE_TIMEOUT_MS; } - shouldAbortLocalMigrationForReadiness(readiness: ScreenShareMigrationReadinessResult): boolean { - return readiness.timedOut && readiness.missingIdentities.length > 0; - } - - createCandidateTrackName(baseName: string | undefined, migrationId: string, generation: number): string { - const prefix = baseName && baseName.length > 0 ? baseName : 'screen_share'; - return `${prefix}${CANDIDATE_TRACK_NAME_MARKER}${generation}.${migrationId}`; - } - bind(room: Room, options: {guildId?: string | null; channelId?: string | null} = {}): () => void { this.dispose(); this.room = room; @@ -485,10 +375,6 @@ class ScreenSharePublicationMigration extends Store { probe.dispose(); } this.readyProbesByKey.clear(); - for (const session of this.localSessionsById.values()) { - session.finish(true); - } - this.localSessionsById.clear(); for (const timer of this.remoteStateExpiryTimersByIdentity.values()) { clearTimeout(timer); } @@ -500,84 +386,6 @@ class ScreenSharePublicationMigration extends Store { this.bumpVersion(); } - beginLocalMigration(input: LocalMigrationInput): ScreenShareLocalMigrationSession { - const session = new ScreenShareLocalMigrationSession(input); - if (this.hasLocalSessionCapacity(input.migrationId)) { - this.localSessionsById.set(input.migrationId, session); - } - this.commitRemoteMigrationState(input.publisherIdentity, { - type: 'migration.candidate', - migrationId: input.migrationId, - generation: input.generation, - previousTrackSid: input.previousTrackSid, - candidateTrackSid: input.candidateTrackSid, - codec: input.codec, - readySent: true, - }); - return session; - } - - markLocalMigrationBreaking(publisherIdentity: string, message: ScreenShareMigrationBreakMessage['d']): void { - this.applyBreak(publisherIdentity, message); - } - - finishLocalMigration(migrationId: string): void { - const session = this.localSessionsById.get(migrationId); - session?.finish(false); - this.localSessionsById.delete(migrationId); - } - - markLocalMigrationCommitted(publisherIdentity: string, message: ScreenShareMigrationCommitMessage['d']): void { - this.applyCommit(publisherIdentity, message); - this.finishLocalMigration(message.migration_id); - } - - markLocalMigrationAborted(publisherIdentity: string, message: ScreenShareMigrationAbortMessage['d']): void { - this.applyAbort(publisherIdentity, message); - this.finishLocalMigration(message.migration_id); - } - - async publishCandidate(room: Room, input: LocalMigrationInput): Promise { - await publishMigrationMessage(room.localParticipant, { - op: CANDIDATE_OP, - d: { - migration_id: input.migrationId, - generation: input.generation, - previous_track_sid: input.previousTrackSid, - candidate_track_sid: input.candidateTrackSid, - codec: input.codec, - reason: input.reason, - }, - }); - } - - async publishBreak(room: Room, input: LocalBreakBeforeMakeMigrationInput): Promise { - await publishMigrationMessage(room.localParticipant, { - op: BREAK_OP, - d: { - migration_id: input.migrationId, - generation: input.generation, - previous_track_sid: input.previousTrackSid, - codec: input.codec, - reason: input.reason, - }, - }); - } - - async publishCommit(room: Room, message: ScreenShareMigrationCommitMessage['d']): Promise { - await publishMigrationMessage(room.localParticipant, { - op: COMMIT_OP, - d: message, - }); - } - - async publishAbort(room: Room, message: ScreenShareMigrationAbortMessage['d']): Promise { - await publishMigrationMessage(room.localParticipant, { - op: ABORT_OP, - d: message, - }); - } - selectScreenSharePublication( participant: Pick | null | undefined, ): RemoteTrackPublication | undefined { @@ -648,9 +456,6 @@ class ScreenSharePublicationMigration extends Store { this.applyCandidate(participant.identity, message.d); this.ensureRemoteCandidateSubscription(room, participant as RemoteParticipant); break; - case READY_OP: - this.applyReady(participant.identity, message.d); - break; case COMMIT_OP: this.applyCommit(participant.identity, message.d); break; @@ -681,13 +486,6 @@ class ScreenSharePublicationMigration extends Store { }); } - private applyReady(participantIdentity: string, message: ScreenShareMigrationReadyMessage['d']): void { - const session = this.localSessionsById.get(message.migration_id); - if (!session) return; - if (session.generation !== message.generation || session.candidateTrackSid !== message.candidate_track_sid) return; - session.markReady(participantIdentity); - } - private applyCommit(participantIdentity: string, message: ScreenShareMigrationCommitMessage['d']): void { this.commitRemoteMigrationState(participantIdentity, { type: 'migration.commit', @@ -1045,18 +843,6 @@ class ScreenSharePublicationMigration extends Store { return false; } - private hasLocalSessionCapacity(migrationId: string): boolean { - assert.ok(this.localSessionsById.size <= LOCAL_MIGRATION_SESSIONS_MAX, 'local sessions must stay within cap'); - if (this.localSessionsById.has(migrationId)) return true; - if (this.localSessionsById.size < LOCAL_MIGRATION_SESSIONS_MAX) return true; - logger.error('Refusing local screen share migration session beyond cap; a stale session may have leaked', { - migrationId, - trackedCount: this.localSessionsById.size, - cap: LOCAL_MIGRATION_SESSIONS_MAX, - }); - return false; - } - private hasReadyProbeCapacity(participantIdentity: string, trackSid: string): boolean { assert.ok(this.readyProbesByKey.size <= READY_PROBES_MAX, 'ready probes must stay within cap'); if (this.readyProbesByKey.size < READY_PROBES_MAX) return true; @@ -1093,6 +879,4 @@ if (typeof window !== 'undefined') { )._screenSharePublicationMigration = instance; } -export type {ScreenShareMigrationReadinessResult, ScreenShareLocalMigrationSession}; - export default instance; diff --git a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.test.ts b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.test.ts index 6eb8fcfdb..e59d78a24 100644 --- a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.test.ts +++ b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.test.ts @@ -1,11 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import { - createLocalMigrationReadinessState, - isLocalMigrationReadinessComplete, type ScreenShareRemoteMigrationState, - selectLocalMigrationReadinessResult, - transitionLocalMigrationReadinessState, transitionRemoteScreenShareMigrationState, } from '@app/features/voice/engine/ScreenSharePublicationMigrationStateMachine'; import {describe, expect, it} from 'vitest'; @@ -289,37 +285,3 @@ describe('ScreenSharePublicationMigrationStateMachine remote migration', () => { expect(transitionRemoteScreenShareMigrationState(ready, {type: 'migration.readySent'})).toBe(ready); }); }); - -describe('ScreenSharePublicationMigrationStateMachine local readiness', () => { - it('dedupes targets and completes only after every known watcher is ready', () => { - let state = createLocalMigrationReadinessState(['viewer-a', 'viewer-a', 'viewer-b', '']); - - state = transitionLocalMigrationReadinessState(state, { - type: 'watcher.ready', - participantIdentity: 'unknown-viewer', - }); - state = transitionLocalMigrationReadinessState(state, { - type: 'watcher.ready', - participantIdentity: 'viewer-a', - }); - - expect(isLocalMigrationReadinessComplete(state)).toBe(false); - expect(selectLocalMigrationReadinessResult(state, false)).toEqual({ - readyIdentities: ['viewer-a'], - missingIdentities: ['viewer-b'], - timedOut: false, - }); - - state = transitionLocalMigrationReadinessState(state, { - type: 'watcher.ready', - participantIdentity: 'viewer-b', - }); - - expect(isLocalMigrationReadinessComplete(state)).toBe(true); - expect(selectLocalMigrationReadinessResult(state, false)).toEqual({ - readyIdentities: ['viewer-a', 'viewer-b'], - missingIdentities: [], - timedOut: false, - }); - }); -}); diff --git a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.ts b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.ts index 37c8fd897..fc1d663ee 100644 --- a/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.ts +++ b/fluxer_app/src/features/voice/engine/ScreenSharePublicationMigrationStateMachine.ts @@ -48,21 +48,6 @@ export type ScreenShareRemoteMigrationEvent = | {type: 'migration.committedUnpublished'; trackSid: string} | {type: 'migration.readySent'}; -export interface ScreenShareLocalMigrationReadinessState { - targetIdentities: ReadonlySet; - readyIdentities: ReadonlySet; -} - -export type ScreenShareLocalMigrationReadinessEvent = - | {type: 'watcher.ready'; participantIdentity: string} - | {type: 'watcher.timeout'}; - -export interface ScreenShareMigrationReadinessResult { - readyIdentities: Array; - missingIdentities: Array; - timedOut: boolean; -} - function isSameMigration(state: ScreenShareRemoteMigrationState | null, event: {migrationId: string}): boolean { return state?.migrationId === event.migrationId; } @@ -220,41 +205,3 @@ export function transitionRemoteScreenShareMigrationState( return state; } } - -export function createLocalMigrationReadinessState( - targetIdentities: ReadonlyArray, -): ScreenShareLocalMigrationReadinessState { - return { - targetIdentities: new Set(targetIdentities.filter(Boolean)), - readyIdentities: new Set(), - }; -} - -export function transitionLocalMigrationReadinessState( - state: ScreenShareLocalMigrationReadinessState, - event: ScreenShareLocalMigrationReadinessEvent, -): ScreenShareLocalMigrationReadinessState { - if (event.type === 'watcher.timeout') return state; - if (!state.targetIdentities.has(event.participantIdentity)) return state; - if (state.readyIdentities.has(event.participantIdentity)) return state; - return { - ...state, - readyIdentities: new Set([...state.readyIdentities, event.participantIdentity]), - }; -} - -export function isLocalMigrationReadinessComplete(state: ScreenShareLocalMigrationReadinessState): boolean { - return state.readyIdentities.size >= state.targetIdentities.size; -} - -export function selectLocalMigrationReadinessResult( - state: ScreenShareLocalMigrationReadinessState, - timedOut: boolean, -): ScreenShareMigrationReadinessResult { - const readyIdentities = Array.from(state.readyIdentities); - return { - readyIdentities, - missingIdentities: Array.from(state.targetIdentities).filter((identity) => !state.readyIdentities.has(identity)), - timedOut, - }; -} diff --git a/fluxer_app/src/features/voice/engine/VoiceMediaIdentity.ts b/fluxer_app/src/features/voice/engine/VoiceMediaIdentity.ts deleted file mode 100644 index d36de176a..000000000 --- a/fluxer_app/src/features/voice/engine/VoiceMediaIdentity.ts +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -export class VoiceMediaIdentityCapabilityError extends Error { - constructor() { - super('Voice media identity generation requires crypto.randomUUID'); - this.name = 'VoiceMediaIdentityCapabilityError'; - } -} - -const RANDOM_UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u; - -export class VoiceMediaIdentityInvariantError extends Error { - constructor() { - super('crypto.randomUUID must return a canonical version 4 UUID'); - this.name = 'VoiceMediaIdentityInvariantError'; - } -} - -export function createVoiceMediaIdentity(): string { - const cryptoPort = globalThis.crypto; - if (cryptoPort == null || typeof cryptoPort.randomUUID !== 'function') { - throw new VoiceMediaIdentityCapabilityError(); - } - const identity = cryptoPort.randomUUID(); - if (!RANDOM_UUID_PATTERN.test(identity)) { - throw new VoiceMediaIdentityInvariantError(); - } - return identity; -} diff --git a/fluxer_app/src/features/voice/engine/VoiceRoomEventBinder.ts b/fluxer_app/src/features/voice/engine/VoiceRoomEventBinder.ts index be13d6eee..1a6698d20 100644 --- a/fluxer_app/src/features/voice/engine/VoiceRoomEventBinder.ts +++ b/fluxer_app/src/features/voice/engine/VoiceRoomEventBinder.ts @@ -3,9 +3,7 @@ import {SoundType} from '@app/features/notification/utils/SoundUtils'; import {Logger} from '@app/features/platform/utils/AppLogger'; import * as SoundCommands from '@app/features/ui/commands/SoundCommands'; -import ScreenShareCodecNegotiation, { - type CodecNegotiationSelection, -} from '@app/features/voice/engine/ScreenShareCodecNegotiation'; +import ScreenShareCodecNegotiation from '@app/features/voice/engine/ScreenShareCodecNegotiation'; import ScreenSharePublicationMigration from '@app/features/voice/engine/ScreenSharePublicationMigration'; import {getEffectiveAudioState} from '@app/features/voice/engine/VoiceEffectiveAudioState'; import {noteLocalVoiceActivity} from '@app/features/voice/engine/VoiceIdleActivityBridge'; @@ -92,8 +90,7 @@ export interface RoomEventDependencies { didChangeLocalState: boolean, publication?: LocalTrackPublication, ) => void; - isScreenShareCodecRepublishInFlight: () => boolean; - renegotiateActiveScreenShareCodec: (room: Room, selection: CodecNegotiationSelection) => Promise; + isScreenSharePublicationReplaceInFlight: () => boolean; }; subscriptions: { isScreenShareSubscribed: (participantIdentity: string) => boolean; @@ -243,17 +240,7 @@ export function bindRoomEvents( }; const bindCodecNegotiation = (): void => { codecNegotiationDisposer?.(); - codecNegotiationDisposer = ScreenShareCodecNegotiation.bind(room, { - onSelectedCodecChanged: (selection) => { - void dependencies.screenShare.renegotiateActiveScreenShareCodec(room, selection).catch((error) => { - logger.warn('Failed to apply negotiated screen share codec', { - error, - codec: selection.codec, - reason: selection.reason, - }); - }); - }, - }); + codecNegotiationDisposer = ScreenShareCodecNegotiation.bind(room); }; const unbindCodecNegotiation = (): void => { ScreenShareCodecNegotiation.dispose(); @@ -550,7 +537,10 @@ export function bindRoomEvents( RoomEvent.LocalTrackUnpublished, guard(attemptId, (pub, p: Participant) => { if (p.isLocal) { - if (pub.source === Track.Source.ScreenShare && dependencies.screenShare.isScreenShareCodecRepublishInFlight()) { + if ( + pub.source === Track.Source.ScreenShare && + dependencies.screenShare.isScreenSharePublicationReplaceInFlight() + ) { dependencies.participants.upsertParticipant(p); return; } diff --git a/fluxer_app/src/features/voice/engine/VoiceScreenShareCodecRepublishPolicy.test.ts b/fluxer_app/src/features/voice/engine/VoiceScreenShareCodecRepublishPolicy.test.ts deleted file mode 100644 index f68195ab9..000000000 --- a/fluxer_app/src/features/voice/engine/VoiceScreenShareCodecRepublishPolicy.test.ts +++ /dev/null @@ -1,232 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {describe, expect, it} from 'vitest'; -import { - createScreenShareCodecPublicationSnapshot, - selectScreenShareCodecRepublishDecision, - transitionScreenShareCodecPublicationSnapshot, -} from './VoiceScreenShareCodecRepublishPolicy'; - -describe('selectScreenShareCodecRepublishDecision', () => { - it('does not republish when the selected codec already matches the active sender', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'vp8', - reason: 'data', - }), - ).toEqual({action: 'noop', reason: 'same-codec'}); - }); - - it('republishes automatic negotiation changes in-place while a share is already live', () => { - for (const reason of ['participant-connected', 'data', 'connected', 'reconnected'] as const) { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'h264', - reason, - }), - ).toEqual({action: 'republish', reason: 'automatic'}); - } - }); - - it('republishes manual and forced live changes by default', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'h264', - reason: 'manual', - }), - ).toEqual({action: 'republish', reason: 'manual'}); - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'h264', - reason: 'participant-connected', - force: true, - }), - ).toEqual({action: 'republish', reason: 'forced'}); - }); - - it('keeps the XState snapshot in republishing state for repeated live codec changes', () => { - let snapshot = createScreenShareCodecPublicationSnapshot(); - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'h265', - nextCodec: 'h264', - reason: 'participant-connected', - }); - expect(snapshot.value).toBe('republishing'); - expect(snapshot.context.decision).toEqual({action: 'republish', reason: 'automatic'}); - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'h265', - nextCodec: 'vp8', - reason: 'data', - }); - expect(snapshot.value).toBe('republishing'); - expect(snapshot.context.nextCodec).toBe('vp8'); - }); - - it('retains an explicit switch to defer live republishing', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'h264', - reason: 'participant-connected', - allowLiveRepublish: false, - }), - ).toEqual({action: 'defer', reason: 'active-share-stability'}); - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'h264', - reason: 'participant-connected', - force: true, - allowLiveRepublish: false, - }), - ).toEqual({action: 'defer', reason: 'live-republish-disabled'}); - }); - - it('keeps explicit live republish decisions stable', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'h264', - reason: 'participant-connected', - force: true, - allowLiveRepublish: true, - }), - ).toEqual({action: 'republish', reason: 'forced'}); - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'h264', - reason: 'manual', - allowLiveRepublish: true, - }), - ).toEqual({action: 'republish', reason: 'manual'}); - }); - - it('republishes a downgrade when a weaker client joins mid-share', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'av1', - nextCodec: 'h264', - reason: 'participant-connected', - allowLiveRepublish: true, - }), - ).toEqual({action: 'republish', reason: 'automatic'}); - }); - - it('republishes an upgrade when the constraining client leaves', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'h264', - nextCodec: 'av1', - reason: 'participant-disconnected', - allowLiveRepublish: true, - }), - ).toEqual({action: 'republish', reason: 'automatic'}); - }); - - it('republishes an upgrade when a late advertisement improves the intersection', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'av1', - reason: 'data', - allowLiveRepublish: true, - }), - ).toEqual({action: 'republish', reason: 'automatic'}); - }); - - it('does not republish unchanged selections under repeated evaluations', () => { - let snapshot = createScreenShareCodecPublicationSnapshot(); - for (let i = 0; i < 3; i++) { - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'av1', - nextCodec: 'av1', - reason: 'data', - allowLiveRepublish: true, - }); - expect(snapshot.value).toBe('stable'); - expect(snapshot.context.decision).toEqual({action: 'noop', reason: 'same-codec'}); - } - }); - - it('honours explicit user preference changes in both directions', () => { - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'av1', - nextCodec: 'vp8', - reason: 'manual', - allowLiveRepublish: true, - }), - ).toEqual({action: 'republish', reason: 'manual'}); - expect( - selectScreenShareCodecRepublishDecision({ - currentCodec: 'vp8', - nextCodec: 'av1', - reason: 'manual', - allowLiveRepublish: true, - }), - ).toEqual({action: 'republish', reason: 'manual'}); - }); - - it('walks the state machine through downgrade, stability, and upgrade transitions', () => { - let snapshot = createScreenShareCodecPublicationSnapshot(); - expect(snapshot.value).toBe('stable'); - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'av1', - nextCodec: 'h264', - reason: 'participant-connected', - allowLiveRepublish: true, - }); - expect(snapshot.value).toBe('republishing'); - expect(snapshot.context.decision).toEqual({action: 'republish', reason: 'automatic'}); - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'h264', - nextCodec: 'h264', - reason: 'data', - allowLiveRepublish: true, - }); - expect(snapshot.value).toBe('stable'); - expect(snapshot.context.decision).toEqual({action: 'noop', reason: 'same-codec'}); - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'h264', - nextCodec: 'av1', - reason: 'participant-disconnected', - allowLiveRepublish: true, - }); - expect(snapshot.value).toBe('republishing'); - expect(snapshot.context.decision).toEqual({action: 'republish', reason: 'automatic'}); - expect(snapshot.context.nextCodec).toBe('av1'); - }); - - it('moves deferred selections into republishing once live republish is allowed again', () => { - let snapshot = createScreenShareCodecPublicationSnapshot(); - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'av1', - nextCodec: 'h264', - reason: 'participant-connected', - allowLiveRepublish: false, - }); - expect(snapshot.value).toBe('deferred'); - expect(snapshot.context.decision).toEqual({action: 'defer', reason: 'active-share-stability'}); - snapshot = transitionScreenShareCodecPublicationSnapshot(snapshot, { - type: 'codec.selection', - currentCodec: 'av1', - nextCodec: 'h264', - reason: 'data', - allowLiveRepublish: true, - }); - expect(snapshot.value).toBe('republishing'); - expect(snapshot.context.decision).toEqual({action: 'republish', reason: 'automatic'}); - }); -}); diff --git a/fluxer_app/src/features/voice/engine/VoiceScreenShareCodecRepublishPolicy.ts b/fluxer_app/src/features/voice/engine/VoiceScreenShareCodecRepublishPolicy.ts deleted file mode 100644 index 5e6dae83d..000000000 --- a/fluxer_app/src/features/voice/engine/VoiceScreenShareCodecRepublishPolicy.ts +++ /dev/null @@ -1,149 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {NegotiationReason} from '@app/features/voice/engine/ScreenShareCodecNegotiation'; -import type {VideoCodec} from 'livekit-client'; -import {assign, getInitialSnapshot, type SnapshotFrom, setup, transition} from 'xstate'; - -export type ScreenShareCodecRepublishDecision = - | { - action: 'noop'; - reason: 'same-codec'; - } - | { - action: 'republish'; - reason: 'forced' | 'manual' | 'automatic'; - } - | { - action: 'defer'; - reason: 'active-share-stability' | 'live-republish-disabled'; - }; - -interface ScreenShareCodecPublicationContext { - currentCodec: VideoCodec | undefined; - nextCodec: VideoCodec | null; - reason: NegotiationReason | null; - force: boolean; - allowLiveRepublish: boolean; - decision: ScreenShareCodecRepublishDecision; -} - -type ScreenShareCodecPublicationEvent = { - type: 'codec.selection'; - currentCodec: VideoCodec | undefined; - nextCodec: VideoCodec; - reason: NegotiationReason; - force?: boolean; - allowLiveRepublish?: boolean; -}; - -function initialContext(): ScreenShareCodecPublicationContext { - return { - currentCodec: undefined, - nextCodec: null, - reason: null, - force: false, - allowLiveRepublish: false, - decision: {action: 'noop', reason: 'same-codec'}, - }; -} - -function getRepublishDecision(event: ScreenShareCodecPublicationEvent): ScreenShareCodecRepublishDecision { - if (event.currentCodec === event.nextCodec && event.force !== true) { - return {action: 'noop', reason: 'same-codec'}; - } - if (event.allowLiveRepublish === false) { - return {action: 'defer', reason: event.force === true ? 'live-republish-disabled' : 'active-share-stability'}; - } - if (event.force === true) { - return {action: 'republish', reason: 'forced'}; - } - if (event.reason === 'manual') { - return {action: 'republish', reason: 'manual'}; - } - return {action: 'republish', reason: 'automatic'}; -} - -export const screenShareCodecPublicationStateMachine = setup({ - types: {} as { - context: ScreenShareCodecPublicationContext; - events: ScreenShareCodecPublicationEvent; - }, - actions: { - recordSelection: assign(({event}) => ({ - currentCodec: event.currentCodec, - nextCodec: event.nextCodec, - reason: event.reason, - force: event.force === true, - allowLiveRepublish: event.allowLiveRepublish === true, - decision: getRepublishDecision(event), - })), - }, - guards: { - isNoop: ({event}) => getRepublishDecision(event).action === 'noop', - isRepublish: ({event}) => getRepublishDecision(event).action === 'republish', - }, -}).createMachine({ - id: 'screenShareCodecPublication', - context: () => initialContext(), - initial: 'stable', - states: { - stable: { - on: { - 'codec.selection': [ - {guard: 'isNoop', target: 'stable', actions: 'recordSelection'}, - {guard: 'isRepublish', target: 'republishing', actions: 'recordSelection'}, - {target: 'deferred', actions: 'recordSelection'}, - ], - }, - }, - deferred: { - on: { - 'codec.selection': [ - {guard: 'isNoop', target: 'stable', actions: 'recordSelection'}, - {guard: 'isRepublish', target: 'republishing', actions: 'recordSelection'}, - {target: 'deferred', actions: 'recordSelection'}, - ], - }, - }, - republishing: { - on: { - 'codec.selection': [ - {guard: 'isNoop', target: 'stable', actions: 'recordSelection'}, - {guard: 'isRepublish', target: 'republishing', actions: 'recordSelection'}, - {target: 'deferred', actions: 'recordSelection'}, - ], - }, - }, - }, -}); - -export type ScreenShareCodecPublicationSnapshot = SnapshotFrom; - -export function createScreenShareCodecPublicationSnapshot(): ScreenShareCodecPublicationSnapshot { - return getInitialSnapshot(screenShareCodecPublicationStateMachine); -} - -export function transitionScreenShareCodecPublicationSnapshot( - snapshot: ScreenShareCodecPublicationSnapshot, - event: ScreenShareCodecPublicationEvent, -): ScreenShareCodecPublicationSnapshot { - return transition(screenShareCodecPublicationStateMachine, snapshot, event)[0] as ScreenShareCodecPublicationSnapshot; -} - -export function selectScreenShareCodecRepublishDecision(options: { - currentCodec: VideoCodec | undefined; - nextCodec: VideoCodec; - reason: NegotiationReason; - force?: boolean; - allowLiveRepublish?: boolean; -}): ScreenShareCodecRepublishDecision { - const snapshot = transitionScreenShareCodecPublicationSnapshot(createScreenShareCodecPublicationSnapshot(), { - type: 'codec.selection', - currentCodec: options.currentCodec, - nextCodec: options.nextCodec, - reason: options.reason, - ...(options.force !== undefined ? {force: options.force} : {}), - ...(options.allowLiveRepublish !== undefined ? {allowLiveRepublish: options.allowLiveRepublish} : {}), - }); - return snapshot.context.decision; -} diff --git a/fluxer_app/src/features/voice/engine/VoiceScreenShareLifecycleStore.ts b/fluxer_app/src/features/voice/engine/VoiceScreenShareLifecycleStore.ts index cb22c5e22..8851b61a2 100644 --- a/fluxer_app/src/features/voice/engine/VoiceScreenShareLifecycleStore.ts +++ b/fluxer_app/src/features/voice/engine/VoiceScreenShareLifecycleStore.ts @@ -1,16 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import assert from 'node:assert/strict'; -import type {NegotiationReason} from '@app/features/voice/engine/ScreenShareCodecNegotiation'; import { createVoiceScreenShareSnapshot, - type PendingScreenShareCodecRepublishRequest, transitionVoiceScreenShareSnapshot, type VoiceScreenShareEvent, type VoiceScreenShareSnapshot, } from '@app/features/voice/engine/VoiceScreenShareStateMachine'; import type {PendingScreenShareStopRequest} from '@app/features/voice/engine/voice_screen_share_manager/shared'; -import type {VideoCodec} from 'livekit-client'; export interface VoiceScreenShareLifecycleHost { update(fn: () => void): void; @@ -19,7 +16,6 @@ export interface VoiceScreenShareLifecycleHost { export interface VoiceScreenShareQueuedRequestExecutors { isScreenShareEnabled: () => boolean; applyStop: (request: PendingScreenShareStopRequest) => Promise; - applyCodecRepublish: (request: PendingScreenShareCodecRepublishRequest) => Promise; } export class VoiceScreenShareLifecycleStore { @@ -40,8 +36,8 @@ export class VoiceScreenShareLifecycleStore { return this.snapshotInternal.context.pendingOperation != null; } - get codecRepublishInFlight(): boolean { - return this.snapshotInternal.context.codecRepublishInFlight; + get publicationReplaceInFlight(): boolean { + return this.snapshotInternal.context.publicationReplaceInFlight; } get streamingPriorityHeld(): boolean { @@ -66,28 +62,6 @@ export class VoiceScreenShareLifecycleStore { }); } - queueCodecRepublishRequest(codec: VideoCodec, reason: NegotiationReason, options: {force?: boolean} = {}): void { - this.transition({ - type: 'share.codecRepublish.queue', - request: { - codec, - reason, - force: options.force === true, - }, - }); - } - - deferCodecRepublishRequest(codec: VideoCodec, reason: NegotiationReason, options: {force?: boolean} = {}): void { - this.transition({ - type: 'share.codecRepublish.defer', - request: { - codec, - reason, - force: options.force === true, - }, - }); - } - takeQueuedStopRequest(): PendingScreenShareStopRequest | null { const request = this.snapshotInternal.context.queuedStopRequest; this.transition({type: 'share.queuedStop.clear'}); @@ -95,26 +69,11 @@ export class VoiceScreenShareLifecycleStore { return request; } - takeQueuedCodecRepublishRequest(): PendingScreenShareCodecRepublishRequest | null { - const request = this.snapshotInternal.context.queuedCodecRepublishRequest; - this.transition({type: 'share.queuedCodecRepublish.clear'}); - assert.equal( - this.snapshotInternal.context.queuedCodecRepublishRequest, - null, - 'queued codec republish request must clear on take', - ); - return request; - } - async drainQueuedRequests(executors: VoiceScreenShareQueuedRequestExecutors): Promise { assert.ok(executors, 'queued request executors are required'); const stopRequest = this.takeQueuedStopRequest(); if (stopRequest && executors.isScreenShareEnabled()) { await executors.applyStop(stopRequest); } - const republishRequest = this.takeQueuedCodecRepublishRequest(); - if (republishRequest && executors.isScreenShareEnabled()) { - await executors.applyCodecRepublish(republishRequest); - } } } diff --git a/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.test.ts b/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.test.ts index 3ae665182..93ba0c93a 100644 --- a/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.test.ts +++ b/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.test.ts @@ -61,7 +61,7 @@ describe('VoiceScreenShareStateMachine', () => { snapshot = transitionVoiceScreenShareSnapshot(snapshot, {type: 'share.cancel', active: false, sourceType: null}); expect(getVoiceScreenShareStateValue(snapshot)).toBe('inactive'); expect(snapshot.context.pendingOperation).toBeNull(); - expect(snapshot.context.codecRepublishInFlight).toBe(false); + expect(snapshot.context.publicationReplaceInFlight).toBe(false); snapshot = transitionVoiceScreenShareSnapshot(snapshot, {type: 'share.start', sourceType: 'device'}); snapshot = transitionVoiceScreenShareSnapshot(snapshot, {type: 'share.reject', active: false, sourceType: null}); expect(getVoiceScreenShareStateValue(snapshot)).toBe('inactive'); @@ -103,30 +103,25 @@ describe('VoiceScreenShareStateMachine', () => { expect(snapshot.context.sourceType).toBe('device'); }); - it('holds the codec republish lock only while codec publication work is pending', () => { + it('holds the replace lock only while a replacing publication is pending', () => { let snapshot = resolveActive( transitionVoiceScreenShareSnapshot(createVoiceScreenShareSnapshot(), { type: 'share.start', sourceType: 'display', }), ); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, {type: 'share.codecRepublish'}); - expect(snapshot.context.pendingOperation).toBe('codecRepublishing'); - expect(snapshot.context.codecRepublishInFlight).toBe(true); - snapshot = resolveActive(snapshot, 'display'); - expect(snapshot.context.codecRepublishInFlight).toBe(false); snapshot = transitionVoiceScreenShareSnapshot(snapshot, { type: 'share.replace', sourceType: 'display', - codecRepublishInFlight: true, + publicationReplaceInFlight: true, }); - expect(snapshot.context.codecRepublishInFlight).toBe(true); + expect(snapshot.context.publicationReplaceInFlight).toBe(true); snapshot = transitionVoiceScreenShareSnapshot(snapshot, { type: 'share.cancel', active: true, sourceType: 'display', }); - expect(snapshot.context.codecRepublishInFlight).toBe(false); + expect(snapshot.context.publicationReplaceInFlight).toBe(false); }); it('tracks codec readiness through the xstate context while starting', () => { @@ -158,76 +153,6 @@ describe('VoiceScreenShareStateMachine', () => { expect(snapshot.context.codecReadiness).toBe('idle'); }); - it('retains the latest queued codec republish request while screen share work is pending', () => { - let snapshot = transitionVoiceScreenShareSnapshot(createVoiceScreenShareSnapshot(), { - type: 'share.start', - sourceType: 'display', - }); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, { - type: 'share.codecRepublish.queue', - request: {codec: 'vp9', reason: 'manual', force: true}, - }); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, { - type: 'share.codecRepublish.queue', - request: {codec: 'vp9', reason: 'data', force: false}, - }); - expect(snapshot.context.pendingOperation).toBe('starting'); - expect(snapshot.context.queuedCodecRepublishRequest).toEqual({ - codec: 'vp9', - reason: 'data', - force: true, - }); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, { - type: 'share.codecRepublish.queue', - request: {codec: 'h264', reason: 'manual', force: false}, - }); - expect(snapshot.context.queuedCodecRepublishRequest).toEqual({ - codec: 'h264', - reason: 'manual', - force: false, - }); - snapshot = resolveActive(snapshot, 'display'); - expect(snapshot.context.queuedCodecRepublishRequest).toEqual({ - codec: 'h264', - reason: 'manual', - force: false, - }); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, {type: 'share.queuedCodecRepublish.clear'}); - expect(snapshot.context.queuedCodecRepublishRequest).toBeNull(); - }); - - it('records deferred codec republish requests without entering a pending state', () => { - let snapshot = resolveActive( - transitionVoiceScreenShareSnapshot(createVoiceScreenShareSnapshot(), { - type: 'share.start', - sourceType: 'display', - }), - ); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, { - type: 'share.codecRepublish.defer', - request: {codec: 'h264', reason: 'participant-connected', force: false}, - }); - expect(getVoiceScreenShareStateValue(snapshot)).toBe('active'); - expect(snapshot.context.pendingOperation).toBeNull(); - expect(snapshot.context.codecRepublishInFlight).toBe(false); - expect(snapshot.context.deferredCodecRepublishRequest).toEqual({ - codec: 'h264', - reason: 'participant-connected', - force: false, - }); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, { - type: 'share.codecRepublish.defer', - request: {codec: 'h264', reason: 'data', force: true}, - }); - expect(snapshot.context.deferredCodecRepublishRequest).toEqual({ - codec: 'h264', - reason: 'data', - force: true, - }); - snapshot = transitionVoiceScreenShareSnapshot(snapshot, {type: 'share.deferredCodecRepublish.clear'}); - expect(snapshot.context.deferredCodecRepublishRequest).toBeNull(); - }); - it('tracks active track ended cleanup independently from stop resolution', () => { let snapshot = resolveActive( transitionVoiceScreenShareSnapshot(createVoiceScreenShareSnapshot(), { diff --git a/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.ts b/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.ts index 24986b12d..3de3f48e9 100644 --- a/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.ts +++ b/fluxer_app/src/features/voice/engine/VoiceScreenShareStateMachine.ts @@ -1,32 +1,22 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {NegotiationReason} from '@app/features/voice/engine/ScreenShareCodecNegotiation'; import type {PendingScreenShareStopRequest} from '@app/features/voice/engine/voice_screen_share_manager/shared'; -import type {VideoCodec} from 'livekit-client'; import {assign, getInitialSnapshot, type SnapshotFrom, setup, transition} from 'xstate'; export type VoiceScreenShareSourceType = 'display' | 'native-display' | 'native-app' | 'device'; -export type VoiceScreenShareOperation = 'starting' | 'stopping' | 'replacing' | 'codecRepublishing' | 'restoring'; +export type VoiceScreenShareOperation = 'starting' | 'stopping' | 'replacing' | 'restoring'; export type VoiceScreenShareCodecReadiness = 'idle' | 'loading' | 'ready' | 'timeout'; export type VoiceScreenShareWatchCommand = {type: 'watch.add'; key: string} | {type: 'watch.remove'; key: string}; -export interface PendingScreenShareCodecRepublishRequest { - codec: VideoCodec; - reason: NegotiationReason; - force: boolean; -} - interface VoiceScreenShareContext { active: boolean; sourceType: VoiceScreenShareSourceType | null; pendingOperation: VoiceScreenShareOperation | null; queuedStopRequest: PendingScreenShareStopRequest | null; - queuedCodecRepublishRequest: PendingScreenShareCodecRepublishRequest | null; - deferredCodecRepublishRequest: PendingScreenShareCodecRepublishRequest | null; - codecRepublishInFlight: boolean; + publicationReplaceInFlight: boolean; codecReadiness: VoiceScreenShareCodecReadiness; encoderVerificationScheduled: boolean; endedTrackStopInFlight: boolean; @@ -41,11 +31,8 @@ export type VoiceScreenShareEvent = | { type: 'share.replace'; sourceType: VoiceScreenShareSourceType; - codecRepublishInFlight?: boolean; + publicationReplaceInFlight?: boolean; } - | {type: 'share.codecRepublish'} - | {type: 'share.codecRepublish.queue'; request: PendingScreenShareCodecRepublishRequest} - | {type: 'share.codecRepublish.defer'; request: PendingScreenShareCodecRepublishRequest} | { type: 'share.resolve'; active: boolean; @@ -73,8 +60,6 @@ export type VoiceScreenShareEvent = | {type: 'share.codecReadiness.reset'} | {type: 'share.streamingPriority.set'; active: boolean} | {type: 'share.queuedStop.clear'} - | {type: 'share.queuedCodecRepublish.clear'} - | {type: 'share.deferredCodecRepublish.clear'} | { type: 'share.localWatcher.sync'; enabled: boolean; @@ -92,9 +77,7 @@ function initialContext(): VoiceScreenShareContext { sourceType: null, pendingOperation: null, queuedStopRequest: null, - queuedCodecRepublishRequest: null, - deferredCodecRepublishRequest: null, - codecRepublishInFlight: false, + publicationReplaceInFlight: false, codecReadiness: 'idle', encoderVerificationScheduled: false, endedTrackStopInFlight: false, @@ -107,15 +90,14 @@ function beginOperation( context: VoiceScreenShareContext, pendingOperation: VoiceScreenShareOperation, sourceType: VoiceScreenShareSourceType | null = context.sourceType, - codecRepublishInFlight = false, + publicationReplaceInFlight = false, ): VoiceScreenShareContext { if (context.pendingOperation) return context; return { ...context, pendingOperation, sourceType, - deferredCodecRepublishRequest: null, - codecRepublishInFlight, + publicationReplaceInFlight, codecReadiness: 'idle', }; } @@ -140,7 +122,7 @@ function beginStop( ...context, pendingOperation: 'stopping', queuedStopRequest: null, - codecRepublishInFlight: false, + publicationReplaceInFlight: false, codecReadiness: 'idle', encoderVerificationScheduled: false, streamingPriorityHeld: false, @@ -159,9 +141,8 @@ function resolveOperation( active, sourceType: active ? (sourceType ?? context.sourceType) : null, pendingOperation: null, - codecRepublishInFlight: false, + publicationReplaceInFlight: false, codecReadiness: active ? context.codecReadiness : 'idle', - deferredCodecRepublishRequest: active ? context.deferredCodecRepublishRequest : null, encoderVerificationScheduled: encoderVerificationScheduled ?? (active && context.encoderVerificationScheduled), streamingPriorityHeld: streamingPriorityHeld ?? (active && context.streamingPriorityHeld), }; @@ -177,51 +158,13 @@ function rejectOperation( active, sourceType: active ? (sourceType ?? context.sourceType) : null, pendingOperation: null, - codecRepublishInFlight: false, + publicationReplaceInFlight: false, codecReadiness: active ? context.codecReadiness : 'idle', - deferredCodecRepublishRequest: active ? context.deferredCodecRepublishRequest : null, encoderVerificationScheduled: active && context.encoderVerificationScheduled, streamingPriorityHeld: active && context.streamingPriorityHeld, }; } -function queueCodecRepublish( - context: VoiceScreenShareContext, - request: PendingScreenShareCodecRepublishRequest, -): VoiceScreenShareContext { - const force = - context.queuedCodecRepublishRequest?.codec === request.codec - ? context.queuedCodecRepublishRequest.force || request.force - : request.force; - return { - ...context, - queuedCodecRepublishRequest: { - codec: request.codec, - reason: request.reason, - force, - }, - }; -} - -function deferCodecRepublish( - context: VoiceScreenShareContext, - request: PendingScreenShareCodecRepublishRequest, -): VoiceScreenShareContext { - const force = - context.deferredCodecRepublishRequest?.codec === request.codec - ? context.deferredCodecRepublishRequest.force || request.force - : request.force; - return { - ...context, - deferredCodecRepublishRequest: { - codec: request.codec, - reason: request.reason, - force, - }, - codecRepublishInFlight: false, - }; -} - function setCodecReadiness( context: VoiceScreenShareContext, codecReadiness: VoiceScreenShareCodecReadiness, @@ -266,16 +209,9 @@ export const voiceScreenShareStateMachine = setup({ stop: assign(({context, event}) => (event.type === 'share.stop' ? beginStop(context, event.request) : context)), replace: assign(({context, event}) => event.type === 'share.replace' - ? beginOperation(context, 'replacing', event.sourceType, event.codecRepublishInFlight === true) + ? beginOperation(context, 'replacing', event.sourceType, event.publicationReplaceInFlight === true) : context, ), - codecRepublish: assign(({context}) => beginOperation(context, 'codecRepublishing', context.sourceType, true)), - queueCodecRepublish: assign(({context, event}) => - event.type === 'share.codecRepublish.queue' ? queueCodecRepublish(context, event.request) : context, - ), - deferCodecRepublish: assign(({context, event}) => - event.type === 'share.codecRepublish.defer' ? deferCodecRepublish(context, event.request) : context, - ), resolve: assign(({context, event}) => event.type === 'share.resolve' ? resolveOperation( @@ -328,12 +264,6 @@ export const voiceScreenShareStateMachine = setup({ clearQueuedStop: assign(({context}) => context.queuedStopRequest ? {...context, queuedStopRequest: null} : context, ), - clearQueuedCodecRepublish: assign(({context}) => - context.queuedCodecRepublishRequest ? {...context, queuedCodecRepublishRequest: null} : context, - ), - clearDeferredCodecRepublish: assign(({context}) => - context.deferredCodecRepublishRequest ? {...context, deferredCodecRepublishRequest: null} : context, - ), syncLocalWatcher: assign(({context, event}) => event.type === 'share.localWatcher.sync' ? syncLocalWatcher(context, event.enabled, event.streamKey, event.currentViewerStreamKeys) @@ -368,9 +298,6 @@ export const voiceScreenShareStateMachine = setup({ 'share.restore': {target: 'routing', actions: 'restore'}, 'share.stop': {target: 'routing', actions: 'stop'}, 'share.replace': {target: 'routing', actions: 'replace'}, - 'share.codecRepublish': {target: 'routing', actions: 'codecRepublish'}, - 'share.codecRepublish.queue': {target: 'routing', actions: 'queueCodecRepublish'}, - 'share.codecRepublish.defer': {target: 'routing', actions: 'deferCodecRepublish'}, 'share.resolve': {target: 'routing', actions: 'resolve'}, 'share.reject': {target: 'routing', actions: 'reject'}, 'share.cancel': {target: 'routing', actions: 'reject'}, @@ -380,8 +307,6 @@ export const voiceScreenShareStateMachine = setup({ 'share.encoderVerification.cleared': {target: 'routing', actions: 'clearEncoderVerification'}, 'share.streamingPriority.set': {target: 'routing', actions: 'setStreamingPriority'}, 'share.queuedStop.clear': {target: 'routing', actions: 'clearQueuedStop'}, - 'share.queuedCodecRepublish.clear': {target: 'routing', actions: 'clearQueuedCodecRepublish'}, - 'share.deferredCodecRepublish.clear': {target: 'routing', actions: 'clearDeferredCodecRepublish'}, 'share.localWatcher.sync': {target: 'routing', actions: 'syncLocalWatcher'}, 'share.clearWatchCommands': {actions: 'clearWatchCommands'}, 'share.reset': {target: 'routing', actions: 'reset'}, @@ -393,9 +318,6 @@ export const voiceScreenShareStateMachine = setup({ 'share.restore': {target: 'routing', actions: 'restore'}, 'share.stop': {target: 'routing', actions: 'stop'}, 'share.replace': {target: 'routing', actions: 'replace'}, - 'share.codecRepublish': {target: 'routing', actions: 'codecRepublish'}, - 'share.codecRepublish.queue': {target: 'routing', actions: 'queueCodecRepublish'}, - 'share.codecRepublish.defer': {target: 'routing', actions: 'deferCodecRepublish'}, 'share.resolve': {target: 'routing', actions: 'resolve'}, 'share.reject': {target: 'routing', actions: 'reject'}, 'share.cancel': {target: 'routing', actions: 'reject'}, @@ -405,8 +327,6 @@ export const voiceScreenShareStateMachine = setup({ 'share.encoderVerification.cleared': {target: 'routing', actions: 'clearEncoderVerification'}, 'share.streamingPriority.set': {target: 'routing', actions: 'setStreamingPriority'}, 'share.queuedStop.clear': {target: 'routing', actions: 'clearQueuedStop'}, - 'share.queuedCodecRepublish.clear': {target: 'routing', actions: 'clearQueuedCodecRepublish'}, - 'share.deferredCodecRepublish.clear': {target: 'routing', actions: 'clearDeferredCodecRepublish'}, 'share.localWatcher.sync': {target: 'routing', actions: 'syncLocalWatcher'}, 'share.clearWatchCommands': {actions: 'clearWatchCommands'}, 'share.reset': {target: 'routing', actions: 'reset'}, @@ -418,9 +338,6 @@ export const voiceScreenShareStateMachine = setup({ 'share.restore': {actions: 'restore'}, 'share.stop': {actions: 'stop'}, 'share.replace': {actions: 'replace'}, - 'share.codecRepublish': {actions: 'codecRepublish'}, - 'share.codecRepublish.queue': {actions: 'queueCodecRepublish'}, - 'share.codecRepublish.defer': {actions: 'deferCodecRepublish'}, 'share.resolve': {target: 'routing', actions: 'resolve'}, 'share.reject': {target: 'routing', actions: 'reject'}, 'share.cancel': {target: 'routing', actions: 'reject'}, @@ -430,8 +347,6 @@ export const voiceScreenShareStateMachine = setup({ 'share.encoderVerification.cleared': {actions: 'clearEncoderVerification'}, 'share.streamingPriority.set': {actions: 'setStreamingPriority'}, 'share.queuedStop.clear': {actions: 'clearQueuedStop'}, - 'share.queuedCodecRepublish.clear': {actions: 'clearQueuedCodecRepublish'}, - 'share.deferredCodecRepublish.clear': {actions: 'clearDeferredCodecRepublish'}, 'share.localWatcher.sync': {actions: 'syncLocalWatcher'}, 'share.clearWatchCommands': {actions: 'clearWatchCommands'}, 'share.reset': {target: 'routing', actions: 'reset'}, diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecCapability.test.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecCapability.test.ts deleted file mode 100644 index 7c0aad138..000000000 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecCapability.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {VoiceEngineV2VideoCodec} from '@fluxer/voice_engine_v2'; -import {describe, expect, it} from 'vitest'; -import {capVoiceEngineV2DecodableVideoCodecs} from './VoiceEngineV2AppCodecCapability'; - -const FULL: Array = ['av1', 'h265', 'vp9', 'h264', 'vp8']; - -describe('capVoiceEngineV2DecodableVideoCodecs', () => { - it('is a no-op for auto', () => { - expect(capVoiceEngineV2DecodableVideoCodecs(FULL, 'auto')).toEqual(FULL); - }); - - it('drops codecs more efficient than the cap so the advertised best is the cap', () => { - expect(capVoiceEngineV2DecodableVideoCodecs(FULL, 'h264')).toEqual(['h264', 'vp8']); - expect(capVoiceEngineV2DecodableVideoCodecs(FULL, 'vp9')).toEqual(['vp9', 'h264', 'vp8']); - expect(capVoiceEngineV2DecodableVideoCodecs(FULL, 'vp8')).toEqual(['vp8']); - }); - - it('keeps the cap and everything more compatible, regardless of true support gaps', () => { - const partial: Array = ['av1', 'h264', 'vp8']; - expect(capVoiceEngineV2DecodableVideoCodecs(partial, 'vp9')).toEqual(['h264', 'vp8']); - }); -}); diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecCapability.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecCapability.ts deleted file mode 100644 index eecf09b89..000000000 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecCapability.ts +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {CodecPreference} from '@app/features/voice/utils/CodecCapabilityDetector'; -import {getVideoDecoderExclusionsSync} from '@app/features/voice/utils/VideoDecoderCapabilities'; -import {type VoiceEngineV2VideoCodec, voiceEngineV2VideoCodecRank} from '@fluxer/voice_engine_v2'; - -const ALL_VIDEO_CODECS: ReadonlyArray = ['av1', 'h265', 'vp9', 'h264', 'vp8']; -const BASELINE_VIDEO_CODECS: ReadonlyArray = ['h264', 'vp8']; - -function trueDecodableVideoCodecs(): Array { - const exclusions = getVideoDecoderExclusionsSync(); - if (exclusions === null) return [...BASELINE_VIDEO_CODECS]; - const excluded = new Set(exclusions); - return ALL_VIDEO_CODECS.filter((codec) => !excluded.has(codec)); -} - -export function capVoiceEngineV2DecodableVideoCodecs( - base: ReadonlyArray, - cap: CodecPreference, -): Array { - if (cap === 'auto') return [...base]; - const capRank = voiceEngineV2VideoCodecRank(cap); - return base.filter((codec) => voiceEngineV2VideoCodecRank(codec) >= capRank); -} - -export function getLocalDecodableVideoCodecs(cap: CodecPreference): Array { - return capVoiceEngineV2DecodableVideoCodecs(trueDecodableVideoCodecs(), cap); -} diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecGossipAdapter.test.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecGossipAdapter.test.ts deleted file mode 100644 index 9c1165b8a..000000000 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecGossipAdapter.test.ts +++ /dev/null @@ -1,118 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {encodeVoiceEngineV2CodecGossip, type VoiceEngineV2WatchedStream} from '@fluxer/voice_engine_v2'; -import {describe, expect, it} from 'vitest'; -import { - computeVoiceEngineV2WatchedStreamGossip, - ingestVoiceEngineV2CodecGossip, - type VoiceEngineV2CodecGossipController, -} from './VoiceEngineV2AppCodecGossipAdapter'; - -function recordingController(): VoiceEngineV2CodecGossipController & { - viewerCalls: Array; - capabilityCalls: Array; -} { - const viewerCalls: Array = []; - const capabilityCalls: Array = []; - return { - viewerCalls, - capabilityCalls, - reportStreamViewer: (source, viewerIdentity, watching, supportedVideoCodecs) => { - viewerCalls.push({source, viewerIdentity, watching, supportedVideoCodecs}); - }, - reportRemoteVideoCodecCapability: (identity, supportedVideoCodecs) => { - capabilityCalls.push({identity, supportedVideoCodecs}); - }, - }; -} - -function watchedStream(participantIdentity: string, source: string): VoiceEngineV2WatchedStream { - return {participantIdentity, source, trackSid: null, quality: null, enabled: true}; -} - -describe('ingestVoiceEngineV2CodecGossip', () => { - it('dispatches a viewing message as a stream-viewer report', () => { - const controller = recordingController(); - const payload = encodeVoiceEngineV2CodecGossip({ - kind: 'codec.viewing', - source: 'screen', - watching: true, - supportedVideoCodecs: ['h264', 'vp8'], - }); - expect(ingestVoiceEngineV2CodecGossip(controller, 'bob', payload)).toBe(true); - expect(controller.viewerCalls).toEqual([ - {source: 'screen', viewerIdentity: 'bob', watching: true, supportedVideoCodecs: ['h264', 'vp8']}, - ]); - }); - - it('dispatches a capability message as a remote capability report', () => { - const controller = recordingController(); - const payload = encodeVoiceEngineV2CodecGossip({kind: 'codec.capability', supportedVideoCodecs: ['av1', 'vp9']}); - expect(ingestVoiceEngineV2CodecGossip(controller, 'alice', payload)).toBe(true); - expect(controller.capabilityCalls).toEqual([{identity: 'alice', supportedVideoCodecs: ['av1', 'vp9']}]); - }); - - it('ignores malformed payloads and unknown senders without touching the controller', () => { - const controller = recordingController(); - expect(ingestVoiceEngineV2CodecGossip(controller, 'bob', 'garbage')).toBe(false); - expect( - ingestVoiceEngineV2CodecGossip( - controller, - '', - encodeVoiceEngineV2CodecGossip({kind: 'codec.capability', supportedVideoCodecs: []}), - ), - ).toBe(false); - expect(controller.viewerCalls).toEqual([]); - expect(controller.capabilityCalls).toEqual([]); - }); -}); - -describe('computeVoiceEngineV2WatchedStreamGossip', () => { - it('emits watching=true for newly watched video streams only', () => { - const previous = new Map(); - const result = computeVoiceEngineV2WatchedStreamGossip( - previous, - { - a: watchedStream('alice', 'screen'), - b: watchedStream('bob', 'camera'), - c: watchedStream('carol', 'microphone'), - }, - ['av1', 'h264', 'vp8'], - ); - expect(result.messages).toEqual([ - { - destinationIdentity: 'alice', - message: { - kind: 'codec.viewing', - source: 'screen', - watching: true, - supportedVideoCodecs: ['av1', 'h264', 'vp8'], - }, - }, - { - destinationIdentity: 'bob', - message: { - kind: 'codec.viewing', - source: 'camera', - watching: true, - supportedVideoCodecs: ['av1', 'h264', 'vp8'], - }, - }, - ]); - expect(result.next.size).toBe(2); - }); - - it('emits watching=false when a stream is no longer watched and nothing for steady state', () => { - const first = computeVoiceEngineV2WatchedStreamGossip(new Map(), {a: watchedStream('alice', 'screen')}, ['h264']); - const steady = computeVoiceEngineV2WatchedStreamGossip(first.next, {a: watchedStream('alice', 'screen')}, ['h264']); - expect(steady.messages).toEqual([]); - const stopped = computeVoiceEngineV2WatchedStreamGossip(steady.next, {}, ['h264']); - expect(stopped.messages).toEqual([ - { - destinationIdentity: 'alice', - message: {kind: 'codec.viewing', source: 'screen', watching: false, supportedVideoCodecs: ['h264']}, - }, - ]); - expect(stopped.next.size).toBe(0); - }); -}); diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecGossipAdapter.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecGossipAdapter.ts deleted file mode 100644 index 76c366c23..000000000 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppCodecGossipAdapter.ts +++ /dev/null @@ -1,90 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import { - decodeVoiceEngineV2CodecGossip, - type VoiceEngineV2CodecGossipMessage, - type VoiceEngineV2LocalStreamSource, - type VoiceEngineV2VideoCodec, - type VoiceEngineV2WatchedStream, -} from '@fluxer/voice_engine_v2'; - -export interface VoiceEngineV2CodecGossipController { - reportStreamViewer( - source: VoiceEngineV2LocalStreamSource, - viewerIdentity: string, - watching: boolean, - supportedVideoCodecs: Array, - ): void; - reportRemoteVideoCodecCapability(identity: string, supportedVideoCodecs: Array): void; -} - -export interface VoiceEngineV2WatchedStreamGossip { - destinationIdentity: string; - message: VoiceEngineV2CodecGossipMessage; -} - -export interface VoiceEngineV2WatchedStreamGossipResult { - messages: Array; - next: Map; -} - -function watchedStreamGossipKey(identity: string, source: VoiceEngineV2LocalStreamSource): string { - return `${source}\u0000${identity}`; -} - -export function ingestVoiceEngineV2CodecGossip( - controller: VoiceEngineV2CodecGossipController, - senderIdentity: string, - payload: ArrayBuffer | ArrayBufferView | string, -): boolean { - if (senderIdentity.length === 0) return false; - const message = decodeVoiceEngineV2CodecGossip(payload); - if (message === null) return false; - if (message.kind === 'codec.capability') { - controller.reportRemoteVideoCodecCapability(senderIdentity, message.supportedVideoCodecs); - return true; - } - controller.reportStreamViewer(message.source, senderIdentity, message.watching, message.supportedVideoCodecs); - return true; -} - -export function computeVoiceEngineV2WatchedStreamGossip( - previous: Map, - watchedStreams: Record, - localSupportedVideoCodecs: Array, -): VoiceEngineV2WatchedStreamGossipResult { - const next = new Map(); - for (const stream of Object.values(watchedStreams)) { - if (stream.source !== 'camera' && stream.source !== 'screen') continue; - next.set(watchedStreamGossipKey(stream.participantIdentity, stream.source), { - identity: stream.participantIdentity, - source: stream.source, - }); - } - const messages: Array = []; - for (const [key, entry] of next) { - if (previous.has(key)) continue; - messages.push({ - destinationIdentity: entry.identity, - message: { - kind: 'codec.viewing', - source: entry.source, - watching: true, - supportedVideoCodecs: localSupportedVideoCodecs, - }, - }); - } - for (const [key, entry] of previous) { - if (next.has(key)) continue; - messages.push({ - destinationIdentity: entry.identity, - message: { - kind: 'codec.viewing', - source: entry.source, - watching: false, - supportedVideoCodecs: localSupportedVideoCodecs, - }, - }); - } - return {messages, next}; -} diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareCodecMigration.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareCodecMigration.ts deleted file mode 100644 index 2db6b9842..000000000 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareCodecMigration.ts +++ /dev/null @@ -1,595 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import assert from 'node:assert/strict'; -import {Platform} from '@app/features/platform/types/Platform'; -import type {NegotiationReason} from '@app/features/voice/engine/ScreenShareCodecNegotiation'; -import ScreenSharePublicationMigration from '@app/features/voice/engine/ScreenSharePublicationMigration'; -import {updateLocalParticipantFromRoom} from '@app/features/voice/engine/VoiceMediaEngineBridge'; -import {selectScreenShareCodecRepublishDecision} from '@app/features/voice/engine/VoiceScreenShareCodecRepublishPolicy'; -import {enforceLocalMediaPublicationCap} from '@app/features/voice/engine/VoiceTrackPublicationUtils'; -import {VoiceTrackSource} from '@app/features/voice/engine/VoiceTrackSource'; -import type {VoiceEngineV2AppScreenShareExecutionAdapter} from '@app/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter'; -import {logger, releaseScreenShareCaptureCleanup} from '@app/features/voice/engine/voice_screen_share_manager/shared'; -import {SCREEN_SHARE_DEGRADATION_PREFERENCE} from '@app/features/voice/utils/ScreenShareOptions'; -import { - type LocalParticipant, - type LocalTrackPublication, - type LocalVideoTrack, - type Room, - type ScreenShareCaptureOptions, - Track, - type TrackPublishOptions, - type VideoCodec, -} from 'livekit-client'; - -interface MigrationContext { - readonly room: Room; - readonly participant: LocalParticipant; - readonly publication: LocalTrackPublication; - readonly screenShareTrack: LocalVideoTrack; - readonly mediaStreamTrack: MediaStreamTrack; - readonly previousOptions: TrackPublishOptions; - readonly nextPublishOptions: TrackPublishOptions; - readonly currentCodec?: VideoCodec; - readonly codec: VideoCodec; - readonly reason: NegotiationReason; - readonly forced: boolean; - readonly migrationId: string; - readonly generation: number; - readonly previousTrackSid: string | null; - readonly previousTrackName: string | undefined; -} - -type ScreenShareVideoConstraints = MediaTrackConstraints & { - colorSpace?: string; - cursor?: 'always' | 'motion' | 'never'; -}; - -interface MigrationState { - candidateMediaStreamTrack: MediaStreamTrack | null; - candidatePublication: LocalTrackPublication | null; - candidateTrack: LocalVideoTrack | undefined; - oldVideoUnpublished: boolean; - committedTrackSid: string | null; -} - -export class VoiceEngineV2AppScreenShareCodecMigration { - private readonly adapter: VoiceEngineV2AppScreenShareExecutionAdapter; - - constructor(adapter: VoiceEngineV2AppScreenShareExecutionAdapter) { - this.adapter = adapter; - } - - private async applyActiveAudioSetting(participant: LocalParticipant, audio: boolean): Promise { - assert.ok(participant); - assert.equal(typeof audio, 'boolean'); - const screenShareAudioPublication = participant.getTrackPublication(Track.Source.ScreenShareAudio); - if (!screenShareAudioPublication) { - if (audio) { - logger.info('Cannot enable screen share audio without restarting screen share'); - } - return false; - } - try { - if (audio) { - await screenShareAudioPublication.unmute(); - } else { - await screenShareAudioPublication.mute(); - } - return true; - } catch (error) { - logger.warn('Failed to update active screen share audio state', {error, includeAudio: audio}); - return false; - } - } - - private async applyActiveResolutionSetting( - screenShareTrack: LocalVideoTrack, - resolution: NonNullable, - ): Promise { - assert.ok(screenShareTrack); - assert.ok(resolution); - const mediaStreamTrack = screenShareTrack.mediaStreamTrack; - const currentConstraints = mediaStreamTrack.getConstraints() as ScreenShareVideoConstraints; - const nextConstraints: ScreenShareVideoConstraints = {...currentConstraints}; - if (resolution.width > 0) nextConstraints.width = {ideal: resolution.width}; - if (resolution.height > 0) nextConstraints.height = {ideal: resolution.height}; - if (resolution.frameRate !== undefined) { - nextConstraints.frameRate = {ideal: resolution.frameRate, max: resolution.frameRate}; - } - if (JSON.stringify(currentConstraints) === JSON.stringify(nextConstraints)) return true; - try { - await mediaStreamTrack.applyConstraints(nextConstraints); - return true; - } catch (error) { - logger.warn('Failed to update active screen share constraints', {error, resolution}); - return false; - } - } - - async updateActiveSettings( - room: Room | null, - options?: ScreenShareCaptureOptions, - publishOptions?: TrackPublishOptions, - ): Promise { - assert.ok(options === undefined || typeof options === 'object'); - if (Platform.OS !== 'web') { - logger.warn('Screen share updates are not supported on native'); - return false; - } - const participant = room?.localParticipant; - if (!participant || !participant.isScreenShareEnabled) return false; - const screenSharePublication = participant.getTrackPublication(Track.Source.ScreenShare); - const screenShareTrack = screenSharePublication?.videoTrack; - if (!screenShareTrack) { - logger.warn('No active screen share track to update'); - return false; - } - let appliedAnySetting = false; - if (typeof options?.audio === 'boolean') { - appliedAnySetting = (await this.applyActiveAudioSetting(participant, options.audio)) || appliedAnySetting; - } - if (options?.resolution) { - appliedAnySetting = - (await this.applyActiveResolutionSetting(screenShareTrack, options.resolution)) || appliedAnySetting; - } - if (options && Object.hasOwn(options, 'contentHint')) { - screenShareTrack.mediaStreamTrack.contentHint = options.contentHint ?? ''; - appliedAnySetting = true; - } - await screenShareTrack.setDegradationPreference(SCREEN_SHARE_DEGRADATION_PREFERENCE); - await this.adapter.enforceScreenShareSenderParametersInternal(participant, publishOptions); - this.adapter.ensureScreenShareKeepAliveSinkInternal(participant); - appliedAnySetting = true; - updateLocalParticipantFromRoom(room); - this.adapter.syncLocalScreenShareAudioStateInternal(participant, participant.isScreenShareEnabled); - return appliedAnySetting; - } - - private getMigrationPublishOptions( - publishOptions: TrackPublishOptions | undefined, - trackName: string | undefined, - ): TrackPublishOptions { - return { - ...publishOptions, - source: Track.Source.ScreenShare, - stream: VoiceTrackSource.ScreenShare, - ...(trackName ? {name: trackName} : {}), - }; - } - - private getMigrationPublicationTrack( - publication: LocalTrackPublication, - role: 'candidate' | 'fallback', - ): {track: LocalVideoTrack; trackSid: string} { - const track = publication.videoTrack as LocalVideoTrack | undefined; - if (!track) { - throw new Error(`screen share codec migration ${role} published without a local video track`); - } - const trackSid = publication.trackSid; - if (!trackSid) { - throw new Error(`screen share codec migration ${role} published without a track SID`); - } - return {track, trackSid}; - } - - private async activateMigrationPublication(args: { - room: Room; - participant: LocalParticipant; - publication: LocalTrackPublication; - track: LocalVideoTrack; - publishOptions?: TrackPublishOptions; - reapplySenderParameters?: boolean; - }): Promise { - const {room, participant, publication, track, publishOptions, reapplySenderParameters = false} = args; - await enforceLocalMediaPublicationCap(participant, VoiceTrackSource.ScreenShare, { - preferredPublication: publication, - }); - this.adapter.applyScreenShareContentHintInternal(participant, undefined, track); - if (reapplySenderParameters) { - await this.adapter.enforceScreenShareTrackSenderParametersInternal(track, publishOptions); - } - this.adapter.bindScreenShareSenderParameterReapplyInternal(participant, publishOptions, track); - this.adapter.ensureScreenShareKeepAliveSinkInternal(participant, track); - this.adapter.monitorActiveScreenShareEndInternal(room, participant, track); - this.adapter.startEncoderVerificationInternal(room, participant, publishOptions?.videoCodec, track); - this.adapter.applyScreenShareStateInternal(true, {reason: 'server', sendUpdate: false}); - updateLocalParticipantFromRoom(room); - this.adapter.syncLocalStreamWatchStateInternal(true); - this.adapter.syncLocalScreenShareAudioStateInternal(participant, true); - } - - private async commitMigration(ctx: MigrationContext, state: MigrationState, trackSid: string): Promise { - assert.equal(typeof trackSid, 'string'); - assert.ok(state); - const commitMessage = { - migration_id: ctx.migrationId, - generation: ctx.generation, - previous_track_sid: ctx.previousTrackSid, - candidate_track_sid: trackSid, - }; - await ScreenSharePublicationMigration.publishCommit(ctx.room, commitMessage).catch((error) => { - logger.warn('Failed to publish screen share codec migration commit', { - error, - migrationId: ctx.migrationId, - trackSid, - }); - }); - ScreenSharePublicationMigration.markLocalMigrationCommitted(ctx.participant.identity, commitMessage); - state.committedTrackSid = trackSid; - } - - private async abortMigration(ctx: MigrationContext, state: MigrationState, abortReason: string): Promise { - assert.ok(ctx); - assert.equal(typeof abortReason, 'string'); - if (state.committedTrackSid) return; - const abortMessage = { - migration_id: ctx.migrationId, - generation: ctx.generation, - candidate_track_sid: state.candidatePublication?.trackSid ?? null, - reason: abortReason, - }; - await ScreenSharePublicationMigration.publishAbort(ctx.room, abortMessage).catch((error) => { - logger.warn('Failed to publish screen share codec migration abort', { - error, - migrationId: ctx.migrationId, - reason: abortReason, - }); - }); - ScreenSharePublicationMigration.markLocalMigrationAborted(ctx.participant.identity, abortMessage); - } - - private isPreviousCodecRestorable(ctx: MigrationContext, state: MigrationState): boolean { - if (!state.oldVideoUnpublished) return false; - if (ctx.mediaStreamTrack.readyState === 'ended') return false; - return true; - } - - private async restorePreviousCodec( - ctx: MigrationContext, - state: MigrationState, - restoreError: unknown, - ): Promise { - assert.ok(ctx); - assert.ok(state); - if (!this.isPreviousCodecRestorable(ctx, state)) return false; - try { - const effectivePreviousOptions = await this.adapter.getEffectivePublishOptionsInternal(true, ctx.previousOptions); - const fallbackPublication = await ctx.participant.publishTrack( - ctx.mediaStreamTrack, - this.getMigrationPublishOptions(effectivePreviousOptions, ctx.previousTrackName), - ); - const fallbackTrackInfo = this.getMigrationPublicationTrack(fallbackPublication, 'fallback'); - await this.adapter.enforceScreenShareTrackSenderParametersInternal( - fallbackTrackInfo.track, - effectivePreviousOptions, - ); - await this.commitMigration(ctx, state, fallbackTrackInfo.trackSid); - await this.activateMigrationPublication({ - room: ctx.room, - participant: ctx.participant, - publication: fallbackPublication, - track: fallbackTrackInfo.track, - publishOptions: effectivePreviousOptions, - }); - logger.warn('Restored previous screen share codec after break-before-make migration failed', { - error: restoreError, - migrationId: ctx.migrationId, - previousCodec: ctx.currentCodec, - failedCodec: ctx.codec, - reason: ctx.reason, - }); - return true; - } catch (fallbackError) { - logger.warn('Failed to restore previous screen share codec after break-before-make migration failed', { - error: fallbackError, - originalError: restoreError, - migrationId: ctx.migrationId, - previousCodec: ctx.currentCodec, - failedCodec: ctx.codec, - }); - return false; - } - } - - private async announceBreakAndUnpublish(ctx: MigrationContext, state: MigrationState): Promise { - assert.ok(ctx); - assert.ok(state); - const publishBreakMessage = { - migration_id: ctx.migrationId, - generation: ctx.generation, - previous_track_sid: ctx.previousTrackSid, - codec: ctx.codec, - reason: ctx.reason, - }; - ScreenSharePublicationMigration.markLocalMigrationBreaking(ctx.participant.identity, publishBreakMessage); - await ScreenSharePublicationMigration.publishBreak(ctx.room, { - migrationId: ctx.migrationId, - generation: ctx.generation, - previousTrackSid: ctx.previousTrackSid, - codec: ctx.codec, - reason: ctx.reason, - }).catch((error) => { - logger.warn('Failed to publish screen share codec break-before-make announcement', { - error, - migrationId: ctx.migrationId, - codec: ctx.codec, - reason: ctx.reason, - }); - }); - this.adapter.cleanupActiveScreenShareEndListenerInternal(); - this.adapter.applyScreenShareStateInternal(true, {reason: 'server', sendUpdate: false}); - const codecRepublishCleanupSnapshot = this.adapter.getScreenShareSimulcastCleanupSnapshotInternal( - ctx.screenShareTrack, - ); - await ctx.participant.unpublishTrack(ctx.screenShareTrack, false); - state.oldVideoUnpublished = true; - this.adapter.applyScreenShareStateInternal(true, {reason: 'server', sendUpdate: false}); - await releaseScreenShareCaptureCleanup(codecRepublishCleanupSnapshot); - } - - private async runMigrationHappyPath(ctx: MigrationContext, state: MigrationState): Promise { - assert.ok(ctx); - assert.ok(state); - const effectivePublishOptions = await this.adapter.getEffectivePublishOptionsInternal(true, ctx.nextPublishOptions); - state.candidateMediaStreamTrack = - typeof ctx.mediaStreamTrack.clone === 'function' ? ctx.mediaStreamTrack.clone() : ctx.mediaStreamTrack; - this.adapter.applyScreenShareContentHintToMediaTrackInternal(state.candidateMediaStreamTrack); - this.adapter.cancelEncoderVerificationInternal(); - await this.announceBreakAndUnpublish(ctx, state); - state.candidatePublication = await ctx.participant.publishTrack( - state.candidateMediaStreamTrack, - this.getMigrationPublishOptions(effectivePublishOptions, ctx.previousTrackName), - ); - const candidateTrackInfo = this.getMigrationPublicationTrack(state.candidatePublication, 'candidate'); - state.candidateTrack = candidateTrackInfo.track; - await this.adapter.enforceScreenShareTrackSenderParametersInternal(state.candidateTrack, effectivePublishOptions); - await this.commitMigration(ctx, state, candidateTrackInfo.trackSid); - if (state.candidateMediaStreamTrack !== ctx.mediaStreamTrack) { - this.adapter.stopMediaTrackInternal(ctx.mediaStreamTrack); - } - await this.activateMigrationPublication({ - room: ctx.room, - participant: ctx.participant, - publication: state.candidatePublication, - track: state.candidateTrack, - publishOptions: effectivePublishOptions, - reapplySenderParameters: true, - }); - this.adapter.transitionScreenShareLifecycleInternal({ - type: 'share.resolve', - active: true, - sourceType: this.adapter.getActiveScreenShareSourceTypeInternal(), - encoderVerificationScheduled: this.adapter.encoderVerificationTimer != null, - streamingPriorityHeld: this.adapter.streamingPriorityHeld, - }); - logger.info('Migrated active screen share codec with break-before-make publication switch', { - migrationId: ctx.migrationId, - previousCodec: ctx.currentCodec, - codec: ctx.codec, - reason: ctx.reason, - forced: ctx.forced, - strategy: 'break-before-make', - }); - } - - private hasCandidateMediaTrackToStop(ctx: MigrationContext, state: MigrationState): boolean { - if (state.committedTrackSid) return false; - if (!state.candidateMediaStreamTrack) return false; - return state.candidateMediaStreamTrack !== ctx.mediaStreamTrack; - } - - private async cleanupCandidateAfterFailure(ctx: MigrationContext, state: MigrationState): Promise { - assert.ok(ctx); - assert.ok(state); - if (!state.committedTrackSid && state.candidateTrack) { - await ctx.participant.unpublishTrack(state.candidateTrack, false).catch((unpublishError) => { - logger.warn('Failed to unpublish screen share codec migration candidate after abort', { - error: unpublishError, - migrationId: ctx.migrationId, - }); - }); - } - if (this.hasCandidateMediaTrackToStop(ctx, state)) { - assert.ok(state.candidateMediaStreamTrack, 'candidateMediaStreamTrack expected after guard'); - this.adapter.stopMediaTrackInternal(state.candidateMediaStreamTrack); - } - } - - private async finalizeMigrationFailure(ctx: MigrationContext, state: MigrationState): Promise { - assert.ok(ctx); - assert.ok(state); - await this.abortMigration(ctx, state, state.oldVideoUnpublished ? 'publisher-error' : 'unpublish-error'); - const actual = ctx.participant.isScreenShareEnabled; - this.adapter.applyScreenShareStateInternal(actual, {forceSync: !actual, reason: 'user', sendUpdate: !actual}); - updateLocalParticipantFromRoom(ctx.room); - this.adapter.syncLocalStreamWatchStateInternal(actual); - this.adapter.syncLocalScreenShareAudioStateInternal(ctx.participant, actual); - if (actual) { - this.adapter.monitorActiveScreenShareEndInternal(ctx.room, ctx.participant); - await this.adapter.enforceScreenShareSenderParametersInternal(ctx.participant, ctx.previousOptions); - this.adapter.ensureScreenShareKeepAliveSinkInternal(ctx.participant); - } else { - await this.adapter.cleanupLingeringScreenShareTracks(ctx.participant); - } - this.adapter.transitionScreenShareLifecycleInternal({ - type: 'share.reject', - active: actual, - sourceType: actual ? this.adapter.getActiveScreenShareSourceTypeInternal() : null, - }); - } - - private async handleMigrationFailure(ctx: MigrationContext, state: MigrationState, error: unknown): Promise { - assert.ok(ctx); - assert.ok(state); - logger.warn('Failed to migrate active screen share codec with break-before-make', { - error, - migrationId: ctx.migrationId, - codec: ctx.codec, - reason: ctx.reason, - }); - await this.cleanupCandidateAfterFailure(ctx, state); - const shouldAttemptRestore = !state.committedTrackSid; - if (shouldAttemptRestore && (await this.restorePreviousCodec(ctx, state, error))) { - this.adapter.transitionScreenShareLifecycleInternal({ - type: 'share.resolve', - active: true, - sourceType: this.adapter.getActiveScreenShareSourceTypeInternal(), - encoderVerificationScheduled: this.adapter.encoderVerificationTimer != null, - streamingPriorityHeld: this.adapter.streamingPriorityHeld, - }); - logger.info('Completed screen share codec migration by falling back to previous codec', { - migrationId: ctx.migrationId, - previousCodec: ctx.currentCodec, - failedCodec: ctx.codec, - reason: ctx.reason, - forced: ctx.forced, - }); - return true; - } - await this.finalizeMigrationFailure(ctx, state); - return false; - } - - private async migrateBreakBeforeMake(args: { - room: Room; - participant: LocalParticipant; - publication: LocalTrackPublication; - screenShareTrack: LocalVideoTrack; - mediaStreamTrack: MediaStreamTrack; - previousOptions: TrackPublishOptions; - nextPublishOptions: TrackPublishOptions; - currentCodec?: VideoCodec; - codec: VideoCodec; - reason: NegotiationReason; - forced: boolean; - }): Promise { - assert.ok(args.room); - assert.ok(args.participant); - const ctx: MigrationContext = { - ...args, - migrationId: ScreenSharePublicationMigration.createMigrationId(), - generation: ++this.adapter.screenShareMigrationGeneration, - previousTrackSid: args.publication.trackSid ?? null, - previousTrackName: args.publication.trackName, - }; - const state: MigrationState = { - candidateMediaStreamTrack: null, - candidatePublication: null, - candidateTrack: undefined, - oldVideoUnpublished: false, - committedTrackSid: null, - }; - this.adapter.transitionScreenShareLifecycleInternal({type: 'share.codecRepublish'}); - try { - await this.runMigrationHappyPath(ctx, state); - return true; - } catch (error) { - return this.handleMigrationFailure(ctx, state, error); - } finally { - await this.adapter.applyPendingScreenShareRequestsInternal(ctx.room, ctx.participant); - } - } - - private async applyCodecRenegotiationNoop( - participant: LocalParticipant, - previousOptions: TrackPublishOptions, - currentCodec: VideoCodec | undefined, - ): Promise { - assert.ok(participant); - const effectivePublishOptions = await this.adapter.getEffectivePublishOptionsInternal(true, { - ...previousOptions, - ...(currentCodec ? {videoCodec: currentCodec} : {}), - }); - await this.adapter.enforceScreenShareSenderParametersInternal(participant, effectivePublishOptions); - } - - private buildCodecRenegotiationPublishOptions( - previousOptions: TrackPublishOptions, - codec: VideoCodec, - currentCodec: VideoCodec | undefined, - force: boolean, - ): TrackPublishOptions { - assert.equal(typeof force, 'boolean'); - const nextPublishOptions: TrackPublishOptions = {...previousOptions, videoCodec: codec}; - const codecChanged = currentCodec !== codec; - if (force || codecChanged) { - delete nextPublishOptions.backupCodec; - delete nextPublishOptions.backupCodecPolicy; - delete nextPublishOptions.scalabilityMode; - delete nextPublishOptions.simulcast; - } - return nextPublishOptions; - } - - async renegotiateActiveCodec( - room: Room | null, - codec: VideoCodec, - reason: NegotiationReason, - options: {force?: boolean} = {}, - ): Promise { - assert.equal(typeof codec, 'string'); - assert.ok(reason !== undefined, 'reason required'); - if (Platform.OS !== 'web') return false; - const participant = room?.localParticipant; - if (!room) return false; - if (!participant) return false; - if (!participant.isScreenShareEnabled) return false; - if (this.adapter.isScreenSharePending) { - this.adapter.queuePendingCodecRepublishRequestInternal(codec, reason, options); - return false; - } - await enforceLocalMediaPublicationCap(participant, VoiceTrackSource.ScreenShare); - const publication = participant.getTrackPublication(Track.Source.ScreenShare); - const screenShareTrack = publication?.videoTrack as LocalVideoTrack | undefined; - if (!publication) return false; - if (!screenShareTrack) return false; - if (screenShareTrack.mediaStreamTrack.readyState === 'ended') return false; - const mediaStreamTrack = screenShareTrack.mediaStreamTrack; - const previousOptions = ((publication as {options?: TrackPublishOptions}).options ?? {}) as TrackPublishOptions; - const currentCodec = screenShareTrack.codec ?? previousOptions.videoCodec; - const decision = selectScreenShareCodecRepublishDecision({ - currentCodec, - nextCodec: codec, - reason, - force: options.force, - }); - if (decision.action === 'noop') { - await this.applyCodecRenegotiationNoop(participant, previousOptions, currentCodec); - return false; - } - if (decision.action === 'defer') { - this.adapter.deferActiveCodecRepublishRequestInternal(codec, reason, options); - logger.info('Deferring negotiated screen share codec change until the next share start', { - currentCodec, - codec, - reason, - }); - return false; - } - const nextPublishOptions = this.buildCodecRenegotiationPublishOptions( - previousOptions, - codec, - currentCodec, - options.force === true, - ); - if (currentCodec === codec && !options.force) { - const effectivePublishOptions = await this.adapter.getEffectivePublishOptionsInternal(true, nextPublishOptions); - await this.adapter.enforceScreenShareSenderParametersInternal(participant, effectivePublishOptions); - return false; - } - return this.migrateBreakBeforeMake({ - room, - participant, - publication, - screenShareTrack, - mediaStreamTrack, - previousOptions, - nextPublishOptions, - currentCodec, - codec, - reason, - forced: options.force === true, - }); - } -} diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx index 195f90e78..3ac83dbe2 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareExecutionAdapter.tsx @@ -4,15 +4,18 @@ import assert from 'node:assert/strict'; import i18n from '@app/app/I18n'; import {GenericErrorModal} from '@app/features/app/components/alerts/GenericErrorModal'; import {SoundType} from '@app/features/notification/utils/SoundUtils'; +import {Platform} from '@app/features/platform/types/Platform'; import * as ModalCommands from '@app/features/ui/commands/ModalCommands'; import * as SoundCommands from '@app/features/ui/commands/SoundCommands'; import {getElectronAPI} from '@app/features/ui/utils/NativeUtils'; import * as VoiceSettingsCommands from '@app/features/voice/commands/VoiceSettingsCommands'; import {getStreamKey} from '@app/features/voice/components/StreamKeys'; -import type {NegotiationReason} from '@app/features/voice/engine/ScreenShareCodecNegotiation'; import ScreenShareCodecNegotiation from '@app/features/voice/engine/ScreenShareCodecNegotiation'; import {Store} from '@app/features/voice/engine/Store'; -import {getVoiceConnectionContextFromMediaEngine} from '@app/features/voice/engine/VoiceMediaEngineBridge'; +import { + getVoiceConnectionContextFromMediaEngine, + updateLocalParticipantFromRoom, +} from '@app/features/voice/engine/VoiceMediaEngineBridge'; import { normalizeVoiceMediaGraphViewerStreamKeys, selectVoiceMediaGraphViewerStreamKeys, @@ -29,7 +32,6 @@ import { getLocalScreenShareVideoPublications, unpublishLocalMediaPublications, } from '@app/features/voice/engine/VoiceTrackPublicationUtils'; -import {VoiceEngineV2AppScreenShareCodecMigration} from '@app/features/voice/engine/v2/VoiceEngineV2AppScreenShareCodecMigration'; import { selectVoiceEngineV2AppScreenShareSetEnabledOptions, type VoiceEngineV2AppScreenShareControllerGateway, @@ -52,7 +54,6 @@ import { getEffectivePublishOptions as resolveEffectivePublishOptions, type ScreenShareCaptureCleanupSnapshot, type ScreenShareCodecReadinessStatus, - type SimulcastTrackInfoLike, scheduleScreenShareEncoderVerification, stopMediaTrack, } from '@app/features/voice/engine/voice_screen_share_manager/shared'; @@ -73,6 +74,7 @@ import { commitNativeAudioBridgeReplacement, disarmNativeAudio, } from '@app/features/voice/utils/NativeAudioCaptureBridge'; +import {SCREEN_SHARE_DEGRADATION_PREFERENCE} from '@app/features/voice/utils/ScreenShareOptions'; import {ScreenShareRollbackIncompleteError} from '@app/features/voice/utils/ScreenShareRollbackIncompleteError'; import {handleScreenShareError} from '@app/features/voice/utils/ScreenShareUtils'; import type {NativeAudioStartOptions} from '@app/types/electron.d'; @@ -105,6 +107,17 @@ const SCREEN_SHARE_SOURCE_STOPPED_DESCRIPTOR = msg({ 'Body of a modal shown when a browser screen share track ends outside the app, for example from the browser sharing controls.', context: 'screen-share', }); +const SCREEN_SHARE_ENCODER_FAILED_DESCRIPTOR = msg({ + message: 'Your video encoder stopped encoding frames, so your screen share was stopped. Try sharing again.', + comment: + 'Body of a modal shown when the local video encoder produces no frames for an active screen share, which forces the share to stop.', + context: 'screen-share', +}); + +type ScreenShareVideoConstraints = MediaTrackConstraints & { + colorSpace?: string; + cursor?: 'always' | 'motion' | 'never'; +}; export interface ScreenShareReconnectSnapshot { videoTrack: MediaStreamTrack; @@ -121,10 +134,8 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { private activeScreenShareEndListener: (() => void) | null = null; private endedScreenShareStopInFlight: Promise | null = null; encoderVerificationTimer: NodeJS.Timeout | null = null; - screenShareMigrationGeneration = 0; sourceLifecycleBridge: VoiceEngineV2AppSourceLifecycleBridge | null = null; - readonly codecMigration: VoiceEngineV2AppScreenShareCodecMigration; readonly liveKitFlows: VoiceEngineV2AppScreenShareLiveKitFlows; readonly controllerRouting: VoiceEngineV2AppScreenShareControllerRouting; @@ -134,7 +145,6 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { this.trackPlumbing = new VoiceEngineV2AppScreenShareTrackPlumbing({ getActiveContentSource: () => this.getActiveScreenShareContentSourceInternal(), }); - this.codecMigration = new VoiceEngineV2AppScreenShareCodecMigration(this); this.liveKitFlows = new VoiceEngineV2AppScreenShareLiveKitFlows(this); this.controllerRouting = new VoiceEngineV2AppScreenShareControllerRouting(this); } @@ -193,8 +203,8 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { this.trackPlumbing.clearKeepAliveSink(); } - isScreenShareCodecRepublishInFlight(): boolean { - return this.lifecycle.codecRepublishInFlight; + isScreenSharePublicationReplaceInFlight(): boolean { + return this.lifecycle.publicationReplaceInFlight; } transitionScreenShareLifecycleInternal(event: VoiceScreenShareEvent): void { @@ -225,29 +235,10 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { this.lifecycle.queueStopRequest(options); } - queuePendingCodecRepublishRequestInternal( - codec: VideoCodec, - reason: NegotiationReason, - options: {force?: boolean} = {}, - ): void { - this.lifecycle.queueCodecRepublishRequest(codec, reason, options); - } - - deferActiveCodecRepublishRequestInternal( - codec: VideoCodec, - reason: NegotiationReason, - options: {force?: boolean} = {}, - ): void { - this.lifecycle.deferCodecRepublishRequest(codec, reason, options); - } - async applyPendingScreenShareRequestsInternal(room: Room | null, participant: LocalParticipant): Promise { await this.lifecycle.drainQueuedRequests({ isScreenShareEnabled: () => participant.isScreenShareEnabled, applyStop: (request) => this.setScreenShareEnabled(room, false, request), - applyCodecRepublish: async (request) => { - await this.renegotiateActiveScreenShareCodec(room, request.codec, request.reason, {force: request.force}); - }, }); } @@ -278,13 +269,6 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { this.trackPlumbing.applyContentHint(participant, contentSource, preferredTrack); } - applyScreenShareContentHintToMediaTrackInternal( - mediaStreamTrack: MediaStreamTrack | undefined, - contentSource: ScreenShareContentSource = this.getActiveScreenShareContentSourceInternal(), - ): void { - this.trackPlumbing.applyContentHintToMediaTrack(mediaStreamTrack, contentSource); - } - async enforceScreenShareSenderParametersInternal( participant: LocalParticipant, publishOptions?: TrackPublishOptions, @@ -292,21 +276,6 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { await this.trackPlumbing.enforceSenderParameters(participant, publishOptions); } - async enforceScreenShareTrackSenderParametersInternal( - track: LocalVideoTrack | undefined, - publishOptions?: TrackPublishOptions, - ): Promise { - await this.trackPlumbing.enforceTrackSenderParameters(track, publishOptions); - } - - bindScreenShareSenderParameterReapplyInternal( - participant: LocalParticipant, - publishOptions?: TrackPublishOptions, - preferredTrack?: LocalVideoTrack, - ): void { - this.trackPlumbing.bindSenderParameterReapply(participant, publishOptions, preferredTrack); - } - applyScreenShareAudioContentHintInternal(participant: LocalParticipant): void { this.trackPlumbing.applyAudioContentHint(participant); } @@ -403,36 +372,6 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { ); } - getScreenShareSimulcastCleanupSnapshotInternal(screenShareTrack: LocalVideoTrack): ScreenShareCaptureCleanupSnapshot { - const snapshot: ScreenShareCaptureCleanupSnapshot = {mediaTracks: [], senders: []}; - const primarySender = screenShareTrack.sender; - if (primarySender) { - snapshot.senders.push({sender: primarySender, expectedTrack: primarySender.track}); - } - const simulcastCodecs = ( - screenShareTrack as LocalVideoTrack & { - simulcastCodecs?: Map; - } - ).simulcastCodecs; - for (const simulcastTrackInfo of simulcastCodecs?.values() ?? []) { - snapshot.mediaTracks.push(simulcastTrackInfo.mediaStreamTrack); - if (simulcastTrackInfo.sender) { - const senderTarget = { - sender: simulcastTrackInfo.sender, - expectedTrack: simulcastTrackInfo.sender.track, - }; - if ( - !snapshot.senders.some( - (target) => target.sender === senderTarget.sender && target.expectedTrack === senderTarget.expectedTrack, - ) - ) { - snapshot.senders.push(senderTarget); - } - } - } - return snapshot; - } - cleanupActiveScreenShareEndListenerInternal(): void { this.activeScreenShareEndListener?.(); this.activeScreenShareEndListener = null; @@ -460,6 +399,56 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { ); } + private isScreenShareTrackPublishedInternal(participant: LocalParticipant, track: LocalVideoTrack): boolean { + return getLocalScreenShareVideoPublications(participant).some((publication) => { + const publishedTrack = + (publication.videoTrack as LocalVideoTrack | undefined) ?? (publication.track as LocalVideoTrack | undefined); + return publishedTrack === track; + }); + } + + private async recoverActiveScreenShareAfterEncoderFailure( + room: Room | null, + participant: LocalParticipant, + track: LocalVideoTrack, + failedCodec: VideoCodec, + ): Promise { + if (!this.isScreenShareTrackPublishedInternal(participant, track)) return; + await ScreenShareCodecNegotiation.publishLocalCapabilities(room, 'manual'); + const codec = ScreenShareCodecNegotiation.selectScreenShareCodec(VoiceSettings.getPreferredScreenShareCodec()); + if (codec !== failedCodec) { + const recovered = await this.liveKitFlows.republishActiveShareWithCodec(room, track, codec); + if (recovered) return; + } + this.stopScreenShareAfterEncoderFailure(room, participant, track, failedCodec); + } + + private stopScreenShareAfterEncoderFailure( + room: Room | null, + participant: LocalParticipant, + track: LocalVideoTrack, + codec: VideoCodec, + ): void { + logger.error('Screen share encoder produced no frames and no other codec took over; disabling screen share', { + codec, + }); + this.showScreenShareEndedModalInternal(i18n._(SCREEN_SHARE_ENCODER_FAILED_DESCRIPTOR)); + if (this.endedScreenShareStopInFlight) return; + if (!this.isScreenShareTrackPublishedInternal(participant, track)) return; + this.transitionScreenShareLifecycleInternal({type: 'share.endedStop.start'}); + const stopPromise = this.setScreenShareEnabled(room, false, {sendUpdate: true, playSound: true}) + .catch((error) => { + logger.warn('Failed to disable screen share after encoder failure', {error, codec}); + }) + .finally(() => { + if (this.endedScreenShareStopInFlight === stopPromise) { + this.endedScreenShareStopInFlight = null; + } + this.transitionScreenShareLifecycleInternal({type: 'share.endedStop.finish'}); + }); + this.endedScreenShareStopInFlight = stopPromise; + } + startEncoderVerificationInternal( room: Room | null, participant: LocalParticipant, @@ -471,7 +460,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { const publication = preferredTrack ? undefined : participant.getTrackPublication(Track.Source.ScreenShare); const track = preferredTrack ?? (publication?.videoTrack as LocalVideoTrack | undefined); const sender = track?.sender; - if (!sender) { + if (!track || !sender) { logger.warn('No sender found for screen share encoder verification'); return; } @@ -481,27 +470,23 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { (failure) => { const failureReason = failure.reason === 'codec-mismatch' ? 'screen-share-codec-mismatch' : 'screen-share-encode-stalled'; - if (!markScreenShareCodecEncodeRuntimeFailure(failure.codec, failureReason)) return; - void this.recoverActiveScreenShareAfterEncoderFailure(room, failure.codec).catch((error) => { - logger.warn('Failed to recover screen share after encoder verification failure', { - error, - codec: failure.codec, - failureReason, - }); - }); + markScreenShareCodecEncodeRuntimeFailure(failure.codec, failureReason); + logger.warn('Screen share encoder verification failed', {codec: failure.codec, failureReason}); + if (failure.reason !== 'stalled') return; + void this.recoverActiveScreenShareAfterEncoderFailure(room, participant, track, failure.codec).catch( + (error) => { + logger.warn('Failed to recover screen share after encoder verification failure', { + error, + codec: failure.codec, + }); + }, + ); }, ); this.trackPlumbing.bindKeyFrameRequests(room, participant, track); this.transitionScreenShareLifecycleInternal({type: 'share.encoderVerification.scheduled'}); } - private async recoverActiveScreenShareAfterEncoderFailure(room: Room | null, failedCodec: VideoCodec): Promise { - await ScreenShareCodecNegotiation.publishLocalCapabilities(room, 'manual', {}); - const codec = ScreenShareCodecNegotiation.selectScreenShareCodec(VoiceSettings.getPreferredScreenShareCodec()); - if (codec === failedCodec) return; - await this.renegotiateActiveScreenShareCodec(room, codec, 'manual', {force: true}); - } - monitorActiveScreenShareEndInternal( room: Room | null, participant: LocalParticipant, @@ -790,10 +775,6 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { await this.applyPendingScreenShareRequestsInternal(room, participant); } - stopMediaTrackInternal(track: MediaStreamTrack | undefined): void { - stopMediaTrack(track); - } - async publishControllerScreenViaLiveKitFlows(room: Room | null, options: VoiceEngineV2ScreenOptions): Promise { if (typeof options.captureId !== 'string' || options.captureId.length === 0) { throw new Error('Controller screen-share publish requires a captureId'); @@ -805,21 +786,86 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store { await this.controllerRouting.unpublishViaLiveKitFlows(room); } + private async applyActiveScreenShareAudioSetting(participant: LocalParticipant, audio: boolean): Promise { + assert.ok(participant); + assert.equal(typeof audio, 'boolean'); + const screenShareAudioPublication = participant.getTrackPublication(Track.Source.ScreenShareAudio); + if (!screenShareAudioPublication) { + if (audio) { + logger.info('Cannot enable screen share audio without restarting screen share'); + } + return false; + } + try { + if (audio) { + await screenShareAudioPublication.unmute(); + } else { + await screenShareAudioPublication.mute(); + } + return true; + } catch (error) { + logger.warn('Failed to update active screen share audio state', {error, includeAudio: audio}); + return false; + } + } + + private async applyActiveScreenShareResolutionSetting( + screenShareTrack: LocalVideoTrack, + resolution: NonNullable, + ): Promise { + assert.ok(screenShareTrack); + assert.ok(resolution); + const mediaStreamTrack = screenShareTrack.mediaStreamTrack; + const currentConstraints = mediaStreamTrack.getConstraints() as ScreenShareVideoConstraints; + const nextConstraints: ScreenShareVideoConstraints = {...currentConstraints}; + if (resolution.width > 0) nextConstraints.width = {ideal: resolution.width}; + if (resolution.height > 0) nextConstraints.height = {ideal: resolution.height}; + if (resolution.frameRate !== undefined) { + nextConstraints.frameRate = {ideal: resolution.frameRate, max: resolution.frameRate}; + } + if (JSON.stringify(currentConstraints) === JSON.stringify(nextConstraints)) return true; + try { + await mediaStreamTrack.applyConstraints(nextConstraints); + return true; + } catch (error) { + logger.warn('Failed to update active screen share constraints', {error, resolution}); + return false; + } + } + async updateActiveScreenShareSettings( room: Room | null, options?: ScreenShareCaptureOptions, publishOptions?: TrackPublishOptions, ): Promise { - return this.codecMigration.updateActiveSettings(room, options, publishOptions); - } - - async renegotiateActiveScreenShareCodec( - room: Room | null, - codec: VideoCodec, - reason: NegotiationReason, - options: {force?: boolean} = {}, - ): Promise { - return this.codecMigration.renegotiateActiveCodec(room, codec, reason, options); + assert.ok(options === undefined || typeof options === 'object'); + if (Platform.OS !== 'web') { + logger.warn('Screen share updates are not supported on native'); + return false; + } + const participant = room?.localParticipant; + if (!participant || !participant.isScreenShareEnabled) return false; + const screenSharePublication = participant.getTrackPublication(Track.Source.ScreenShare); + const screenShareTrack = screenSharePublication?.videoTrack; + if (!screenShareTrack) { + logger.warn('No active screen share track to update'); + return false; + } + if (typeof options?.audio === 'boolean') { + await this.applyActiveScreenShareAudioSetting(participant, options.audio); + } + if (options?.resolution) { + await this.applyActiveScreenShareResolutionSetting(screenShareTrack, options.resolution); + } + if (options && Object.hasOwn(options, 'contentHint')) { + screenShareTrack.mediaStreamTrack.contentHint = options.contentHint ?? ''; + } + await screenShareTrack.setDegradationPreference(SCREEN_SHARE_DEGRADATION_PREFERENCE); + await this.enforceScreenShareSenderParametersInternal(participant, publishOptions); + this.ensureScreenShareKeepAliveSinkInternal(participant); + updateLocalParticipantFromRoom(room); + this.syncLocalScreenShareAudioStateInternal(participant, participant.isScreenShareEnabled); + return true; } setScreenShareAudioMuted(room: Room | null, muted: boolean): void { diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts index d4753a0ca..4ed92dcb9 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareLiveKitFlows.ts @@ -69,6 +69,7 @@ import { type ScreenShareCaptureOptions, Track, type TrackPublishOptions, + type VideoCodec, } from 'livekit-client'; function isUserCancelledScreenShareError(error: unknown): boolean { @@ -624,7 +625,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows { this.adapter.transitionScreenShareLifecycleInternal({ type: 'share.replace', sourceType: 'display', - codecRepublishInFlight: true, + publicationReplaceInFlight: true, }); try { const tracks = await createDisplayScreenShareTracks(options, captureContext); @@ -681,6 +682,125 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows { return didReplace; } + async republishActiveShareWithCodec( + room: Room | null, + screenShareTrack: LocalVideoTrack, + codec: VideoCodec, + ): Promise { + if (guardScreenShareEntry({platformUnsupportedWarning: SCREEN_SHARE_UNSUPPORTED_PLATFORM_WARNING}) !== 'proceed') { + return false; + } + const participant = room?.localParticipant; + if (!room || !participant || !participant.isScreenShareEnabled) { + logger.warn('No active screen share to republish'); + return false; + } + const pendingVerdict = guardScreenShareEntry({ + pending: { + active: this.adapter.isScreenSharePending, + debugMessage: 'Already pending, ignoring screen share codec republish', + }, + }); + if (pendingVerdict === 'share-pending') { + return false; + } + const publication = getLocalScreenShareVideoPublications(participant).find( + (candidate) => (candidate.videoTrack ?? candidate.track) === screenShareTrack, + ); + if (!publication) { + logger.warn('Screen share track is no longer published; skipping codec republish', {codec}); + return false; + } + const mediaStreamTrack = screenShareTrack.mediaStreamTrack; + if (mediaStreamTrack.readyState !== 'live') { + logger.warn('Screen share source track ended before codec republish', {codec}); + return false; + } + const previousOptions = ((publication as {options?: TrackPublishOptions}).options ?? {}) as TrackPublishOptions; + const nextPublishOptions: TrackPublishOptions = {...previousOptions, videoCodec: codec}; + delete nextPublishOptions.backupCodec; + delete nextPublishOptions.backupCodecPolicy; + delete nextPublishOptions.scalabilityMode; + delete nextPublishOptions.simulcast; + const contentSource: ScreenShareContentSource = + ActiveScreenShareSource.getShareContext() ?? this.adapter.getActiveScreenShareContentSourceInternal(); + const sourceType = this.adapter.getScreenShareSourceTypeForContentSourceInternal(contentSource); + this.adapter.transitionScreenShareLifecycleInternal({ + type: 'share.replace', + sourceType, + publicationReplaceInFlight: true, + }); + this.adapter.cancelEncoderVerificationInternal(); + this.adapter.cleanupActiveScreenShareEndListenerInternal(); + let videoPublished = false; + try { + await participant.unpublishTrack(screenShareTrack, false); + const effectivePublishOptions = await this.adapter.getEffectivePublishOptionsInternal(true, nextPublishOptions); + await participant.publishTrack(mediaStreamTrack, { + ...effectivePublishOptions, + source: Track.Source.ScreenShare, + stream: VoiceTrackSource.ScreenShare, + ...(publication.trackName ? {name: publication.trackName} : {}), + }); + videoPublished = true; + await runScreenShareActivationRitual({ + adapter: this.adapter, + room, + participant, + active: true, + steps: { + acquireStreamingPriority: false, + enforcePublicationCap: true, + applyState: () => applyScreenShareState(this.adapter, true, true, true), + applyStatePosition: 'after-pipeline', + publishPipeline: {contentSource, effectivePublishOptions}, + deactivateCleanup: null, + updateLocalParticipant: true, + audioSync: {kind: 'participant-after-watch'}, + syncPersistedAudioPreferenceWhenActive: true, + playSound: false, + buildResolveTransition: () => ({ + type: 'share.resolve', + active: true, + sourceType, + encoderVerificationScheduled: this.adapter.encoderVerificationTimer != null, + streamingPriorityHeld: this.adapter.streamingPriorityHeld, + }), + }, + }); + logger.info('Republished active screen share with a different codec', { + previousCodec: previousOptions.videoCodec, + codec, + }); + return true; + } catch (error) { + logger.warn('Failed to republish active screen share with a different codec', {error, codec, videoPublished}); + const actual = participant.isScreenShareEnabled; + if (!actual) { + await this.adapter.cleanupLingeringScreenShareTracks(participant).catch((cleanupError) => { + logger.warn('Failed to clean up screen share after codec republish failure', {error: cleanupError}); + }); + } + return settleScreenShareFailure({ + adapter: this.adapter, + room, + participant, + actual, + applyState: (actualNow) => applyScreenShareState(this.adapter, actualNow, true, true), + onInactiveAfterSync: () => stopMediaTrack(mediaStreamTrack), + monitorEndOnActive: true, + playSound: false, + buildTransition: (actualNow) => ({ + type: 'share.reject', + active: actualNow, + sourceType: actualNow ? sourceType : null, + }), + }); + } finally { + await this.adapter.applyPendingScreenShareRequestsInternal(room, participant); + } + } + private captureScreenShareReplacementSnapshot( participant: LocalParticipant, screenShareTrack: LocalVideoTrack, diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareRestartMigration.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareRestartMigration.ts deleted file mode 100644 index 7fccfe633..000000000 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareRestartMigration.ts +++ /dev/null @@ -1,128 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import assert from 'node:assert/strict'; -import ScreenSharePublicationMigration from '@app/features/voice/engine/ScreenSharePublicationMigration'; -import {getPreferredScreenShareCodec, logger} from '@app/features/voice/engine/voice_screen_share_manager/shared'; -import {type LocalParticipant, type Room, Track, type TrackPublishOptions, type VideoCodec} from 'livekit-client'; - -export interface ScreenShareRestartMigrationSession { - readonly migrationId: string; - readonly generation: number; - readonly participantIdentity: string; - readonly previousTrackSid: string | null; - readonly candidateTrackSid: string; -} - -function isVideoCodecValue(value: unknown): value is VideoCodec { - return value === 'av1' || value === 'h265' || value === 'h264' || value === 'vp9' || value === 'vp8'; -} - -export function resolveScreenShareRestartMigrationCodec( - nextPublishOptions: TrackPublishOptions | undefined, - previousPublishOptions: TrackPublishOptions | undefined, -): VideoCodec { - const nextCodec = nextPublishOptions?.videoCodec; - if (isVideoCodecValue(nextCodec)) return nextCodec; - const previousCodec = previousPublishOptions?.videoCodec; - if (isVideoCodecValue(previousCodec)) return previousCodec; - return getPreferredScreenShareCodec(); -} - -function getPreviousScreenShareTrackSid(participant: LocalParticipant): string | null { - assert.ok(participant, 'participant is required'); - const publication = participant.getTrackPublication(Track.Source.ScreenShare); - if (typeof publication?.trackSid === 'string' && publication.trackSid.length > 0) return publication.trackSid; - for (const candidate of participant.trackPublications.values()) { - if (candidate.source !== Track.Source.ScreenShare) continue; - if (typeof candidate.trackSid === 'string' && candidate.trackSid.length > 0) return candidate.trackSid; - } - return null; -} - -export async function announceScreenShareRestartMigration(args: { - readonly room: Room | null; - readonly generation: number; - readonly previousPublishOptions: TrackPublishOptions | undefined; - readonly nextPublishOptions: TrackPublishOptions | undefined; - readonly candidateTrackSid: string; - readonly reason: string; -}): Promise { - assert.ok(args.room === null || typeof args.room === 'object'); - assert.ok(Number.isInteger(args.generation) && args.generation > 0); - assert.ok(args.candidateTrackSid.length > 0, 'candidateTrackSid is required'); - assert.ok(args.reason.length > 0, 'reason is required'); - const participant = args.room?.localParticipant; - if (!participant) return null; - const previousTrackSid = getPreviousScreenShareTrackSid(participant); - const migrationId = ScreenSharePublicationMigration.createMigrationId(); - const codec = resolveScreenShareRestartMigrationCodec(args.nextPublishOptions, args.previousPublishOptions); - const breakMessage = { - migration_id: migrationId, - generation: args.generation, - previous_track_sid: previousTrackSid, - codec, - reason: args.reason, - }; - ScreenSharePublicationMigration.markLocalMigrationBreaking(participant.identity, breakMessage); - await ScreenSharePublicationMigration.publishBreak(args.room, { - migrationId, - generation: args.generation, - previousTrackSid, - codec, - reason: args.reason, - }).catch((error) => { - logger.warn('Failed to publish native screen-share restart migration break', {error, migrationId}); - }); - return { - migrationId, - generation: args.generation, - participantIdentity: participant.identity, - previousTrackSid, - candidateTrackSid: args.candidateTrackSid, - }; -} - -export async function commitScreenShareRestartMigration( - room: Room | null, - session: ScreenShareRestartMigrationSession | null, - candidateTrackSid: string, -): Promise { - if (!session || !room?.localParticipant) return; - assert.ok(candidateTrackSid.length > 0, 'candidateTrackSid is required'); - const commitMessage = { - migration_id: session.migrationId, - generation: session.generation, - previous_track_sid: session.previousTrackSid, - candidate_track_sid: candidateTrackSid, - }; - await ScreenSharePublicationMigration.publishCommit(room, commitMessage).catch((error) => { - logger.warn('Failed to publish native screen-share restart migration commit', { - error, - migrationId: session.migrationId, - candidateTrackSid, - }); - }); - ScreenSharePublicationMigration.markLocalMigrationCommitted(session.participantIdentity, commitMessage); -} - -export async function abortScreenShareRestartMigration( - room: Room | null, - session: ScreenShareRestartMigrationSession | null, - reason: string, -): Promise { - if (!session || !room?.localParticipant) return; - assert.ok(reason.length > 0, 'reason is required'); - const abortMessage = { - migration_id: session.migrationId, - generation: session.generation, - candidate_track_sid: null, - reason, - }; - await ScreenSharePublicationMigration.publishAbort(room, abortMessage).catch((error) => { - logger.warn('Failed to publish native screen-share restart migration abort', { - error, - migrationId: session.migrationId, - }); - }); - ScreenSharePublicationMigration.markLocalMigrationAborted(session.participantIdentity, abortMessage); -} diff --git a/fluxer_app/src/features/voice/state/VoiceSettings.ts b/fluxer_app/src/features/voice/state/VoiceSettings.ts index e7b61d5a7..e2ae4f801 100644 --- a/fluxer_app/src/features/voice/state/VoiceSettings.ts +++ b/fluxer_app/src/features/voice/state/VoiceSettings.ts @@ -103,7 +103,6 @@ type VoiceSettingsUpdate = Partial<{ preferredScreenShareCodec: CodecPreference; screenShareAv1OptIn: boolean; screenShareHevcOptIn: boolean; - emulatedDecodeVideoCodecCap: CodecPreference; screenShareContentHint: ScreenShareContentHint; screenShareEncoderMode: ScreenShareEncoderMode; screenShareSoftwareQuality: ScreenShareSoftwareQuality; @@ -204,6 +203,14 @@ function applyAdaptiveScreenShareQualityRemovalMigration(parsed: Record): boolean { + if (!Object.hasOwn(parsed, 'emulatedDecodeVideoCodecCap')) { + return false; + } + delete parsed.emulatedDecodeVideoCodecCap; + return true; +} + function applyScreenShareAudioConsentMigrationV1(parsed: Record): boolean { if (parsed.screenShareAudioConsentMigratedV1 === true) { return false; @@ -393,7 +400,6 @@ class VoiceSettings { screenShareHevcOptIn = false; screenShareAv1OptOutMigratedV1 = false; screenShareHevcOptOutMigratedV1 = false; - emulatedDecodeVideoCodecCap: CodecPreference = 'auto'; screenShareContentHintPrefV2: ScreenShareContentHint = DEFAULT_SCREEN_SHARE_CONTENT_HINT; screenShareContentHintDefaultMigratedV1 = false; screenShareEncoderModePrefV2: ScreenShareEncoderMode = DEFAULT_SCREEN_SHARE_ENCODER_MODE; @@ -461,7 +467,6 @@ class VoiceSettings { getDisablePictureInPicturePopoutScreenShare: false, getPauseOwnScreenSharePreviewOnUnfocus: false, getPreferredVideoCodec: false, - getEmulatedDecodeVideoCodecCap: false, getPreferredScreenShareCodec: false, getScreenShareAv1OptIn: false, getScreenShareHevcOptIn: false, @@ -508,6 +513,7 @@ class VoiceSettings { } changed = applyPiPPopoutDefaultsMigration(parsed) || changed; changed = applyAdaptiveScreenShareQualityRemovalMigration(parsed) || changed; + changed = applyEmulatedDecodeCodecCapRemovalMigration(parsed) || changed; changed = applyScreenShareAudioConsentMigrationV1(parsed) || changed; changed = applyScreenShareAudioDefaultOnMigrationV1(parsed) || changed; changed = applyStreamingModeDefaultMigrationV1(parsed) || changed; @@ -577,7 +583,6 @@ class VoiceSettings { 'screenShareHevcOptIn', 'screenShareAv1OptOutMigratedV1', 'screenShareHevcOptOutMigratedV1', - 'emulatedDecodeVideoCodecCap', 'screenShareContentHintPrefV2', 'screenShareContentHintDefaultMigratedV1', 'screenShareEncoderModePrefV2', @@ -872,10 +877,6 @@ class VoiceSettings { return this.preferredVideoCodec; } - getEmulatedDecodeVideoCodecCap(): CodecPreference { - return this.emulatedDecodeVideoCodecCap; - } - getPreferredScreenShareCodec(): CodecPreference { if (this.preferredScreenShareCodec === 'av1' && !this.screenShareAv1OptIn) return 'auto'; if (this.preferredScreenShareCodec === 'h265' && !this.screenShareHevcOptIn) return 'auto'; @@ -1060,8 +1061,6 @@ class VoiceSettings { this.preferredScreenShareCodec = validated.preferredScreenShareCodec; if (validated.screenShareAv1OptIn !== undefined) this.screenShareAv1OptIn = validated.screenShareAv1OptIn; if (validated.screenShareHevcOptIn !== undefined) this.screenShareHevcOptIn = validated.screenShareHevcOptIn; - if (validated.emulatedDecodeVideoCodecCap !== undefined) - this.emulatedDecodeVideoCodecCap = validated.emulatedDecodeVideoCodecCap; if (validated.screenShareContentHint !== undefined) this.screenShareContentHint = validated.screenShareContentHint; if (validated.screenShareEncoderMode !== undefined) this.screenShareEncoderMode = validated.screenShareEncoderMode; if (validated.screenShareSoftwareQuality !== undefined) @@ -1199,7 +1198,6 @@ class VoiceSettings { ), screenShareAv1OptIn, screenShareHevcOptIn, - emulatedDecodeVideoCodecCap: data.emulatedDecodeVideoCodecCap ?? this.emulatedDecodeVideoCodecCap, screenShareContentHint: validateScreenShareContentHint( data.screenShareContentHint ?? this.screenShareContentHint, ), diff --git a/packages/voice_engine_v2/fixtures/event_logs/app_voice_session.json b/packages/voice_engine_v2/fixtures/event_logs/app_voice_session.json index 0a8b3a8f0..a7cf3caad 100644 --- a/packages/voice_engine_v2/fixtures/event_logs/app_voice_session.json +++ b/packages/voice_engine_v2/fixtures/event_logs/app_voice_session.json @@ -766,12 +766,6 @@ } }, "watchedStreams": {}, - "codecNegotiation": { - "overrides": {}, - "localSupportedVideoCodecs": [], - "remoteSupportedVideoCodecs": {}, - "streams": {} - }, "stats": { "rttMs": 42, "outbound": [ diff --git a/packages/voice_engine_v2/src/core/index.ts b/packages/voice_engine_v2/src/core/index.ts index 69007e936..f1c0adc1c 100644 --- a/packages/voice_engine_v2/src/core/index.ts +++ b/packages/voice_engine_v2/src/core/index.ts @@ -25,7 +25,6 @@ export { selectVoiceEngineV2StatsPresentationProjection, selectVoiceEngineV2StatsProjection, selectVoiceEngineV2StatsSummary, - selectVoiceEngineV2StreamNegotiation, selectVoiceEngineV2WatchedStreams, } from './selectors'; export type { diff --git a/packages/voice_engine_v2/src/core/reducers/_dispatch.ts b/packages/voice_engine_v2/src/core/reducers/_dispatch.ts index ca6e8b053..3e2f7e194 100644 --- a/packages/voice_engine_v2/src/core/reducers/_dispatch.ts +++ b/packages/voice_engine_v2/src/core/reducers/_dispatch.ts @@ -6,7 +6,6 @@ import type {VoiceEngineV2Snapshot, VoiceEngineV2Transition} from '../state'; import {planDesiredState} from './_plan'; import {transitionCamera} from './camera'; import {transitionCapabilities} from './capabilities'; -import {transitionCodecNegotiation} from './codecNegotiation'; import {transitionCommand} from './command'; import {transitionConnection} from './connection'; import {transitionData} from './data'; @@ -137,13 +136,6 @@ export function dispatchSessionEvent( case 'data.publishSucceeded': case 'data.publishFailed': return transitionData(snapshot, event); - case 'codecNegotiation.overrideSetRequested': - case 'codecNegotiation.localCapabilityChanged': - case 'codecNegotiation.remoteCapabilityChanged': - case 'codecNegotiation.streamRegistered': - case 'codecNegotiation.streamUnregistered': - case 'codecNegotiation.viewerChanged': - return transitionCodecNegotiation(snapshot, event); case 'stats.collectRequested': case 'stats.collected': case 'stats.collectFailed': diff --git a/packages/voice_engine_v2/src/core/reducers/camera.ts b/packages/voice_engine_v2/src/core/reducers/camera.ts index 77d6e3246..9526032a5 100644 --- a/packages/voice_engine_v2/src/core/reducers/camera.ts +++ b/packages/voice_engine_v2/src/core/reducers/camera.ts @@ -105,7 +105,7 @@ function failCamera( }; } -export function beginCameraEncodingUpdate( +function beginCameraEncodingUpdate( snapshot: VoiceEngineV2Snapshot, options: VoiceEngineV2CameraEncodingOptions, ): VoiceEngineV2Transition { diff --git a/packages/voice_engine_v2/src/core/reducers/codecNegotiation.test.ts b/packages/voice_engine_v2/src/core/reducers/codecNegotiation.test.ts deleted file mode 100644 index 176a1207d..000000000 --- a/packages/voice_engine_v2/src/core/reducers/codecNegotiation.test.ts +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {describe, expect, it} from 'vitest'; -import type {VoiceEngineV2Event} from '../../protocol/events'; -import {transitionVoiceEngineV2} from '../reducer'; -import { - availableVoiceEngineV2Capabilities, - createVoiceEngineV2InitialSnapshot, - type VoiceEngineV2Snapshot, -} from '../state'; - -function applyEvents(snapshot: VoiceEngineV2Snapshot, events: Array): VoiceEngineV2Snapshot { - let next = snapshot; - for (const event of events) { - next = transitionVoiceEngineV2(next, event).snapshot; - } - return next; -} - -function publishedCameraOn(codec: 'av1' | 'h264' | 'vp9'): VoiceEngineV2Snapshot { - return applyEvents(createVoiceEngineV2InitialSnapshot(availableVoiceEngineV2Capabilities()), [ - {type: 'connection.connectRequested', options: {url: 'wss://voice', token: 'token'}}, - {type: 'connection.connectSucceeded', operationId: 1}, - {type: 'camera.publishRequested', options: {deviceId: 'cam-1', codec}}, - {type: 'camera.publishSucceeded', operationId: 2}, - { - type: 'codecNegotiation.streamRegistered', - source: 'camera', - streamIdentity: 'cam-stream-1', - preferredCodec: codec, - }, - ]); -} - -describe('codec negotiation reducer', () => { - it('keeps the preferred codec while no one is watching', () => { - const snapshot = publishedCameraOn('av1'); - expect(snapshot.codecNegotiation.streams.camera?.negotiatedCodec).toBe('av1'); - expect(snapshot.camera.published?.codec).toBe('av1'); - }); - - it('downgrades and republishes when a viewer who cannot decode the codec starts watching', () => { - const snapshot = publishedCameraOn('av1'); - const transition = transitionVoiceEngineV2(snapshot, { - type: 'codecNegotiation.viewerChanged', - source: 'camera', - viewerIdentity: 'bob', - watching: true, - supportedVideoCodecs: ['h264', 'vp8'], - }); - - expect(transition.commands).toEqual([ - {type: 'camera.publish', operationId: 3, options: {deviceId: 'cam-1', codec: 'h264'}}, - ]); - expect(transition.snapshot.codecNegotiation.streams.camera?.negotiatedCodec).toBe('h264'); - expect(transition.snapshot.codecNegotiation.streams.camera?.constrainedBy).toBe('bob'); - expect(transition.snapshot.camera.status).toBe('publishing'); - }); - - it('preserves the stream identity across the codec republish', () => { - const snapshot = publishedCameraOn('av1'); - const downgraded = transitionVoiceEngineV2(snapshot, { - type: 'codecNegotiation.viewerChanged', - source: 'camera', - viewerIdentity: 'bob', - watching: true, - supportedVideoCodecs: ['h264'], - }); - expect(downgraded.snapshot.codecNegotiation.streams.camera?.streamIdentity).toBe('cam-stream-1'); - }); - - it('upgrades back toward the preferred codec when the constraining viewer stops watching', () => { - const downgraded = applyEvents(publishedCameraOn('av1'), [ - { - type: 'codecNegotiation.viewerChanged', - source: 'camera', - viewerIdentity: 'bob', - watching: true, - supportedVideoCodecs: ['h264'], - }, - {type: 'camera.publishSucceeded', operationId: 3}, - ]); - expect(downgraded.camera.published?.codec).toBe('h264'); - - const upgraded = transitionVoiceEngineV2(downgraded, { - type: 'codecNegotiation.viewerChanged', - source: 'camera', - viewerIdentity: 'bob', - watching: false, - supportedVideoCodecs: [], - }); - expect(upgraded.commands).toEqual([ - {type: 'camera.publish', operationId: 4, options: {deviceId: 'cam-1', codec: 'av1'}}, - ]); - expect(upgraded.snapshot.codecNegotiation.streams.camera?.negotiatedCodec).toBe('av1'); - expect(upgraded.snapshot.codecNegotiation.streams.camera?.constrainedBy).toBeNull(); - }); - - it('does not republish when a newly watching viewer can already decode the codec', () => { - const snapshot = publishedCameraOn('h264'); - const transition = transitionVoiceEngineV2(snapshot, { - type: 'codecNegotiation.viewerChanged', - source: 'camera', - viewerIdentity: 'bob', - watching: true, - supportedVideoCodecs: ['av1', 'vp9', 'h264', 'vp8'], - }); - expect(transition.commands).toEqual([]); - expect(transition.snapshot.codecNegotiation.streams.camera?.negotiatedCodec).toBe('h264'); - }); - - it('clamps the manual override down to a current viewer that cannot decode it', () => { - const watching = transitionVoiceEngineV2(publishedCameraOn('h264'), { - type: 'codecNegotiation.viewerChanged', - source: 'camera', - viewerIdentity: 'bob', - watching: true, - supportedVideoCodecs: ['vp8'], - }).snapshot; - const settled = applyEvents(watching, [{type: 'camera.publishSucceeded', operationId: 3}]); - expect(settled.camera.published?.codec).toBe('vp8'); - - const overridden = transitionVoiceEngineV2(settled, { - type: 'codecNegotiation.overrideSetRequested', - source: 'camera', - codec: 'av1', - }); - expect(overridden.commands).toEqual([]); - expect(overridden.snapshot.codecNegotiation.overrides.camera).toBe('av1'); - expect(overridden.snapshot.codecNegotiation.streams.camera?.negotiatedCodec).toBe('vp8'); - expect(overridden.snapshot.codecNegotiation.streams.camera?.constrainedBy).toBe('bob'); - }); - - it('applies the manual override as a republish when no viewer constrains it', () => { - const transition = transitionVoiceEngineV2(publishedCameraOn('h264'), { - type: 'codecNegotiation.overrideSetRequested', - source: 'camera', - codec: 'vp9', - }); - expect(transition.commands).toEqual([ - {type: 'camera.publish', operationId: 3, options: {deviceId: 'cam-1', codec: 'vp9'}}, - ]); - expect(transition.snapshot.codecNegotiation.streams.camera?.negotiatedCodec).toBe('vp9'); - }); - - it('clears a per-source override back to the published preferred codec', () => { - const overridden = transitionVoiceEngineV2(publishedCameraOn('h264'), { - type: 'codecNegotiation.overrideSetRequested', - source: 'camera', - codec: 'vp9', - }); - const settled = applyEvents(overridden.snapshot, [{type: 'camera.publishSucceeded', operationId: 3}]); - expect(settled.camera.published?.codec).toBe('vp9'); - - const cleared = transitionVoiceEngineV2(settled, { - type: 'codecNegotiation.overrideSetRequested', - source: 'camera', - codec: null, - }); - expect(cleared.snapshot.codecNegotiation.overrides.camera).toBeUndefined(); - expect(cleared.commands).toEqual([ - {type: 'camera.publish', operationId: 4, options: {deviceId: 'cam-1', codec: 'h264'}}, - ]); - expect(cleared.snapshot.codecNegotiation.streams.camera?.negotiatedCodec).toBe('h264'); - }); -}); diff --git a/packages/voice_engine_v2/src/core/reducers/codecNegotiation.ts b/packages/voice_engine_v2/src/core/reducers/codecNegotiation.ts deleted file mode 100644 index a8cd751f4..000000000 --- a/packages/voice_engine_v2/src/core/reducers/codecNegotiation.ts +++ /dev/null @@ -1,187 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import assert from 'node:assert/strict'; -import { - maxDecodableVoiceEngineV2VideoCodec, - planVoiceEngineV2NegotiatedVideoCodec, - type VoiceEngineV2CodecViewer, -} from '../../policies/codecNegotiation'; -import type {VoiceEngineV2Event} from '../../protocol/events'; -import type { - VoiceEngineV2CodecStreamNegotiation, - VoiceEngineV2LocalStreamSource, - VoiceEngineV2VideoCodec, -} from '../../protocol/types'; -import type {VoiceEngineV2Snapshot, VoiceEngineV2Transition} from '../state'; -import {beginCameraEncodingUpdate} from './camera'; -import {beginScreenEncodingUpdate} from './screen'; - -type VoiceEngineV2CodecNegotiationEvent = Extract; - -function publishedCodecForSource( - snapshot: VoiceEngineV2Snapshot, - source: VoiceEngineV2LocalStreamSource, -): VoiceEngineV2VideoCodec | null { - const media = source === 'camera' ? snapshot.camera : snapshot.screen; - if (media.status !== 'published') return null; - return media.published?.codec ?? null; -} - -function viewersForPolicy(stream: VoiceEngineV2CodecStreamNegotiation): Array { - const viewers: Array = []; - for (const identity of Object.keys(stream.viewers).sort()) { - viewers.push({identity, maxVideoCodec: stream.viewers[identity] ?? null}); - } - return viewers; -} - -function setStream( - snapshot: VoiceEngineV2Snapshot, - source: VoiceEngineV2LocalStreamSource, - stream: VoiceEngineV2CodecStreamNegotiation, -): VoiceEngineV2Snapshot { - return { - ...snapshot, - codecNegotiation: { - ...snapshot.codecNegotiation, - streams: {...snapshot.codecNegotiation.streams, [source]: stream}, - }, - }; -} - -function recomputeStream( - snapshot: VoiceEngineV2Snapshot, - source: VoiceEngineV2LocalStreamSource, -): VoiceEngineV2Transition { - assert.ok(snapshot != null, 'recomputeStream snapshot must not be null'); - const existing = snapshot.codecNegotiation.streams[source]; - if (!existing) return {snapshot, commands: []}; - const preferred = snapshot.codecNegotiation.overrides[source] ?? existing.preferredCodec; - const plan = planVoiceEngineV2NegotiatedVideoCodec({preferred, viewers: viewersForPolicy(existing)}); - const updatedStream: VoiceEngineV2CodecStreamNegotiation = { - ...existing, - negotiatedCodec: plan.codec, - constrainedBy: plan.constrainedBy, - }; - const withStream = setStream(snapshot, source, updatedStream); - const publishedCodec = publishedCodecForSource(withStream, source); - if (publishedCodec === null) return {snapshot: withStream, commands: []}; - if (publishedCodec === plan.codec) return {snapshot: withStream, commands: []}; - if (source === 'camera') { - return beginCameraEncodingUpdate(withStream, {codec: plan.codec}); - } - const published = withStream.screen.published; - assert.ok(published != null, 'recomputeStream screen republish requires a published screen'); - return beginScreenEncodingUpdate(withStream, { - captureId: published.captureId, - width: published.width, - height: published.height, - codec: plan.codec, - }); -} - -function applyViewerChanged( - snapshot: VoiceEngineV2Snapshot, - source: VoiceEngineV2LocalStreamSource, - viewerIdentity: string, - watching: boolean, - supportedVideoCodecs: Array, -): VoiceEngineV2Transition { - assert.equal(typeof viewerIdentity, 'string', 'applyViewerChanged viewerIdentity must be a string'); - assert.ok(viewerIdentity.length > 0, 'applyViewerChanged viewerIdentity must not be empty'); - const existing = snapshot.codecNegotiation.streams[source]; - if (!existing) return {snapshot, commands: []}; - const viewers = {...existing.viewers}; - if (watching) { - viewers[viewerIdentity] = maxDecodableVoiceEngineV2VideoCodec(supportedVideoCodecs); - } else { - delete viewers[viewerIdentity]; - } - const withViewers = setStream(snapshot, source, {...existing, viewers}); - return recomputeStream(withViewers, source); -} - -function registerStream( - snapshot: VoiceEngineV2Snapshot, - source: VoiceEngineV2LocalStreamSource, - streamIdentity: string, - preferredCodec: VoiceEngineV2VideoCodec, -): VoiceEngineV2Transition { - assert.equal(typeof streamIdentity, 'string', 'registerStream streamIdentity must be a string'); - assert.ok(streamIdentity.length > 0, 'registerStream streamIdentity must not be empty'); - const existing = snapshot.codecNegotiation.streams[source]; - const stream: VoiceEngineV2CodecStreamNegotiation = { - source, - streamIdentity, - preferredCodec, - negotiatedCodec: existing?.negotiatedCodec ?? preferredCodec, - constrainedBy: existing?.constrainedBy ?? null, - viewers: existing?.viewers ?? {}, - }; - return recomputeStream(setStream(snapshot, source, stream), source); -} - -function unregisterStream( - snapshot: VoiceEngineV2Snapshot, - source: VoiceEngineV2LocalStreamSource, -): VoiceEngineV2Transition { - if (!snapshot.codecNegotiation.streams[source]) return {snapshot, commands: []}; - const streams = {...snapshot.codecNegotiation.streams}; - delete streams[source]; - return {snapshot: {...snapshot, codecNegotiation: {...snapshot.codecNegotiation, streams}}, commands: []}; -} - -export function transitionCodecNegotiation( - snapshot: VoiceEngineV2Snapshot, - event: VoiceEngineV2CodecNegotiationEvent, -): VoiceEngineV2Transition { - assert.ok(snapshot != null, 'transitionCodecNegotiation snapshot must not be null'); - assert.ok(event != null, 'transitionCodecNegotiation event must not be null'); - assert.ok(event.type.startsWith('codecNegotiation.'), 'codecNegotiation reducer received unrelated event'); - switch (event.type) { - case 'codecNegotiation.overrideSetRequested': { - const overrides = {...snapshot.codecNegotiation.overrides}; - if (event.codec === null || event.codec === '') { - delete overrides[event.source]; - } else { - overrides[event.source] = event.codec; - } - const withOverride = {...snapshot, codecNegotiation: {...snapshot.codecNegotiation, overrides}}; - return recomputeStream(withOverride, event.source); - } - case 'codecNegotiation.localCapabilityChanged': - return { - snapshot: { - ...snapshot, - codecNegotiation: {...snapshot.codecNegotiation, localSupportedVideoCodecs: [...event.supportedVideoCodecs]}, - }, - commands: [], - }; - case 'codecNegotiation.remoteCapabilityChanged': - return { - snapshot: { - ...snapshot, - codecNegotiation: { - ...snapshot.codecNegotiation, - remoteSupportedVideoCodecs: { - ...snapshot.codecNegotiation.remoteSupportedVideoCodecs, - [event.identity]: [...event.supportedVideoCodecs], - }, - }, - }, - commands: [], - }; - case 'codecNegotiation.streamRegistered': - return registerStream(snapshot, event.source, event.streamIdentity, event.preferredCodec); - case 'codecNegotiation.streamUnregistered': - return unregisterStream(snapshot, event.source); - case 'codecNegotiation.viewerChanged': - return applyViewerChanged( - snapshot, - event.source, - event.viewerIdentity, - event.watching, - event.supportedVideoCodecs, - ); - } -} diff --git a/packages/voice_engine_v2/src/core/reducers/screen.ts b/packages/voice_engine_v2/src/core/reducers/screen.ts index ed5ae4b5c..701c91828 100644 --- a/packages/voice_engine_v2/src/core/reducers/screen.ts +++ b/packages/voice_engine_v2/src/core/reducers/screen.ts @@ -130,7 +130,7 @@ function failScreen( }; } -export function beginScreenEncodingUpdate( +function beginScreenEncodingUpdate( snapshot: VoiceEngineV2Snapshot, options: VoiceEngineV2ScreenEncodingOptions, ): VoiceEngineV2Transition { diff --git a/packages/voice_engine_v2/src/core/selectors.ts b/packages/voice_engine_v2/src/core/selectors.ts index d214330c4..8407df94d 100644 --- a/packages/voice_engine_v2/src/core/selectors.ts +++ b/packages/voice_engine_v2/src/core/selectors.ts @@ -19,13 +19,11 @@ import type { VoiceEngineV2Error, VoiceEngineV2HardwareEncoderCapabilities, VoiceEngineV2InboundVideoTrack, - VoiceEngineV2LocalStreamSource, VoiceEngineV2MediaModel, VoiceEngineV2Model, VoiceEngineV2Participant, VoiceEngineV2PermissionResult, VoiceEngineV2Stats, - VoiceEngineV2StreamNegotiationProjection, VoiceEngineV2Track, VoiceEngineV2WatchedStream, } from '../protocol/types'; @@ -131,27 +129,6 @@ export function selectVoiceEngineV2WatchedStreams(snapshot: VoiceEngineV2Snapsho return Object.values(snapshot.watchedStreams); } -export function selectVoiceEngineV2StreamNegotiation( - snapshot: VoiceEngineV2Snapshot, - source: VoiceEngineV2LocalStreamSource, -): VoiceEngineV2StreamNegotiationProjection | null { - const stream = snapshot.codecNegotiation.streams[source]; - if (!stream) return null; - const media = source === 'camera' ? snapshot.camera : snapshot.screen; - const publishedCodec = media.status === 'published' ? (media.published?.codec ?? null) : null; - const renegotiating = - media.status === 'publishing' || (publishedCodec !== null && publishedCodec !== stream.negotiatedCodec); - return { - source, - streamIdentity: stream.streamIdentity, - negotiatedCodec: stream.negotiatedCodec, - preferredCodec: stream.preferredCodec, - constrainedBy: stream.constrainedBy, - renegotiating, - viewerCount: Object.keys(stream.viewers).length, - }; -} - export function selectVoiceEngineV2DeviceProjection(snapshot: VoiceEngineV2Snapshot): VoiceEngineV2DeviceProjection { const {inventory} = snapshot.devices; return { diff --git a/packages/voice_engine_v2/src/core/state.ts b/packages/voice_engine_v2/src/core/state.ts index 264c35722..cfb02ef80 100644 --- a/packages/voice_engine_v2/src/core/state.ts +++ b/packages/voice_engine_v2/src/core/state.ts @@ -9,7 +9,6 @@ import type { VoiceEngineV2AudioControls, VoiceEngineV2CameraOptions, VoiceEngineV2Capabilities, - VoiceEngineV2CodecNegotiationState, VoiceEngineV2ConnectionStatus, VoiceEngineV2ConnectOptions, VoiceEngineV2DeviceInventory, @@ -170,7 +169,6 @@ export interface VoiceEngineV2Snapshot { participantVolumes: Record; remoteTrackSubscriptions: Record; watchedStreams: Record; - codecNegotiation: VoiceEngineV2CodecNegotiationState; stats: VoiceEngineV2Stats | null; statsOperationId: VoiceEngineV2OperationId | null; statsFailure: VoiceEngineV2Error | null; @@ -338,12 +336,6 @@ export function createVoiceEngineV2InitialSnapshot( participantVolumes: {}, remoteTrackSubscriptions: {}, watchedStreams: {}, - codecNegotiation: { - overrides: {}, - localSupportedVideoCodecs: [], - remoteSupportedVideoCodecs: {}, - streams: {}, - }, stats: null, statsOperationId: null, statsFailure: null, diff --git a/packages/voice_engine_v2/src/index.ts b/packages/voice_engine_v2/src/index.ts index 3402808c9..bccb6454b 100644 --- a/packages/voice_engine_v2/src/index.ts +++ b/packages/voice_engine_v2/src/index.ts @@ -46,7 +46,6 @@ export { selectVoiceEngineV2StatsPresentationProjection, selectVoiceEngineV2StatsProjection, selectVoiceEngineV2StatsSummary, - selectVoiceEngineV2StreamNegotiation, selectVoiceEngineV2WatchedStreams, shouldApplyGatewayVoiceStateEcho, transitionVoiceEngineV2, @@ -105,19 +104,12 @@ export { hasVoiceEngineV2NativeHardwareEncoder, hasVoiceEngineV2NativeNvencEncoder, hasVoiceEngineV2ZeroCopyNativeInput, - isMoreEfficientVoiceEngineV2VideoCodec, - maxDecodableVoiceEngineV2VideoCodec, normalizeVoiceEngineV2HardwareEncoderCapabilities, planVoiceEngineV2CameraEncodingChange, - planVoiceEngineV2NegotiatedVideoCodec, planVoiceEngineV2ScreenEncodingChange, summarizeVoiceEngineV2Stats, unavailableVoiceEngineV2HardwareEncoderCapabilities, - VOICE_ENGINE_V2_VIDEO_CODEC_FLOOR, - VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE, VoiceEngineV2StatsTrackSource, - voiceEngineV2VideoCodecRank, - worseVoiceEngineV2VideoCodec, } from './policies'; export type { CapabilitiesPort, @@ -149,9 +141,6 @@ export type { VoiceEngineV2CameraEncodingOptions, VoiceEngineV2CameraOptions, VoiceEngineV2Capabilities, - VoiceEngineV2CodecGossipMessage, - VoiceEngineV2CodecNegotiationState, - VoiceEngineV2CodecStreamNegotiation, VoiceEngineV2Command, VoiceEngineV2CommandType, VoiceEngineV2ConnectionModel, @@ -217,7 +206,6 @@ export type { VoiceEngineV2SourceLifecycleTransitionKind, VoiceEngineV2Stats, VoiceEngineV2StatsSample, - VoiceEngineV2StreamNegotiationProjection, VoiceEngineV2TimerOptions, VoiceEngineV2Track, VoiceEngineV2TrackKind, @@ -230,11 +218,8 @@ export type { VoiceEngineV2WatchedStreamKey, } from './protocol'; export { - decodeVoiceEngineV2CodecGossip, - encodeVoiceEngineV2CodecGossip, getVoiceEngineV2CommandResourceKey, getVoiceEngineV2CommandTypeResourceKey, - VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC, } from './protocol'; export type { VoiceEngineV2EventLogEntry, diff --git a/packages/voice_engine_v2/src/policies/codecNegotiation.test.ts b/packages/voice_engine_v2/src/policies/codecNegotiation.test.ts deleted file mode 100644 index 46b0d47cc..000000000 --- a/packages/voice_engine_v2/src/policies/codecNegotiation.test.ts +++ /dev/null @@ -1,104 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {describe, expect, it} from 'vitest'; -import { - isMoreEfficientVoiceEngineV2VideoCodec, - maxDecodableVoiceEngineV2VideoCodec, - planVoiceEngineV2NegotiatedVideoCodec, - VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE, - voiceEngineV2VideoCodecRank, - worseVoiceEngineV2VideoCodec, -} from './codecNegotiation'; - -describe('voice engine v2 codec negotiation policy', () => { - it('orders codecs most-efficient to most-compatible', () => { - expect(VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE).toEqual(['av1', 'h265', 'vp9', 'h264', 'vp8']); - expect(voiceEngineV2VideoCodecRank('av1')).toBeLessThan(voiceEngineV2VideoCodecRank('h265')); - expect(voiceEngineV2VideoCodecRank('h265')).toBeLessThan(voiceEngineV2VideoCodecRank('vp9')); - expect(voiceEngineV2VideoCodecRank('vp9')).toBeLessThan(voiceEngineV2VideoCodecRank('h264')); - expect(voiceEngineV2VideoCodecRank('h264')).toBeLessThan(voiceEngineV2VideoCodecRank('vp8')); - }); - - it('ranks unknown and empty codecs past the floor', () => { - expect(voiceEngineV2VideoCodecRank('')).toBe(VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE.length); - expect(voiceEngineV2VideoCodecRank(undefined)).toBe(VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE.length); - }); - - it('compares efficiency and compatibility', () => { - expect(isMoreEfficientVoiceEngineV2VideoCodec('av1', 'h264')).toBe(true); - expect(isMoreEfficientVoiceEngineV2VideoCodec('vp8', 'vp9')).toBe(false); - expect(worseVoiceEngineV2VideoCodec('av1', 'h264')).toBe('h264'); - expect(worseVoiceEngineV2VideoCodec('vp8', 'vp9')).toBe('vp8'); - }); - - it('computes a viewer max-decodable codec from its supported set', () => { - expect(maxDecodableVoiceEngineV2VideoCodec(['h264', 'vp8', 'vp9'])).toBe('vp9'); - expect(maxDecodableVoiceEngineV2VideoCodec(['vp8', 'av1', 'h264'])).toBe('av1'); - expect(maxDecodableVoiceEngineV2VideoCodec([])).toBeNull(); - expect(maxDecodableVoiceEngineV2VideoCodec(['', 'totally-unknown' as never])).toBeNull(); - }); - - it('uses the preferred codec when no viewer constrains it', () => { - const plan = planVoiceEngineV2NegotiatedVideoCodec({ - preferred: 'av1', - viewers: [ - {identity: 'alice', maxVideoCodec: 'av1'}, - {identity: 'bob', maxVideoCodec: 'av1'}, - ], - }); - expect(plan.codec).toBe('av1'); - expect(plan.reason).toBe('preferred'); - expect(plan.constrainedBy).toBeNull(); - }); - - it('clamps down to the worst current viewer when one cannot decode the preferred codec', () => { - const plan = planVoiceEngineV2NegotiatedVideoCodec({ - preferred: 'av1', - viewers: [ - {identity: 'alice', maxVideoCodec: 'av1'}, - {identity: 'bob', maxVideoCodec: 'h264'}, - ], - }); - expect(plan.codec).toBe('h264'); - expect(plan.reason).toBe('clampedToViewer'); - expect(plan.constrainedBy).toBe('bob'); - }); - - it('is order-independent and clamps to the single worst viewer', () => { - const viewers = [ - {identity: 'alice', maxVideoCodec: 'vp9' as const}, - {identity: 'carol', maxVideoCodec: 'h264' as const}, - {identity: 'bob', maxVideoCodec: 'h265' as const}, - ]; - const forward = planVoiceEngineV2NegotiatedVideoCodec({preferred: 'av1', viewers}); - const reversed = planVoiceEngineV2NegotiatedVideoCodec({preferred: 'av1', viewers: [...viewers].reverse()}); - expect(forward.codec).toBe('h264'); - expect(forward.constrainedBy).toBe('carol'); - expect(reversed.codec).toBe('h264'); - expect(reversed.constrainedBy).toBe('carol'); - }); - - it('does not constrain on viewers with unknown capability (optimistic until they report)', () => { - const plan = planVoiceEngineV2NegotiatedVideoCodec({ - preferred: 'av1', - viewers: [ - {identity: 'alice', maxVideoCodec: null}, - {identity: 'bob', maxVideoCodec: 'vp9'}, - ], - }); - expect(plan.codec).toBe('vp9'); - expect(plan.constrainedBy).toBe('bob'); - }); - - it('never upgrades beyond the preferred codec even if every viewer supports better', () => { - const plan = planVoiceEngineV2NegotiatedVideoCodec({ - preferred: 'h264', - viewers: [ - {identity: 'alice', maxVideoCodec: 'av1'}, - {identity: 'bob', maxVideoCodec: 'av1'}, - ], - }); - expect(plan.codec).toBe('h264'); - expect(plan.reason).toBe('preferred'); - }); -}); diff --git a/packages/voice_engine_v2/src/policies/codecNegotiation.ts b/packages/voice_engine_v2/src/policies/codecNegotiation.ts deleted file mode 100644 index a226e75cb..000000000 --- a/packages/voice_engine_v2/src/policies/codecNegotiation.ts +++ /dev/null @@ -1,101 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import assert from 'node:assert/strict'; -import type {VoiceEngineV2VideoCodec} from '../protocol/types'; - -export const VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE: ReadonlyArray = [ - 'av1', - 'h265', - 'vp9', - 'h264', - 'vp8', -]; - -export const VOICE_ENGINE_V2_VIDEO_CODEC_FLOOR: VoiceEngineV2VideoCodec = 'vp8'; - -const VIDEO_CODEC_RANK: ReadonlyMap = new Map( - VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE.map((codec, index) => [codec, index]), -); - -function isKnownVoiceEngineV2VideoCodec(codec: VoiceEngineV2VideoCodec | null | undefined): boolean { - if (codec == null) return false; - if (codec === '') return false; - return VIDEO_CODEC_RANK.has(codec); -} - -export function voiceEngineV2VideoCodecRank(codec: VoiceEngineV2VideoCodec | null | undefined): number { - if (!isKnownVoiceEngineV2VideoCodec(codec)) return VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE.length; - const rank = VIDEO_CODEC_RANK.get(codec as VoiceEngineV2VideoCodec); - assert.ok(rank !== undefined, 'voiceEngineV2VideoCodecRank known codec must have a rank'); - return rank; -} - -export function isMoreEfficientVoiceEngineV2VideoCodec( - candidate: VoiceEngineV2VideoCodec, - reference: VoiceEngineV2VideoCodec, -): boolean { - return voiceEngineV2VideoCodecRank(candidate) < voiceEngineV2VideoCodecRank(reference); -} - -export function worseVoiceEngineV2VideoCodec( - a: VoiceEngineV2VideoCodec, - b: VoiceEngineV2VideoCodec, -): VoiceEngineV2VideoCodec { - return voiceEngineV2VideoCodecRank(b) > voiceEngineV2VideoCodecRank(a) ? b : a; -} - -export function maxDecodableVoiceEngineV2VideoCodec( - supported: ReadonlyArray, -): VoiceEngineV2VideoCodec | null { - assert.ok(Array.isArray(supported), 'maxDecodableVoiceEngineV2VideoCodec supported must be an array'); - let best: VoiceEngineV2VideoCodec | null = null; - for (const codec of supported) { - if (!isKnownVoiceEngineV2VideoCodec(codec)) continue; - if (best === null || isMoreEfficientVoiceEngineV2VideoCodec(codec, best)) { - best = codec; - } - } - return best; -} - -export interface VoiceEngineV2CodecViewer { - identity: string; - maxVideoCodec: VoiceEngineV2VideoCodec | null; -} - -export type VoiceEngineV2NegotiatedCodecReason = 'preferred' | 'clampedToViewer'; - -export interface VoiceEngineV2NegotiatedCodecPlan { - codec: VoiceEngineV2VideoCodec; - reason: VoiceEngineV2NegotiatedCodecReason; - constrainedBy: string | null; -} - -interface VoiceEngineV2NegotiatedCodecInput { - preferred: VoiceEngineV2VideoCodec; - viewers: ReadonlyArray; -} - -export function planVoiceEngineV2NegotiatedVideoCodec( - input: VoiceEngineV2NegotiatedCodecInput, -): VoiceEngineV2NegotiatedCodecPlan { - assert.ok(input != null, 'planVoiceEngineV2NegotiatedVideoCodec input must not be null'); - assert.ok(Array.isArray(input.viewers), 'planVoiceEngineV2NegotiatedVideoCodec viewers must be an array'); - const preferred = isKnownVoiceEngineV2VideoCodec(input.preferred) - ? input.preferred - : VOICE_ENGINE_V2_VIDEO_CODEC_FLOOR; - let codec = preferred; - let reason: VoiceEngineV2NegotiatedCodecReason = 'preferred'; - let constrainedBy: string | null = null; - for (const viewer of input.viewers) { - if (viewer.maxVideoCodec === null) continue; - if (!isKnownVoiceEngineV2VideoCodec(viewer.maxVideoCodec)) continue; - if (!isMoreEfficientVoiceEngineV2VideoCodec(codec, viewer.maxVideoCodec)) { - continue; - } - codec = viewer.maxVideoCodec; - reason = 'clampedToViewer'; - constrainedBy = viewer.identity; - } - return {codec, reason, constrainedBy}; -} diff --git a/packages/voice_engine_v2/src/policies/index.ts b/packages/voice_engine_v2/src/policies/index.ts index 1908c1add..999679d8a 100644 --- a/packages/voice_engine_v2/src/policies/index.ts +++ b/packages/voice_engine_v2/src/policies/index.ts @@ -7,20 +7,6 @@ export type { VoiceEngineV2CameraEncodingPlanReason, } from './cameraShare'; export {applyVoiceEngineV2CameraEncodingOptions, planVoiceEngineV2CameraEncodingChange} from './cameraShare'; -export type { - VoiceEngineV2CodecViewer, - VoiceEngineV2NegotiatedCodecPlan, - VoiceEngineV2NegotiatedCodecReason, -} from './codecNegotiation'; -export { - isMoreEfficientVoiceEngineV2VideoCodec, - maxDecodableVoiceEngineV2VideoCodec, - planVoiceEngineV2NegotiatedVideoCodec, - VOICE_ENGINE_V2_VIDEO_CODEC_FLOOR, - VOICE_ENGINE_V2_VIDEO_CODEC_PREFERENCE, - voiceEngineV2VideoCodecRank, - worseVoiceEngineV2VideoCodec, -} from './codecNegotiation'; export { hasVoiceEngineV2NativeHardwareEncoder, hasVoiceEngineV2NativeNvencEncoder, diff --git a/packages/voice_engine_v2/src/protocol/codecGossip.test.ts b/packages/voice_engine_v2/src/protocol/codecGossip.test.ts deleted file mode 100644 index 8303f44b0..000000000 --- a/packages/voice_engine_v2/src/protocol/codecGossip.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {describe, expect, it} from 'vitest'; -import { - decodeVoiceEngineV2CodecGossip, - encodeVoiceEngineV2CodecGossip, - VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC, -} from './codecGossip'; -import type {VoiceEngineV2CodecGossipMessage} from './types'; - -describe('voice engine v2 codec gossip wire protocol', () => { - it('exposes a stable topic', () => { - expect(VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC).toBe('fluxer.codec.v1'); - }); - - it('round-trips a capability message', () => { - const message: VoiceEngineV2CodecGossipMessage = { - kind: 'codec.capability', - supportedVideoCodecs: ['av1', 'vp9', 'h264', 'vp8'], - }; - const decoded = decodeVoiceEngineV2CodecGossip(encodeVoiceEngineV2CodecGossip(message)); - expect(decoded).toEqual(message); - }); - - it('round-trips a viewing message', () => { - const message: VoiceEngineV2CodecGossipMessage = { - kind: 'codec.viewing', - source: 'screen', - watching: true, - supportedVideoCodecs: ['h264', 'vp8'], - }; - const decoded = decodeVoiceEngineV2CodecGossip(encodeVoiceEngineV2CodecGossip(message)); - expect(decoded).toEqual(message); - }); - - it('decodes from a raw ArrayBuffer payload', () => { - const bytes = encodeVoiceEngineV2CodecGossip({kind: 'codec.capability', supportedVideoCodecs: ['av1']}); - const buffer = new ArrayBuffer(bytes.byteLength); - new Uint8Array(buffer).set(bytes); - expect(decodeVoiceEngineV2CodecGossip(buffer)).toEqual({kind: 'codec.capability', supportedVideoCodecs: ['av1']}); - }); - - it('rejects malformed and adversarial payloads as null', () => { - expect(decodeVoiceEngineV2CodecGossip('not json')).toBeNull(); - expect(decodeVoiceEngineV2CodecGossip('123')).toBeNull(); - expect(decodeVoiceEngineV2CodecGossip(JSON.stringify({kind: 'other'}))).toBeNull(); - expect(decodeVoiceEngineV2CodecGossip(JSON.stringify({kind: 'codec.capability'}))).toBeNull(); - expect( - decodeVoiceEngineV2CodecGossip(JSON.stringify({kind: 'codec.capability', supportedVideoCodecs: ['fake']})), - ).toBeNull(); - expect( - decodeVoiceEngineV2CodecGossip( - JSON.stringify({kind: 'codec.viewing', source: 'mic', watching: true, supportedVideoCodecs: []}), - ), - ).toBeNull(); - expect( - decodeVoiceEngineV2CodecGossip( - JSON.stringify({kind: 'codec.viewing', source: 'camera', watching: 'yes', supportedVideoCodecs: []}), - ), - ).toBeNull(); - }); - - it('rejects an oversized codec list', () => { - const tooMany = JSON.stringify({ - kind: 'codec.capability', - supportedVideoCodecs: ['av1', 'av1', 'av1', 'av1', 'av1', 'av1', 'av1', 'av1', 'av1'], - }); - expect(decodeVoiceEngineV2CodecGossip(tooMany)).toBeNull(); - }); -}); diff --git a/packages/voice_engine_v2/src/protocol/codecGossip.ts b/packages/voice_engine_v2/src/protocol/codecGossip.ts deleted file mode 100644 index 5ef11dfb8..000000000 --- a/packages/voice_engine_v2/src/protocol/codecGossip.ts +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import assert from 'node:assert/strict'; -import type {VoiceEngineV2CodecGossipMessage, VoiceEngineV2VideoCodec} from './types'; - -export const VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC = 'fluxer.codec.v1'; - -const KNOWN_VIDEO_CODECS: ReadonlySet = new Set(['', 'vp8', 'vp9', 'h264', 'h265', 'av1']); -const VIDEO_CODECS_CAP = 8; - -function isVideoCodec(value: unknown): value is VoiceEngineV2VideoCodec { - return typeof value === 'string' && KNOWN_VIDEO_CODECS.has(value); -} - -function normalizeSupportedVideoCodecs(value: unknown): Array | null { - if (!Array.isArray(value)) return null; - if (value.length > VIDEO_CODECS_CAP) return null; - const codecs: Array = []; - for (const entry of value) { - if (!isVideoCodec(entry)) return null; - codecs.push(entry); - } - return codecs; -} - -export function encodeVoiceEngineV2CodecGossip(message: VoiceEngineV2CodecGossipMessage): Uint8Array { - assert.ok(message != null, 'encodeVoiceEngineV2CodecGossip message must not be null'); - assert.ok(message.kind === 'codec.capability' || message.kind === 'codec.viewing', 'unknown gossip message kind'); - return new TextEncoder().encode(JSON.stringify(message)); -} - -export function decodeVoiceEngineV2CodecGossip( - payload: ArrayBuffer | ArrayBufferView | string, -): VoiceEngineV2CodecGossipMessage | null { - const text = typeof payload === 'string' ? payload : decodeUtf8(payload); - if (text === null) return null; - let parsed: unknown; - try { - parsed = JSON.parse(text); - } catch { - return null; - } - if (typeof parsed !== 'object' || parsed === null) return null; - const candidate = parsed as Record; - if (candidate.kind === 'codec.capability') { - const supportedVideoCodecs = normalizeSupportedVideoCodecs(candidate.supportedVideoCodecs); - if (supportedVideoCodecs === null) return null; - return {kind: 'codec.capability', supportedVideoCodecs}; - } - if (candidate.kind === 'codec.viewing') { - if (candidate.source !== 'camera' && candidate.source !== 'screen') return null; - if (typeof candidate.watching !== 'boolean') return null; - const supportedVideoCodecs = normalizeSupportedVideoCodecs(candidate.supportedVideoCodecs); - if (supportedVideoCodecs === null) return null; - return { - kind: 'codec.viewing', - source: candidate.source, - watching: candidate.watching, - supportedVideoCodecs, - }; - } - return null; -} - -function decodeUtf8(payload: ArrayBuffer | ArrayBufferView): string | null { - try { - const view = - payload instanceof ArrayBuffer - ? new Uint8Array(payload) - : new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength); - return new TextDecoder('utf-8', {fatal: false}).decode(view); - } catch { - return null; - } -} diff --git a/packages/voice_engine_v2/src/protocol/events.ts b/packages/voice_engine_v2/src/protocol/events.ts index 02a53f18f..584f5443b 100644 --- a/packages/voice_engine_v2/src/protocol/events.ts +++ b/packages/voice_engine_v2/src/protocol/events.ts @@ -42,7 +42,6 @@ import type { VoiceEngineV2InboundVideoTrackSubscription, VoiceEngineV2LifecycleReason, VoiceEngineV2LiveKitRoomState, - VoiceEngineV2LocalStreamSource, VoiceEngineV2MicrophoneOptions, VoiceEngineV2NativeAudioTapOptions, VoiceEngineV2NativeCaptureFrame, @@ -62,7 +61,6 @@ import type { VoiceEngineV2Stats, VoiceEngineV2TimerOptions, VoiceEngineV2Track, - VoiceEngineV2VideoCodec, VoiceEngineV2WatchedStream, VoiceEngineV2WatchedStreamKey, } from './types'; @@ -237,31 +235,6 @@ export type VoiceEngineV2Event = | {type: 'room.trackUnpublished'; trackSid: string} | {type: 'room.trackMuted'; trackSid: string} | {type: 'room.trackUnmuted'; trackSid: string} - | { - type: 'codecNegotiation.overrideSetRequested'; - source: VoiceEngineV2LocalStreamSource; - codec: VoiceEngineV2VideoCodec | null; - } - | {type: 'codecNegotiation.localCapabilityChanged'; supportedVideoCodecs: Array} - | { - type: 'codecNegotiation.streamRegistered'; - source: VoiceEngineV2LocalStreamSource; - streamIdentity: string; - preferredCodec: VoiceEngineV2VideoCodec; - } - | {type: 'codecNegotiation.streamUnregistered'; source: VoiceEngineV2LocalStreamSource} - | { - type: 'codecNegotiation.viewerChanged'; - source: VoiceEngineV2LocalStreamSource; - viewerIdentity: string; - watching: boolean; - supportedVideoCodecs: Array; - } - | { - type: 'codecNegotiation.remoteCapabilityChanged'; - identity: string; - supportedVideoCodecs: Array; - } | {type: 'watchedStream.watchRequested'; stream: VoiceEngineV2WatchedStream} | {type: 'watchedStream.unwatchRequested'; stream: VoiceEngineV2WatchedStreamKey} | {type: 'watchedStreams.replaced'; streams: Array} diff --git a/packages/voice_engine_v2/src/protocol/index.ts b/packages/voice_engine_v2/src/protocol/index.ts index aefafb57f..445cb6b33 100644 --- a/packages/voice_engine_v2/src/protocol/index.ts +++ b/packages/voice_engine_v2/src/protocol/index.ts @@ -1,10 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -export { - decodeVoiceEngineV2CodecGossip, - encodeVoiceEngineV2CodecGossip, - VOICE_ENGINE_V2_CODEC_GOSSIP_TOPIC, -} from './codecGossip'; export type {VoiceEngineV2Command, VoiceEngineV2CommandType} from './commands'; export {getVoiceEngineV2CommandResourceKey, getVoiceEngineV2CommandTypeResourceKey} from './commands'; export type { @@ -24,9 +19,6 @@ export type { VoiceEngineV2CameraEncodingOptions, VoiceEngineV2CameraOptions, VoiceEngineV2Capabilities, - VoiceEngineV2CodecGossipMessage, - VoiceEngineV2CodecNegotiationState, - VoiceEngineV2CodecStreamNegotiation, VoiceEngineV2ConnectionModel, VoiceEngineV2ConnectionQuality, VoiceEngineV2ConnectionStatus, @@ -86,7 +78,6 @@ export type { VoiceEngineV2SendStats, VoiceEngineV2Stats, VoiceEngineV2StatsSample, - VoiceEngineV2StreamNegotiationProjection, VoiceEngineV2TimerOptions, VoiceEngineV2Track, VoiceEngineV2TrackKind, diff --git a/packages/voice_engine_v2/src/protocol/types.ts b/packages/voice_engine_v2/src/protocol/types.ts index 1d972be58..d2ca7969f 100644 --- a/packages/voice_engine_v2/src/protocol/types.ts +++ b/packages/voice_engine_v2/src/protocol/types.ts @@ -676,41 +676,6 @@ export interface VoiceEngineV2WatchedStreamKey { export type VoiceEngineV2LocalStreamSource = 'camera' | 'screen'; -export interface VoiceEngineV2CodecStreamNegotiation { - source: VoiceEngineV2LocalStreamSource; - streamIdentity: string; - preferredCodec: VoiceEngineV2VideoCodec; - negotiatedCodec: VoiceEngineV2VideoCodec; - constrainedBy: string | null; - viewers: Record; -} - -export interface VoiceEngineV2CodecNegotiationState { - overrides: Partial>; - localSupportedVideoCodecs: Array; - remoteSupportedVideoCodecs: Record>; - streams: Record; -} - -export interface VoiceEngineV2StreamNegotiationProjection { - source: VoiceEngineV2LocalStreamSource; - streamIdentity: string; - negotiatedCodec: VoiceEngineV2VideoCodec; - preferredCodec: VoiceEngineV2VideoCodec; - constrainedBy: string | null; - renegotiating: boolean; - viewerCount: number; -} - -export type VoiceEngineV2CodecGossipMessage = - | {kind: 'codec.capability'; supportedVideoCodecs: Array} - | { - kind: 'codec.viewing'; - source: VoiceEngineV2LocalStreamSource; - watching: boolean; - supportedVideoCodecs: Array; - }; - export interface VoiceEngineV2InboundVideoTrackSubscription { participantSid: string; participantIdentity?: string; diff --git a/packages/voice_engine_v2/src/runtime/VoiceEngineV2Controller.ts b/packages/voice_engine_v2/src/runtime/VoiceEngineV2Controller.ts index 3d48f8561..a66968225 100644 --- a/packages/voice_engine_v2/src/runtime/VoiceEngineV2Controller.ts +++ b/packages/voice_engine_v2/src/runtime/VoiceEngineV2Controller.ts @@ -12,7 +12,6 @@ import type { VoiceEngineV2GatewayDesiredVoiceState, VoiceEngineV2GatewayVoiceStateWrite, VoiceEngineV2LifecycleReason, - VoiceEngineV2LocalStreamSource, VoiceEngineV2MicrophoneOptions, VoiceEngineV2Model, VoiceEngineV2NativeAudioTapOptions, @@ -27,7 +26,6 @@ import type { VoiceEngineV2ScreenEncodingOptions, VoiceEngineV2ScreenOptions, VoiceEngineV2TimerOptions, - VoiceEngineV2VideoCodec, VoiceEngineV2WatchedStream, VoiceEngineV2WatchedStreamKey, } from '../protocol'; @@ -113,45 +111,6 @@ export class VoiceEngineV2Controller { this.runtime.dispatch({type: 'camera.updateEncodingRequested', options}); } - setVideoCodecOverride(source: VoiceEngineV2LocalStreamSource, codec: VoiceEngineV2VideoCodec | null): void { - this.runtime.dispatch({type: 'codecNegotiation.overrideSetRequested', source, codec}); - } - - setLocalVideoCodecCapability(supportedVideoCodecs: Array): void { - this.runtime.dispatch({type: 'codecNegotiation.localCapabilityChanged', supportedVideoCodecs}); - } - - registerLocalStreamCodec( - source: VoiceEngineV2LocalStreamSource, - streamIdentity: string, - preferredCodec: VoiceEngineV2VideoCodec, - ): void { - this.runtime.dispatch({type: 'codecNegotiation.streamRegistered', source, streamIdentity, preferredCodec}); - } - - unregisterLocalStreamCodec(source: VoiceEngineV2LocalStreamSource): void { - this.runtime.dispatch({type: 'codecNegotiation.streamUnregistered', source}); - } - - reportStreamViewer( - source: VoiceEngineV2LocalStreamSource, - viewerIdentity: string, - watching: boolean, - supportedVideoCodecs: Array, - ): void { - this.runtime.dispatch({ - type: 'codecNegotiation.viewerChanged', - source, - viewerIdentity, - watching, - supportedVideoCodecs, - }); - } - - reportRemoteVideoCodecCapability(identity: string, supportedVideoCodecs: Array): void { - this.runtime.dispatch({type: 'codecNegotiation.remoteCapabilityChanged', identity, supportedVideoCodecs}); - } - unpublishCamera(options?: VoiceEngineV2CameraOptions): void { this.runtime.dispatch({type: 'camera.unpublishRequested', options}); } diff --git a/packages/voice_engine_v2/src/testing/conformance.ts b/packages/voice_engine_v2/src/testing/conformance.ts index cf07c198e..12c3883d2 100644 --- a/packages/voice_engine_v2/src/testing/conformance.ts +++ b/packages/voice_engine_v2/src/testing/conformance.ts @@ -84,40 +84,6 @@ export function runVoiceEngineV2ConformanceSuite( }); }); - it('renegotiates the publication codec in place when a viewer cannot decode it', async () => { - const {implementation, driver} = createSubject(); - const runtime = createConformanceRuntime(implementation); - - runtime.dispatch({type: 'connection.connectRequested', options: {url: 'wss://voice', token: 'token'}}); - await waitForRuntime(); - runtime.dispatch({type: 'camera.publishRequested', options: {deviceId: 'cam-1', codec: 'av1'}}); - await waitForRuntime(); - runtime.dispatch({ - type: 'codecNegotiation.streamRegistered', - source: 'camera', - streamIdentity: 'cam-stream-1', - preferredCodec: 'av1', - }); - await waitForRuntime(); - runtime.dispatch({ - type: 'codecNegotiation.viewerChanged', - source: 'camera', - viewerIdentity: 'bob', - watching: true, - supportedVideoCodecs: ['h264', 'vp8'], - }); - await waitForRuntime(); - - expect(driver.calls).toEqual([ - {type: 'connect', options: {url: 'wss://voice', token: 'token'}}, - {type: 'publishCamera', options: {deviceId: 'cam-1', codec: 'av1'}}, - {type: 'publishCamera', options: {deviceId: 'cam-1', codec: 'h264'}}, - ]); - expect(runtime.snapshot.camera.published?.codec).toBe('h264'); - expect(runtime.snapshot.codecNegotiation.streams.camera?.streamIdentity).toBe('cam-stream-1'); - expect(runtime.snapshot.codecNegotiation.streams.camera?.constrainedBy).toBe('bob'); - }); - it('adds and removes screen-share audio without republishing the screen video', async () => { const {implementation, driver} = createSubject(); const runtime = createConformanceRuntime(implementation);