feat: 增加分辨率修改
This commit is contained in:
@@ -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 ? "远程控制中" : "未连接");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user