[Android] Add a setting to cast audio only

Nicolas Pomepuy git at videolan.org
Mon Jan 27 13:11:38 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Jan 16 09:39:52 2025 +0100| [ff1b167cdb42e211c84c1d6a1eef183480585ca9] | committer: Duncan McNamara

Add a setting to cast audio only

Fixes #3011

> https://code.videolan.org/videolan/vlc-android/commit/ff1b167cdb42e211c84c1d6a1eef183480585ca9
---

 .../resources/src/main/java/org/videolan/resources/VLCOptions.kt    | 2 ++
 application/resources/src/main/res/values/strings.xml               | 2 ++
 application/vlc-android/res/xml/preferences_casting.xml             | 6 ++++++
 .../src/org/videolan/vlc/gui/preferences/PreferencesCasting.kt      | 2 +-
 .../vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt       | 1 +
 5 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/application/resources/src/main/java/org/videolan/resources/VLCOptions.kt b/application/resources/src/main/java/org/videolan/resources/VLCOptions.kt
index d8d161d259..b510cabda4 100644
--- a/application/resources/src/main/java/org/videolan/resources/VLCOptions.kt
+++ b/application/resources/src/main/java/org/videolan/resources/VLCOptions.kt
@@ -75,6 +75,7 @@ object VLCOptions {
             val subtitlesEncoding = pref.getString("subtitle_text_encoding", "") ?: ""
             val frameSkip = pref.getBoolean("enable_frame_skip", false)
             val verboseMode = pref.getBoolean("enable_verbose_mode", true)
+            val castingAudioOnly = pref.getBoolean("casting_audio_only", false)
 
             var deblocking = -1
             try {
@@ -105,6 +106,7 @@ object VLCOptions {
 
 
             val opengl = Integer.parseInt(pref.getString("opengl", "-1")!!)
+            if (castingAudioOnly) options.add("--no-sout-chromecast-video")
             options.add(if (timeStreching) "--audio-time-stretch" else "--no-audio-time-stretch")
             options.add("--avcodec-skiploopfilter")
             options.add("" + deblocking)
diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index 217e36158d..48c4b77fea 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -495,6 +495,8 @@
     <string name="casting_switch_title">Wireless casting</string>
     <string name="casting_passthrough_title">Audio Passthrough</string>
     <string name="casting_passthrough_summary">Let your TV manage audio rendering</string>
+    <string name="casting_audio_only">Audio only</string>
+    <string name="casting_audio_only_summary">Cast only audio, no video</string>
     <string name="casting_conversion_quality_title">Conversion quality</string>
     <string name="casting_conversion_quality_summary">Select the conversion quality when casting on remote screen</string>
     <string name="casting_quality_high">High</string>
diff --git a/application/vlc-android/res/xml/preferences_casting.xml b/application/vlc-android/res/xml/preferences_casting.xml
index 7065f5470a..d6436934e6 100644
--- a/application/vlc-android/res/xml/preferences_casting.xml
+++ b/application/vlc-android/res/xml/preferences_casting.xml
@@ -12,6 +12,12 @@
                 android:switchTextOff="Disabled"
                 android:switchTextOn="Enabled"
                 android:title="@string/casting_switch_title"/>
+        <CheckBoxPreference
+                android:key="casting_audio_only"
+                android:defaultValue="false"
+                android:summary="@string/casting_audio_only_summary"
+                android:title="@string/casting_audio_only"
+                android:dependency="enable_casting"/>
         <CheckBoxPreference
                 android:key="casting_passthrough"
                 android:defaultValue="false"
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesCasting.kt b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesCasting.kt
index d922ad17cd..3095586990 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesCasting.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesCasting.kt
@@ -53,7 +53,7 @@ class PreferencesCasting : BasePreferenceFragment(), SharedPreferences.OnSharedP
     }
     override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
         when (key) {
-            "casting_passthrough", "casting_quality" -> {
+            "casting_passthrough", "casting_quality", "casting_audio_only" -> {
                 lifecycleScope.launch {
                     VLCInstance.restart()
                     restartMediaPlayer()
diff --git a/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt b/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
index bab4dd43c2..952a90aa0c 100644
--- a/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
+++ b/application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
@@ -541,6 +541,7 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
             }
             //todo in VLC 4.0, this should be done by using libvlc_media_player_set_time instead of start-time
             media.addOption(":start-time=${start/1000L}")
+            media.addOption(":no-sout-chromecast-video")
             VLCOptions.setMediaOptions(media, ctx, flags or mw.flags, PlaybackService.hasRenderer())
             /* keeping only video during benchmark */
             if (isBenchmark) {



More information about the Android mailing list