diff --git a/src/Settings/Video.SettingsGroup.json b/src/Settings/Video.SettingsGroup.json index 57e12ad6cfa29863793319c712cfadc44bded48f..d59257962e61ef2133df61980d70edfdfcca6a54 100644 --- a/src/Settings/Video.SettingsGroup.json +++ b/src/Settings/Video.SettingsGroup.json @@ -69,5 +69,14 @@ "min": 100, "units": "MB", "defaultValue": 2048 +}, +{ + "name": "RtspTimeout", + "shortDescription": "RTSP Video Timeout", + "longDescription": "How long to wait before assuming RTSP link is gone.", + "type": "uint32", + "min": 1, + "units": "s", + "defaultValue": 2 } ] diff --git a/src/Settings/VideoSettings.cc b/src/Settings/VideoSettings.cc index 577e590524c3118fd969ae3b9c2d8ef83c3541dc..f637544244e39c0d032d02c2f68f9e3832cdfd1b 100644 --- a/src/Settings/VideoSettings.cc +++ b/src/Settings/VideoSettings.cc @@ -27,6 +27,7 @@ const char* VideoSettings::videoGridLinesName = "VideoGridLines"; const char* VideoSettings::showRecControlName = "ShowRecControl"; const char* VideoSettings::recordingFormatName = "RecordingFormat"; const char* VideoSettings::maxVideoSizeName = "MaxVideoSize"; +const char* VideoSettings::rtspTimeoutName = "RtspTimeout"; const char* VideoSettings::videoSourceNoVideo = "No Video Available"; const char* VideoSettings::videoDisabled = "Video Stream Disabled"; @@ -43,6 +44,7 @@ VideoSettings::VideoSettings(QObject* parent) , _showRecControlFact(NULL) , _recordingFormatFact(NULL) , _maxVideoSizeFact(NULL) + , _rtspTimeoutFact(NULL) { QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership); qmlRegisterUncreatableType("QGroundControl.SettingsManager", 1, 0, "VideoSettings", "Reference only"); @@ -153,3 +155,12 @@ Fact* VideoSettings::maxVideoSize(void) return _maxVideoSizeFact; } + +Fact* VideoSettings::rtspTimeout(void) +{ + if (!_rtspTimeoutFact) { + _rtspTimeoutFact = _createSettingsFact(rtspTimeoutName); + } + + return _rtspTimeoutFact; +} diff --git a/src/Settings/VideoSettings.h b/src/Settings/VideoSettings.h index 71a6652c7d15a888d8ec61e3e2c5208b4b591998..2398a0ef5290440d89a2b841e4d404a00fcc1b24 100644 --- a/src/Settings/VideoSettings.h +++ b/src/Settings/VideoSettings.h @@ -27,6 +27,7 @@ public: Q_PROPERTY(Fact* showRecControl READ showRecControl CONSTANT) Q_PROPERTY(Fact* recordingFormat READ recordingFormat CONSTANT) Q_PROPERTY(Fact* maxVideoSize READ maxVideoSize CONSTANT) + Q_PROPERTY(Fact* rtspTimeout READ rtspTimeout CONSTANT) Fact* videoSource (void); Fact* udpPort (void); @@ -36,6 +37,7 @@ public: Fact* showRecControl (void); Fact* recordingFormat (void); Fact* maxVideoSize (void); + Fact* rtspTimeout (void); static const char* videoSettingsGroupName; @@ -47,6 +49,7 @@ public: static const char* showRecControlName; static const char* recordingFormatName; static const char* maxVideoSizeName; + static const char* rtspTimeoutName; static const char* videoSourceNoVideo; static const char* videoDisabled; @@ -62,6 +65,7 @@ private: SettingsFact* _showRecControlFact; SettingsFact* _recordingFormatFact; SettingsFact* _maxVideoSizeFact; + SettingsFact* _rtspTimeoutFact; }; #endif diff --git a/src/VideoStreaming/VideoReceiver.cc b/src/VideoStreaming/VideoReceiver.cc index e915fa3605feacd4dba13db5ecab9176db74777d..882e07ab09577851ddd294a53e0fcab36ad97211 100644 --- a/src/VideoStreaming/VideoReceiver.cc +++ b/src/VideoStreaming/VideoReceiver.cc @@ -768,12 +768,13 @@ VideoReceiver::_updateTimer() } } if(_videoRunning) { + uint32_t timeout = qgcApp()->toolbox()->settingsManager()->videoSettings()->rtspTimeout()->rawValue().toUInt(); time_t elapsed = 0; time_t lastFrame = _videoSurface->lastFrame(); if(lastFrame != 0) { elapsed = time(0) - _videoSurface->lastFrame(); } - if(elapsed > 2 && _videoSurface) { + if(elapsed > timeout && _videoSurface) { stop(); } } else {