Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Basic video streaming discovery using MAVLink #5271

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions qgroundcontrol.pro
Expand Up @@ -635,6 +635,7 @@ HEADERS += \
src/ui/uas/UASQuickViewItem.h \
src/ui/uas/UASQuickViewItemSelect.h \
src/ui/uas/UASQuickViewTextItem.h \
src/ViewWidgets/VideoStreamingWidget.h \
}

iOSBuild {
Expand Down Expand Up @@ -799,6 +800,7 @@ SOURCES += \
src/ui/uas/UASQuickViewItem.cc \
src/ui/uas/UASQuickViewItemSelect.cc \
src/ui/uas/UASQuickViewTextItem.cc \
src/ViewWidgets/VideoStreamingWidget.cc \
}

# Palette test widget in debug builds
Expand Down Expand Up @@ -1027,6 +1029,7 @@ HEADERS += \
src/VideoStreaming/VideoItem.h \
src/VideoStreaming/VideoReceiver.h \
src/VideoStreaming/VideoStreaming.h \
src/VideoStreaming/MAVLinkVideoManager.h \
src/VideoStreaming/VideoSurface.h \
src/VideoStreaming/VideoSurface_p.h \

Expand All @@ -1035,6 +1038,7 @@ SOURCES += \
src/VideoStreaming/VideoReceiver.cc \
src/VideoStreaming/VideoStreaming.cc \
src/VideoStreaming/VideoSurface.cc \
src/VideoStreaming/MAVLinkVideoManager.cc \

contains (CONFIG, DISABLE_VIDEOSTREAMING) {
message("Skipping support for video streaming (manual override from command line)")
Expand Down
1 change: 1 addition & 0 deletions qgroundcontrol.qrc
Expand Up @@ -24,6 +24,7 @@
<file alias="DebugWindow.qml">src/ui/preferences/DebugWindow.qml</file>
<file alias="ESP8266Component.qml">src/AutoPilotPlugins/Common/ESP8266Component.qml</file>
<file alias="ESP8266ComponentSummary.qml">src/AutoPilotPlugins/Common/ESP8266ComponentSummary.qml</file>
<file alias="VideoStreamingWidget.qml">src/ViewWidgets/VideoStreamingWidget.qml</file>
<file alias="SyslinkComponent.qml">src/AutoPilotPlugins/Common/SyslinkComponent.qml</file>
<file alias="FirmwareUpgrade.qml">src/VehicleSetup/FirmwareUpgrade.qml</file>
<file alias="FlightDisplayViewDummy.qml">src/FlightDisplay/FlightDisplayViewDummy.qml</file>
Expand Down
26 changes: 24 additions & 2 deletions src/FlightDisplay/VideoManager.cc
Expand Up @@ -38,6 +38,7 @@ VideoManager::VideoManager(QGCApplication* app, QGCToolbox* toolbox)
, _init(false)
, _videoSettings(NULL)
, _showFullScreen(false)
, _mavlinkVideoManager(NULL)
{
}

Expand All @@ -62,6 +63,8 @@ VideoManager::setToolbox(QGCToolbox *toolbox)
connect(_videoSettings->rtspUrl(), &Fact::rawValueChanged, this, &VideoManager::_rtspUrlChanged);


_mavlinkVideoManager = new MAVLinkVideoManager();
connect(_mavlinkVideoManager, &MAVLinkVideoManager::currentUriChanged, this, &VideoManager::_mavlinkUriChanged);
#if defined(QGC_GST_STREAMING)
#ifndef QGC_DISABLE_UVC
// If we are using a UVC camera setup the device name
Expand Down Expand Up @@ -100,6 +103,7 @@ void VideoManager::_videoSourceChanged(void)
{
emit hasVideoChanged();
emit isGStreamerChanged();
emit isMAVLinkStreamChanged();
_restartVideo();
}

Expand All @@ -113,6 +117,11 @@ void VideoManager::_rtspUrlChanged(void)
_restartVideo();
}

void VideoManager::_mavlinkUriChanged(void)
{
_restartVideo();
}

//-----------------------------------------------------------------------------
void
VideoManager::grabImage(QString imageFile)
Expand All @@ -138,12 +147,23 @@ VideoManager::isGStreamer()
{
#if defined(QGC_GST_STREAMING)
QString videoSource = _videoSettings->videoSource()->rawValue().toString();
return videoSource == VideoSettings::videoSourceUDP || videoSource == VideoSettings::videoSourceRTSP;
return videoSource == VideoSettings::videoSourceUDP || videoSource == VideoSettings::videoSourceRTSP || videoSource == VideoSettings::videoSourceMAVLink;
#else
return false;
#endif
}

//-----------------------------------------------------------------------------
bool
VideoManager::isMAVLinkStream()
{
#if defined(QGC_GST_STREAMING)
QString videoSource = _videoSettings->videoSource()->rawValue().toString();
return videoSource == VideoSettings::videoSourceMAVLink;
#else
return false;
#endif
}
//-----------------------------------------------------------------------------
#ifndef QGC_DISABLE_UVC
bool
Expand Down Expand Up @@ -201,8 +221,10 @@ void VideoManager::_updateSettings()

