Qt6 API Reference¶
Qt6 bindings for MediaX video streaming with GUI integration.
Overview¶
MediaX Qt6 provides QWidget-based video display and streaming integration:
QtRtpReceiver- Video player widgetQtRtpTransmitter- Video transmit from QtQtSapListener- SAP discovery with Qt signalsQtSapAnnouncer- SAP announcement
Installation¶
Qt6 bindings require:
- Qt6 Widgets, Multimedia
- MediaX core library
# Install dependencies
sudo apt install qt6-base-dev qt6-multimedia-dev
# Build with Qt6 support
cmake -DBUILD_QT6=ON ..
QtRtpReceiver¶
Video player widget for RTP streams.
Header¶
#include "qt6/qt_rtp_receiver.h"
Class Definition¶
class mediax::qt6::QtRtpReceiver : public QWidget {
Q_OBJECT
public:
explicit QtRtpReceiver(QWidget* parent = nullptr);
void SetStreamInfo(const rtp::StreamInformation& info);
bool Start();
void Stop();
bool IsRunning() const;
signals:
void frameReceived();
void connectionLost();
void errorOccurred(const QString& message);
};
Usage¶
#include <QApplication>
#include <QMainWindow>
#include "qt6/qt_rtp_receiver.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow window;
mediax::qt6::QtRtpReceiver* receiver = new mediax::qt6::QtRtpReceiver(&window);
window.setCentralWidget(receiver);
mediax::rtp::StreamInformation stream_info;
stream_info.hostname = "239.192.1.1";
stream_info.port = 5004;
stream_info.width = 1920;
stream_info.height = 1080;
stream_info.encoding = mediax::rtp::ColourspaceType::kColourspaceRgb24;
receiver->SetStreamInfo(stream_info);
receiver->Start();
window.resize(1280, 720);
window.show();
return app.exec();
}
QtRtpTransmitter¶
Transmit video from Qt applications.
Header¶
#include "qt6/qt_rtp_transmitter.h"
Class Definition¶
class mediax::qt6::QtRtpTransmitter : public QObject {
Q_OBJECT
public:
explicit QtRtpTransmitter(QObject* parent = nullptr);
void SetStreamInfo(const rtp::StreamInformation& info);
bool Open();
void Close();
bool Transmit(const QImage& image);
bool Transmit(const uint8_t* data, size_t size);
signals:
void frameSent();
void errorOccurred(const QString& message);
};
Usage¶
#include "qt6/qt_rtp_transmitter.h"
#include <QImage>
mediax::qt6::QtRtpTransmitter transmitter;
mediax::rtp::StreamInformation stream_info;
stream_info.session_name = "qt-stream";
stream_info.hostname = "239.192.1.1";
stream_info.port = 5004;
stream_info.width = 1920;
stream_info.height = 1080;
stream_info.framerate = 30;
stream_info.encoding = mediax::rtp::ColourspaceType::kColourspaceRgb24;
transmitter.SetStreamInfo(stream_info);
transmitter.Open();
// Transmit QImage
QImage image(1920, 1080, QImage::Format_RGB888);
image.fill(Qt::red);
transmitter.Transmit(image);
transmitter.Close();
QtSapListener¶
SAP discovery with Qt signal/slot integration.
Header¶
#include "qt6/qt_sap_listener.h"
Class Definition¶
class mediax::qt6::QtSapListener : public QObject {
Q_OBJECT
public:
explicit QtSapListener(QObject* parent = nullptr);
void Start();
void Stop();
QList<rtp::StreamInformation> GetStreams() const;
signals:
void streamDiscovered(const mediax::rtp::StreamInformation& stream);
void streamRemoved(const QString& sessionName);
};
Usage¶
#include "qt6/qt_sap_listener.h"
#include <QDebug>
mediax::qt6::QtSapListener listener;
QObject::connect(&listener, &mediax::qt6::QtSapListener::streamDiscovered,
[](const mediax::rtp::StreamInformation& stream) {
qDebug() << "Discovered:" << QString::fromStdString(stream.session_name);
qDebug() << " Address:" << QString::fromStdString(stream.hostname)
<< ":" << stream.port;
});
listener.Start();
QtSapAnnouncer¶
SAP announcement for Qt applications.
Header¶
#include "qt6/qt_sap_announcer.h"
Class Definition¶
class mediax::qt6::QtSapAnnouncer : public QObject {
Q_OBJECT
public:
explicit QtSapAnnouncer(QObject* parent = nullptr);
void AddStream(const rtp::StreamInformation& info);
void RemoveStream(const QString& sessionName);
void RemoveAllStreams();
void Start();
void Stop();
};
Usage¶
#include "qt6/qt_sap_announcer.h"
mediax::qt6::QtSapAnnouncer announcer;
mediax::rtp::StreamInformation stream_info;
stream_info.session_name = "qt-announced";
stream_info.hostname = "239.192.1.1";
stream_info.port = 5004;
stream_info.width = 1920;
stream_info.height = 1080;
stream_info.framerate = 30;
stream_info.encoding = mediax::rtp::ColourspaceType::kColourspaceRgb24;
announcer.AddStream(stream_info);
announcer.Start();
// ... run application ...
announcer.Stop();
announcer.RemoveAllStreams();
Complete Application Example¶
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QComboBox>
#include <QPushButton>
#include "qt6/qt_rtp_receiver.h"
#include "qt6/qt_sap_listener.h"
class StreamViewer : public QMainWindow {
Q_OBJECT
public:
StreamViewer() {
QWidget* central = new QWidget(this);
QVBoxLayout* layout = new QVBoxLayout(central);
// Stream selector
streamCombo = new QComboBox(this);
layout->addWidget(streamCombo);
// Connect button
QPushButton* connectBtn = new QPushButton("Connect", this);
layout->addWidget(connectBtn);
connect(connectBtn, &QPushButton::clicked, this, &StreamViewer::connectStream);
// Video display
receiver = new mediax::qt6::QtRtpReceiver(this);
layout->addWidget(receiver);
setCentralWidget(central);
// SAP listener
connect(&sapListener, &mediax::qt6::QtSapListener::streamDiscovered,
this, &StreamViewer::onStreamDiscovered);
sapListener.Start();
}
private slots:
void onStreamDiscovered(const mediax::rtp::StreamInformation& stream) {
QString name = QString::fromStdString(stream.session_name);
streamCombo->addItem(name);
streams[name] = stream;
}
void connectStream() {
QString selected = streamCombo->currentText();
if (streams.contains(selected)) {
receiver->Stop();
receiver->SetStreamInfo(streams[selected]);
receiver->Start();
}
}
private:
QComboBox* streamCombo;
mediax::qt6::QtRtpReceiver* receiver;
mediax::qt6::QtSapListener sapListener;
QMap<QString, mediax::rtp::StreamInformation> streams;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
StreamViewer viewer;
viewer.resize(1280, 720);
viewer.show();
return app.exec();
}
CMake Integration¶
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia)
find_package(mediax REQUIRED)
target_link_libraries(your_app PRIVATE
Qt6::Widgets
Qt6::Multimedia
mediax::mediaxqt
)
Thread Safety¶
- All Qt6 classes are designed for use from the main thread
- Video frames are processed in background threads
- Signal/slot connections handle cross-thread communication
- Use
Qt::QueuedConnectionfor thread-safe slot invocation
Support¶
- Website: https://astutesys.com/support
- Email: [email protected]