Fallback to MJPEG camera stream if streaming component is missing

This commit is contained in:
Yegor Vialov
2020-04-11 13:13:20 +00:00
parent 022622522f
commit 68d14bd13d

View File

@ -50,25 +50,36 @@ class _CameraStreamViewState extends State<CameraStreamView> {
}); });
}) })
.catchError((e) { .catchError((e) {
_loading.completeError(e); if (e == 'start_stream_failed') {
Logger.e("[Camera Player] $e"); Logger.e("[Camera Player] Home Assistant failed starting stream. Forcing MJPEG: $e");
_loadMJPEG().then((_) {
_loading.complete();
});
} else {
_loading.completeError(e);
Logger.e("[Camera Player] Error loading stream: $e");
}
}); });
} else { } else {
_streamUrl = '${ConnectionManager().httpWebHost}/api/camera_proxy_stream/${_entity _loadMJPEG().then((_) {
.entityId}?token=${_entity.attributes['access_token']}';
_jsMessageChannelName = 'HA_${_entity.entityId.replaceAll('.', '_')}';
rootBundle.loadString('assets/html/cameraView.html').then((file) {
_webViewHtml = Uri.dataFromString(
file.replaceFirst('{{stream_url}}', _streamUrl).replaceFirst('{{message_channel}}', _jsMessageChannelName),
mimeType: 'text/html',
encoding: Encoding.getByName('utf-8')
).toString();
_loading.complete(); _loading.complete();
}); });
} }
return _loading.future; return _loading.future;
} }
Future _loadMJPEG() async {
_streamUrl = '${ConnectionManager().httpWebHost}/api/camera_proxy_stream/${_entity
.entityId}?token=${_entity.attributes['access_token']}';
_jsMessageChannelName = 'HA_${_entity.entityId.replaceAll('.', '_')}';
var file = await rootBundle.loadString('assets/html/cameraView.html');
_webViewHtml = Uri.dataFromString(
file.replaceFirst('{{stream_url}}', _streamUrl).replaceFirst('{{message_channel}}', _jsMessageChannelName),
mimeType: 'text/html',
encoding: Encoding.getByName('utf-8')
).toString();
}
Widget _buildScreen() { Widget _buildScreen() {
Widget screenWidget; Widget screenWidget;
if (!_isLoaded) { if (!_isLoaded) {