Quick Start¶
Get started with MediaX in 5 minutes.
Transmitting Video¶
C++ Example¶
#include "rtp/rtp.h"
int main() {
// Create a transmitter with SAP/SDP announcements
mediax::RtpSapTransmit<mediax::rtp::uncompressed::RtpUncompressedPayloader> rtp(
"239.192.1.1", // Multicast IP address
5004, // Port
"my-stream", // Session name
640, 480, // Width x Height
30, // Framerate
"RGB24" // Colorspace
);
// Get a test pattern buffer
std::vector<uint8_t> &buffer = rtp.GetBufferTestPattern();
// Transmit 100 frames
for (int i = 0; i < 100; i++) {
rtp.Transmit(buffer.data(), false);
}
return 0;
}
Python Example¶
import sys
sys.path.append('/usr/local/lib/python3/dist-packages/mediax')
import rtp_uncompressed_payloader
import rtp_types
# Create payloader
payloader = rtp_uncompressed_payloader.RtpUncompressedPayloader()
# Configure stream
stream_info = rtp_types.StreamInformation()
stream_info.session_name = "my-stream"
stream_info.hostname = "239.192.1.1"
stream_info.port = 5004
stream_info.width = 640
stream_info.height = 480
stream_info.framerate = 30
stream_info.encoding = rtp_types.ColourspaceType_kColourspaceRgb24
payloader.SetStreamInfo(stream_info)
payloader.Open()
# Transmit frame data
frame_data = bytes(640 * 480 * 3) # RGB24 buffer
payloader.Transmit(frame_data, True)
payloader.Close()
Receiving Video¶
C++ Example¶
The RtpSapRecieve wrapper listens for a SAP announcement for the named session,
then automatically opens the depayloader once the stream is found.
#include <chrono>
#include <iostream>
#include <thread>
#include <vector>
#include "rtp/rtp.h"
#include "uncompressed/rtp_uncompressed_depayloader.h"
int main() {
// Create a receiver — waits for SAP announcement for "my-stream"
mediax::RtpSapRecieve<mediax::rtp::uncompressed::RtpUncompressedDepayloader> rtp(
"239.192.1.1", 5004, "my-stream", 480, 640, 30, "RGB24");
// Poll for frames — blocks up to 80 ms per call
mediax::rtp::RtpFrameData frame;
std::vector<uint8_t>& buffer = rtp.GetBuffer();
for (int i = 0; i < 100; i++) {
if (rtp.Receive(&frame, buffer.size())) {
std::cout << "Received frame " << i
<< " (" << frame.resolution.width
<< "x" << frame.resolution.height << ")\n";
} else {
// SAP not yet seen or timeout — wait and retry
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
return 0;
}
Receive without known stream parameters
If you do not know the stream's IP/port/resolution in advance, use the
SapListener to discover streams first (see SAP/SDP Discovery),
then construct RtpSapRecieve with the discovered StreamInformation.
Discovering Streams¶
Use SAP/SDP to discover available streams on the network:
import sys
sys.path.append('/usr/local/lib/python3/dist-packages/mediax')
import sap_listener
import time
# Get SAP listener instance
listener = sap_listener.SapListener.GetInstance()
listener.Start()
# Wait for announcements
time.sleep(5)
listener.Stop()
# Get discovered streams
streams = listener.GetSapAnnouncements()
for name, sdp in streams.items():
print(f"Found: {sdp.session_name} at {sdp.ip_address}:{sdp.port}")
Command Line Tools¶
MediaX includes command-line tools for testing:
# Transmit a test pattern
./rtp-transmit --ipaddr 239.192.1.1 --port 5004 --width 640 --height 480
# Receive and display video
./rtp-receive --ipaddr 239.192.1.1 --port 5004
GigE Vision Quick Start¶
Stream frames from a GigE Vision industrial camera (requires -DBUILD_GIGE=ON):
#include <iostream>
#include "gige/gige_receiver.h"
#include "gige/gvsp/gvsp_receiver.h"
int main() {
mediax::gige::GigEReceiver receiver;
receiver.SetReceivePort(55100);
if (!receiver.Connect("192.168.1.100")) { // camera IP
std::cerr << "Connect failed\n";
return 1;
}
receiver.Open(); // sends AcquisitionStart
mediax::gige::gvsp::GvspFrameData frame;
for (int i = 0; i < 100; i++) {
if (receiver.Receive(&frame, 2000))
std::cout << "Frame " << i << ": "
<< frame.width << "x" << frame.height
<< " " << frame.pixels.size() << " bytes\n";
}
receiver.Close();
return 0;
}
See the GigE Vision user guide for full details.
Next Steps¶
- Streaming Formats - Learn about supported codecs
- SAP/SDP Discovery - Automatic stream discovery
- C++ API Reference - Complete API documentation
Support¶
Questions about getting started?
- Website: https://astutesys.com/support
- Email: support@astutesys.com