Streaming Formats¶
MediaX supports multiple video encoding formats for different use cases.
Format Comparison¶
| Encoder | Format | AMD | Intel | Jetson | ARM64 | Notes |
|---|---|---|---|---|---|---|
| RGB24 | Uncompressed | ✅ | ✅ | ✅ | ✅ | RFC 4175 |
| YUV422 | Uncompressed | ✅ | ✅ | ✅ | ✅ | RFC 4175 |
| Mono8 | Uncompressed | ✅ | ✅ | ✅ | ✅ | RFC 4175 |
| Mono16 | Uncompressed | ✅ | ✅ | ✅ | ✅ | RFC 4175 |
| OpenH264 | H.264 | ✅ | ✅ | ✅ | ✅ | Cisco software encoder |
| VAAPI | H.264/H.265 | ✅ | ✅ | ❌ | ❌ | Intel/AMD hardware only |
| NVENC | H.264 | ✅ | ✅ | ❌ | ❌ | NVIDIA desktop GPUs (GTX/RTX) |
| Jetson V4L2 | H.264 | ❌ | ❌ | ✅ | ❌ | Jetson Orin AGX/NX native V4L2 M2M |
| AV1 (VAAPI) | AV1 | ✅ | ✅ | ❌ | ❌ | Intel 12th gen+ / AMD RDNA2+ |
Uncompressed Formats¶
Best for low-latency, high-quality video where bandwidth is available.
RGB24¶
24-bit RGB color, 8 bits per channel.
stream_info.encoding = mediax::rtp::ColourspaceType::kColourspaceRgb24;
Bandwidth: ~221 Mbps at 1080p30
YUV422¶
YCbCr 4:2:2 color sampling, commonly used in broadcast.
stream_info.encoding = mediax::rtp::ColourspaceType::kColourspaceYuv422;
Bandwidth: ~166 Mbps at 1080p30
Mono8¶
8-bit grayscale, used for thermal and infrared cameras.
stream_info.encoding = mediax::rtp::ColourspaceType::kColourspaceMono8;
Bandwidth: ~50 Mbps at 1080p30
Mono16¶
16-bit grayscale, higher dynamic range for scientific imaging.
stream_info.encoding = mediax::rtp::ColourspaceType::kColourspaceMono16;
Bandwidth: ~99 Mbps at 1080p30
Compressed Formats¶
Use when bandwidth is limited or for storage efficiency.
H.264¶
Most widely supported compressed format.
// Using Intel VAAPI
mediax::RtpSapTransmit<mediax::rtp::h264::vaapi::RtpH264VaapiPayloader> rtp(...);
// Using OpenH264 software encoder
mediax::RtpSapTransmit<mediax::rtp::h264::openh264::RtpH264OpenH264Payloader> rtp(...);
Bandwidth: 2-20 Mbps (configurable)
H.265 (HEVC)¶
Better compression than H.264, requires more processing.
mediax::RtpSapTransmit<mediax::rtp::h265::vaapi::RtpH265VaapiPayloader> rtp(...);
Bandwidth: 1-10 Mbps (configurable)
AV1¶
Newest codec, excellent compression, royalty-free. Native VAAPI backend (Intel 12th gen+ / AMD RDNA2+):
#include "av1/vaapi/rtp_av1_vaapi_payloader.h"
mediax::rtp::av1::vaapi::RtpAv1VaapiPayloader payloader;
Runtime Codec Discovery¶
Use the CodecQuery API to discover available codecs at runtime:
#include "rtp/codec_query.h"
#include <iostream>
int main() {
// Print a summary of all codecs
mediax::rtp::CodecQuery::PrintCodecSummary();
// Check what is actually usable on this machine
auto available = mediax::rtp::CodecQuery::GetAvailableCodecs();
std::cout << "Available codecs: " << available.size() << "\n";
// Quick backend check before creating a payloader
if (mediax::rtp::CodecQuery::IsBackendAvailable("vaapi")) {
std::cout << "VAAPI hardware acceleration is available\n";
}
// List only hardware encoders
for (const auto& c : mediax::rtp::CodecQuery::GetHardwareCodecs()) {
std::cout << c.name << " [" << (c.available ? "ready" : "unavailable") << "]\n";
}
return 0;
}
See the C++ API Reference for the full CodecQuery API.
Choosing a Format¶
| Use Case | Recommended Format |
|---|---|
| Low latency (<10ms) | Uncompressed (RGB24/YUV422) |
| Bandwidth limited | H.264 or H.265 |
| Thermal cameras | Mono8 or Mono16 |
| Scientific imaging | Mono16 |
| Long-term storage | H.265 or AV1 |
| Maximum compatibility | H.264 |
Support¶
Need help choosing a format?
- Website: https://astutesys.com/support
- Email: [email protected]