Resolves #306 Improve camera connection

This commit is contained in:
estevez-dev 2019-02-20 16:39:57 +02:00
parent bc0e72ca52
commit 538d3603dc
3 changed files with 21 additions and 13 deletions

View File

@ -12,8 +12,6 @@ class CameraEntity extends Entity {
@override @override
Widget _buildAdditionalControlsForPage(BuildContext context) { Widget _buildAdditionalControlsForPage(BuildContext context) {
return CameraControlsWidget( return CameraStreamView();
url: '$homeAssistantWebHost/api/camera_proxy_stream/$entityId?token=${this.attributes['access_token']}',
);
} }
} }

View File

@ -1,35 +1,37 @@
part of '../../main.dart'; part of '../../main.dart';
class CameraControlsWidget extends StatefulWidget { class CameraStreamView extends StatefulWidget {
final String url; CameraStreamView({Key key}) : super(key: key);
CameraControlsWidget({Key key, @required this.url}) : super(key: key);
@override @override
_CameraControlsWidgetState createState() => _CameraControlsWidgetState(); _CameraStreamViewState createState() => _CameraStreamViewState();
} }
class _CameraControlsWidgetState extends State<CameraControlsWidget> { class _CameraStreamViewState extends State<CameraStreamView> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_connect();
} }
CameraEntity _entity;
http.Client client; http.Client client;
http.StreamedResponse response; http.StreamedResponse response;
List<int> binaryImage = []; List<int> binaryImage = [];
String cameraState = "Connecting..."; String cameraState = "Connecting...";
bool timeToStop = false; bool timeToStop = false;
Completer streamCompleter; Completer streamCompleter;
bool started = false;
void _connect() async { void _connect() async {
started = true;
timeToStop = false; timeToStop = false;
String streamUrl = '$homeAssistantWebHost/api/camera_proxy_stream/${_entity.entityId}?token=${_entity.attributes['access_token']}';
client = new http.Client(); // create a client to make api calls client = new http.Client(); // create a client to make api calls
http.Request request = new http.Request("GET", Uri.parse(widget.url)); // create get request http.Request request = new http.Request("GET", Uri.parse(streamUrl)); // create get request
Logger.d("[Sending] ==> ${widget.url}"); Logger.d("[Sending] ==> ${streamUrl}");
response = await client.send(request); response = await client.send(request);
setState(() { setState(() {
cameraState = "Starting..."; cameraState = "Starting...";
@ -126,6 +128,14 @@ class _CameraControlsWidgetState extends State<CameraControlsWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (!started) {
_entity = EntityModel
.of(context)
.entityWrapper
.entity;
_connect();
}
if (binaryImage.isEmpty) { if (binaryImage.isEmpty) {
return Column( return Column(
children: <Widget>[ children: <Widget>[

View File

@ -50,6 +50,7 @@ part 'entity_widgets/common/mode_selector.dart';
part 'entity_widgets/common/universal_slider.dart'; part 'entity_widgets/common/universal_slider.dart';
part 'entity_widgets/common/flat_service_button.dart'; part 'entity_widgets/common/flat_service_button.dart';
part 'entity_widgets/common/light_color_picker.dart'; part 'entity_widgets/common/light_color_picker.dart';
part 'entity_widgets/common/camera_stream_view.dart';
part 'entity_widgets/entity_colors.class.dart'; part 'entity_widgets/entity_colors.class.dart';
part 'entity_widgets/entity_page_container.dart'; part 'entity_widgets/entity_page_container.dart';
part 'entity_widgets/history_chart/entity_history.dart'; part 'entity_widgets/history_chart/entity_history.dart';
@ -73,7 +74,6 @@ part 'entity_widgets/controls/light_controls.dart';
part 'entity_widgets/controls/media_player_widgets.dart'; part 'entity_widgets/controls/media_player_widgets.dart';
part 'entity_widgets/controls/fan_controls.dart'; part 'entity_widgets/controls/fan_controls.dart';
part 'entity_widgets/controls/alarm_control_panel_controls.dart'; part 'entity_widgets/controls/alarm_control_panel_controls.dart';
part 'entity_widgets/controls/camera_controls.dart';
part 'settings.page.dart'; part 'settings.page.dart';
part 'configuration.page.dart'; part 'configuration.page.dart';
part 'home_assistant.class.dart'; part 'home_assistant.class.dart';