if (_videoSettings->videoSource()->rawValue().toString() == VideoSettings::videoSourceUDP)
_videoReceiver->setUri(QStringLiteral("udp://0.0.0.0:%1").arg(_videoSettings->udpPort()->rawValue().toInt()));
else
else if (_videoSettings->videoSource()->rawValue().toString() == VideoSettings::videoSourceRTSP)
_videoReceiver->setUri(_videoSettings->rtspUrl()->rawValue().toString());
else //MAVLink Auto Discovery
_videoReceiver->setUri(_mavlinkVideoManager->getVideoURI());
}

//-----------------------------------------------------------------------------
Expand Down
7 changes: 7 additions & 0 deletions src/FlightDisplay/VideoManager.h
Expand Up @@ -15,6 +15,7 @@
#include <QTimer>
#include <QUrl>

#include "MAVLinkVideoManager.h"
#include "QGCLoggingCategory.h"
#include "VideoSurface.h"
#include "VideoReceiver.h"
Expand All @@ -34,16 +35,19 @@ class VideoManager : public QGCTool

Q_PROPERTY(bool hasVideo READ hasVideo NOTIFY hasVideoChanged)
Q_PROPERTY(bool isGStreamer READ isGStreamer NOTIFY isGStreamerChanged)
Q_PROPERTY(bool isMAVLinkStream READ isMAVLinkStream NOTIFY isMAVLinkStreamChanged)
Q_PROPERTY(QString videoSourceID READ videoSourceID NOTIFY videoSourceIDChanged)
Q_PROPERTY(bool videoRunning READ videoRunning NOTIFY videoRunningChanged)
Q_PROPERTY(bool uvcEnabled READ uvcEnabled CONSTANT)
Q_PROPERTY(VideoSurface* videoSurface READ videoSurface CONSTANT)
Q_PROPERTY(VideoReceiver* videoReceiver READ videoReceiver CONSTANT)
Q_PROPERTY(QString imageFile READ imageFile NOTIFY imageFileChanged)
Q_PROPERTY(bool showFullScreen READ showFullScreen WRITE setShowFullScreen NOTIFY showFullScreenChanged)
Q_PROPERTY(MAVLinkVideoManager* mavlinkVideoManager MEMBER _mavlinkVideoManager CONSTANT)

bool hasVideo ();
bool isGStreamer ();
bool isMAVLinkStream();
bool videoRunning () { return _videoRunning; }
QString videoSourceID () { return _videoSourceID; }
QString imageFile () { return _imageFile; }
Expand All @@ -68,6 +72,7 @@ class VideoManager : public QGCTool
void hasVideoChanged ();
void videoRunningChanged ();
void isGStreamerChanged ();
void isMAVLinkStreamChanged ();
void videoSourceIDChanged ();
void imageFileChanged ();
void showFullScreenChanged ();
Expand All @@ -76,6 +81,7 @@ private slots:
void _videoSourceChanged(void);
void _udpPortChanged(void);
void _rtspUrlChanged(void);
void _mavlinkUriChanged(void);

private:
void _updateTimer ();
Expand All @@ -95,6 +101,7 @@ private slots:
VideoSettings* _videoSettings;
QString _imageFile;
bool _showFullScreen;
MAVLinkVideoManager* _mavlinkVideoManager;
};

#endif
2 changes: 2 additions & 0 deletions src/Settings/VideoSettings.cc
Expand Up @@ -32,6 +32,7 @@ const char* VideoSettings::maxVideoSizeName = "MaxVideoSize";
const char* VideoSettings::videoSourceNoVideo = "No Video Available";
const char* VideoSettings::videoSourceUDP = "UDP Video Stream";
const char* VideoSettings::videoSourceRTSP = "RTSP Video Stream";
const char* VideoSettings::videoSourceMAVLink = "MAVLink Auto Discovery Streams";

VideoSettings::VideoSettings(QObject* parent)
: SettingsGroup(videoSettingsGroupName, QString() /* root settings group */, parent)
Expand All @@ -55,6 +56,7 @@ VideoSettings::VideoSettings(QObject* parent)
videoSourceList.append(videoSourceUDP);
#endif
videoSourceList.append(videoSourceRTSP);
videoSourceList.append(videoSourceMAVLink);
#endif
#ifndef QGC_DISABLE_UVC
QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
Expand Down
1 change: 1 addition & 0 deletions src/Settings/VideoSettings.h
Expand Up @@ -54,6 +54,7 @@ class VideoSettings : public SettingsGroup
static const char* videoSourceNoVideo;
static const char* videoSourceUDP;
static const char* videoSourceRTSP;
static const char* videoSourceMAVLink;

private:
SettingsFact* _videoSourceFact;
Expand Down