Resolves #306 Improve camera connection
This commit is contained in:
parent
bc0e72ca52
commit
538d3603dc
@ -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']}',
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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>[
|
@ -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';
|
||||||
|
Reference in New Issue
Block a user