feat: 增加分辨率修改

This commit is contained in:
2026-07-21 11:05:40 +08:00
parent 9e5ac91e46
commit 341dce249f
25 changed files with 646 additions and 6 deletions

View File

@@ -11,6 +11,13 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
@@ -47,6 +54,7 @@ public class MainActivity extends AppCompatActivity {
private LinearLayout setupPanel;
private TextView tvStatusControl;
private TextView tvStats;
private Spinner spinnerResolution;
private WebSocketClient wsClient;
private WebRtcClient webRtcClient;
@@ -89,6 +97,7 @@ public class MainActivity extends AppCompatActivity {
setupPanel = findViewById(R.id.setup_panel);
tvStatusControl = findViewById(R.id.tv_status_control);
tvStats = findViewById(R.id.tv_stats);
spinnerResolution = findViewById(R.id.spinner_resolution);
// 默认服务器地址
etServerUrl.setText("ws://175.178.213.60:8088/ws/signal");
@@ -147,6 +156,7 @@ public class MainActivity extends AppCompatActivity {
}
});
setupResolutionSpinner();
updateUI(false);
}
@@ -458,11 +468,64 @@ public class MainActivity extends AppCompatActivity {
tvStatus.setText("状态: 已停止");
}
/** 分辨率预设(发送给被控端的 SET_RESOLUTION 参数)。 */
private static class ResolutionPreset {
final String label;
final int width;
final int height;
final int fps;
ResolutionPreset(String label, int width, int height, int fps) {
this.label = label;
this.width = width;
this.height = height;
this.fps = fps;
}
@Override
public String toString() {
return label;
}
}
/** 构建分辨率下拉框,选择后请求被控端切换采集分辨率。 */
private void setupResolutionSpinner() {
List<ResolutionPreset> presets = new ArrayList<>();
presets.add(new ResolutionPreset("原始画质", 0, 0, 0)); // 被控端原生分辨率
presets.add(new ResolutionPreset("1080P", 1920, 0, 0));
presets.add(new ResolutionPreset("720P", 1280, 0, 0));
presets.add(new ResolutionPreset("480P", 854, 0, 0));
ArrayAdapter<ResolutionPreset> adapter = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_item, presets);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerResolution.setAdapter(adapter);
spinnerResolution.setSelection(0);
// 先选中默认项再设置监听,避免初始化即触发一次切换。
spinnerResolution.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
ResolutionPreset preset = (ResolutionPreset) parent.getItemAtPosition(position);
if (webRtcClient != null) {
webRtcClient.requestResolutionChange(preset.width, preset.height, preset.fps);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private void updateUI(boolean connected) {
setupPanel.setVisibility(connected ? View.GONE : View.VISIBLE);
controlPanel.setVisibility(connected ? View.VISIBLE : View.GONE);
btnConnect.setEnabled(!connected);
btnDisconnect.setEnabled(connected);
if (spinnerResolution != null) {
spinnerResolution.setEnabled(connected);
}
if (tvStatusControl != null) {
tvStatusControl.setText(connected ? "远程控制中" : "未连接");
}