diff --git a/lib/src/media/stream/client.dart b/lib/src/media/stream/client.dart index 8110e98c870..c2f04f2688f 100644 --- a/lib/src/media/stream/client.dart +++ b/lib/src/media/stream/client.dart @@ -85,6 +85,43 @@ class StreamManager { return client; } + Future> getStreamOptions(String name) async { + final sanitizedName = _getValidSDPTrackName(name); + try { + final response = await _client.getStreamOptions(GetStreamOptionsRequest()..name = sanitizedName); + _logger.d('Got options for stream named $name'); + return response.resolutions; + } catch (e) { + _logger.e('Failed to get options for stream named $name'); + return []; + } + } + + Future setStreamOptions(String name, int width, int height) async { + final sanitizedName = _getValidSDPTrackName(name); + final resolution = Resolution() + ..width = width + ..height = height; + try { + await _client.setStreamOptions(SetStreamOptionsRequest() + ..name = sanitizedName + ..resolution = resolution); + _logger.d('Set options for stream named $name'); + } catch (e) { + _logger.e('Failed to set options for stream named $name'); + } + } + + Future resetStreamOptions(String name) async { + final sanitizedName = _getValidSDPTrackName(name); + try { + await _client.setStreamOptions(SetStreamOptionsRequest()..name = sanitizedName); + _logger.d('Reset options for stream named $name'); + } catch (e) { + _logger.e('Failed to reset options for stream named $name'); + } + } + /// Request that a stream get added to the WebRTC channel Future _add(String name) async { final sanitizedName = _getValidSDPTrackName(name); diff --git a/lib/src/robot/client.dart b/lib/src/robot/client.dart index 71fbbfa5147..080f2f3666b 100644 --- a/lib/src/robot/client.dart +++ b/lib/src/robot/client.dart @@ -7,6 +7,7 @@ import 'package:logger/logger.dart'; import '../gen/common/v1/common.pb.dart'; import '../gen/google/protobuf/struct.pb.dart'; import '../gen/robot/v1/robot.pbgrpc.dart' as rpb; +import '../gen/stream/v1/stream.pbgrpc.dart'; import '../media/stream/client.dart'; import '../resource/base.dart'; import '../resource/manager.dart'; @@ -299,6 +300,21 @@ class RobotClient { return _streamManager.getStreamClient(name); } + /// Get the stream options for a stream with the given name. + Future> getStreamOptions(String name) async { + return _streamManager.getStreamOptions(name); + } + + /// Set the options for a stream with the given name. + Future setStreamOptions(String name, int width, int height) { + return _streamManager.setStreamOptions(name, width, height); + } + + // Reset the options for a stream with the given name. + Future resetStreamOptions(String name) { + return _streamManager.resetStreamOptions(name); + } + /// Get app-related information about the machine. /// /// ```