C++ API Reference¶
Core C++ API for MediaX video streaming.
Stream Information¶
The StreamInformation structure defines stream parameters:
#include "rtp/rtp.h"
struct mediax::rtp::StreamInformation {
std::string session_name; // Stream name for SAP
std::string hostname; // Multicast address or IP
uint16_t port; // UDP port
uint32_t width; // Frame width in pixels
uint32_t height; // Frame height in pixels
uint32_t framerate; // Frames per second
ColourspaceType encoding; // Colorspace/codec type
};
Colorspace Types¶
enum class mediax::rtp::ColourspaceType {
kColourspaceRgb24, // 24-bit RGB
kColourspaceYuv422, // YCbCr 4:2:2 (UYVY)
kColourspaceMono8, // 8-bit grayscale
kColourspaceMono16, // 16-bit grayscale
kColourspaceH264Part10, // H.264/AVC
kColourspaceH265, // H.265/HEVC
kColourspaceAv1, // AV1
kColourspaceJpeg2000, // JPEG 2000
};
Payloader Classes¶
Uncompressed Payloader¶
#include "uncompressed/rtp_uncompressed_payloader.h"
class mediax::rtp::uncompressed::RtpUncompressedPayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
bool Transmit(const uint8_t* data, bool blocking = true);
};
H.264 VAAPI Payloader¶
#include "h264/gst/vaapi/rtp_h264_payloader.h"
class mediax::rtp::h264::gst::vaapi::RtpH264GstVaapiPayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
bool Transmit(const uint8_t* data, bool blocking = true);
};
H.265 VAAPI Payloader¶
#include "h265/gst/vaapi/rtp_h265_payloader.h"
class mediax::rtp::h265::gst::vaapi::RtpH265GstVaapiPayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
bool Transmit(const uint8_t* data, bool blocking = true);
};
AV1 Payloader¶
#include "av1/gst/rtp_av1_payloader.h"
class mediax::rtp::av1::gst::RtpAv1GstPayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
bool Transmit(const uint8_t* data, bool blocking = true);
};
Depayloader Classes¶
Uncompressed Depayloader¶
#include "uncompressed/rtp_uncompressed_depayloader.h"
class mediax::rtp::uncompressed::RtpUncompressedDepayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
void Start();
void Stop();
bool Receive(uint8_t* data, int timeout_ms = 0);
void RegisterCallback(std::function<void(const RtpFrameData&)> callback);
};
H.264 VAAPI Depayloader¶
#include "h264/gst/vaapi/rtp_h264_depayloader.h"
class mediax::rtp::h264::gst::vaapi::RtpH264GstVaapiDepayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
void Start();
void Stop();
bool Receive(uint8_t* data, int timeout_ms = 0);
void RegisterCallback(std::function<void(const RtpFrameData&)> callback);
};
H.265 VAAPI Depayloader¶
#include "h265/gst/vaapi/rtp_h265_depayloader.h"
class mediax::rtp::h265::gst::vaapi::RtpH265GstVaapiDepayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
void Start();
void Stop();
bool Receive(uint8_t* data, int timeout_ms = 0);
void RegisterCallback(std::function<void(const RtpFrameData&)> callback);
};
AV1 Depayloader¶
#include "av1/gst/rtp_av1_depayloader.h"
class mediax::rtp::av1::gst::RtpAv1GstDepayloader {
public:
void SetStreamInfo(const StreamInformation& info);
bool Open();
void Close();
void Start();
void Stop();
bool Receive(uint8_t* data, int timeout_ms = 0);
void RegisterCallback(std::function<void(const RtpFrameData&)> callback);
};
Frame Data Structure¶
struct mediax::rtp::RtpFrameData {
uint8_t* cpu_buffer; // Pointer to frame data
struct {
uint32_t width;
uint32_t height;
} resolution;
ColourspaceType encoding;
uint32_t timestamp;
};
SAP Classes¶
SAP Announcer¶
#include "sap/sap_announcer.h"
class mediax::sap::SapAnnouncer {
public:
void AddSapAnnouncement(const rtp::StreamInformation& info);
void DeleteSapAnnouncement(const std::string& session_name);
void DeleteAllSapAnnouncements();
void Start();
void Stop();
};
SAP Listener¶
#include "sap/sap_listener.h"
class mediax::sap::SapListener {
public:
void Start();
void Stop();
const std::map<std::string, rtp::StreamInformation>& GetSapAnnouncements();
void RegisterCallback(std::function<void(const rtp::StreamInformation&)> callback);
};
Complete Example¶
#include <iostream>
#include <vector>
#include "rtp/rtp.h"
#include "uncompressed/rtp_uncompressed_payloader.h"
#include "sap/sap_announcer.h"
int main() {
// Configure stream
mediax::rtp::StreamInformation stream_info;
stream_info.session_name = "example-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;
// Setup SAP announcer
mediax::sap::SapAnnouncer announcer;
announcer.AddSapAnnouncement(stream_info);
announcer.Start();
// Setup payloader
mediax::rtp::uncompressed::RtpUncompressedPayloader payloader;
payloader.SetStreamInfo(stream_info);
payloader.Open();
// Transmit frames
std::vector<uint8_t> buffer(1920 * 1080 * 3);
for (int i = 0; i < 100; ++i) {
// Fill buffer with frame data...
payloader.Transmit(buffer.data(), true);
}
// Cleanup
payloader.Close();
announcer.Stop();
announcer.DeleteAllSapAnnouncements();
return 0;
}
Linking¶
find_package(mediax REQUIRED)
target_link_libraries(your_app PRIVATE mediax::mediax)
Support¶
- Website: https://astutesys.com/support
- Email: [email protected]