diff --git a/app/src/cli.c b/app/src/cli.c index 267314b8..4047270e 100644 --- a/app/src/cli.c +++ b/app/src/cli.c @@ -58,6 +58,7 @@ #define OPT_PRINT_FPS 1038 #define OPT_NO_POWER_ON 1039 #define OPT_CODEC 1040 +#define OPT_NO_AUDIO 1041 struct sc_option { char shortopt; @@ -300,6 +301,11 @@ static const struct sc_option options[] = { .text = "Do not display device (only when screen recording or V4L2 " "sink is enabled).", }, + { + .longopt_id = OPT_NO_AUDIO, + .longopt = "no-audio", + .text = "Disable audio forwarding.", + }, { .longopt_id = OPT_NO_KEY_REPEAT, .longopt = "no-key-repeat", @@ -1628,6 +1634,9 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[], case OPT_NO_DOWNSIZE_ON_ERROR: opts->downsize_on_error = false; break; + case OPT_NO_AUDIO: + opts->audio = false; + break; case OPT_NO_CLEANUP: opts->cleanup = false; break; diff --git a/app/src/options.c b/app/src/options.c index 525795ae..09e8b2af 100644 --- a/app/src/options.c +++ b/app/src/options.c @@ -66,4 +66,5 @@ const struct scrcpy_options scrcpy_options_default = { .cleanup = true, .start_fps_counter = false, .power_on = true, + .audio = true, }; diff --git a/app/src/options.h b/app/src/options.h index b9d237e0..7bf30011 100644 --- a/app/src/options.h +++ b/app/src/options.h @@ -147,6 +147,7 @@ struct scrcpy_options { bool cleanup; bool start_fps_counter; bool power_on; + bool audio; }; extern const struct scrcpy_options scrcpy_options_default; diff --git a/app/src/scrcpy.c b/app/src/scrcpy.c index 6565739e..8685bce1 100644 --- a/app/src/scrcpy.c +++ b/app/src/scrcpy.c @@ -348,6 +348,7 @@ scrcpy(struct scrcpy_options *options) { .lock_video_orientation = options->lock_video_orientation, .control = options->control, .display_id = options->display_id, + .audio = options->audio, .show_touches = options->show_touches, .stay_awake = options->stay_awake, .codec_options = options->codec_options, diff --git a/app/src/server.c b/app/src/server.c index 96bff77e..213e15e5 100644 --- a/app/src/server.c +++ b/app/src/server.c @@ -217,6 +217,9 @@ execute_server(struct sc_server *server, ADD_PARAM("log_level=%s", log_level_to_server_string(params->log_level)); ADD_PARAM("bit_rate=%" PRIu32, params->bit_rate); + if (!params->audio) { + ADD_PARAM("audio=false"); + } if (params->codec != SC_CODEC_H264) { ADD_PARAM("codec=%s", sc_server_get_codec_name(params->codec)); } diff --git a/app/src/server.h b/app/src/server.h index d6b1401e..30dc04c6 100644 --- a/app/src/server.h +++ b/app/src/server.h @@ -38,6 +38,7 @@ struct sc_server_params { int8_t lock_video_orientation; bool control; uint32_t display_id; + bool audio; bool show_touches; bool stay_awake; bool force_adb_forward; diff --git a/server/src/main/java/com/genymobile/scrcpy/Options.java b/server/src/main/java/com/genymobile/scrcpy/Options.java index 5c59ec8e..07789974 100644 --- a/server/src/main/java/com/genymobile/scrcpy/Options.java +++ b/server/src/main/java/com/genymobile/scrcpy/Options.java @@ -8,6 +8,7 @@ public class Options { private Ln.Level logLevel = Ln.Level.DEBUG; private int scid = -1; // 31-bit non-negative value, or -1 + private boolean audio = true; private int maxSize; private VideoCodec codec = VideoCodec.H264; private int bitRate = 8000000; @@ -49,6 +50,14 @@ public class Options { this.scid = scid; } + public boolean getAudio() { + return audio; + } + + public void setAudio(boolean audio) { + this.audio = audio; + } + public int getMaxSize() { return maxSize; } diff --git a/server/src/main/java/com/genymobile/scrcpy/Server.java b/server/src/main/java/com/genymobile/scrcpy/Server.java index d570a9fb..2aeeb79e 100644 --- a/server/src/main/java/com/genymobile/scrcpy/Server.java +++ b/server/src/main/java/com/genymobile/scrcpy/Server.java @@ -169,6 +169,10 @@ public final class Server { Ln.Level level = Ln.Level.valueOf(value.toUpperCase(Locale.ENGLISH)); options.setLogLevel(level); break; + case "audio": + boolean audio = Boolean.parseBoolean(value); + options.setAudio(audio); + break; case "codec": VideoCodec codec = VideoCodec.findByName(value); if (codec == null) {