6.2.1. Release notes for v0.17
6.2.1.1. v0.17.0
New Features
New feature: Monitor output for encoded video
Outgoing video feeds now support an optional monitor output that provides access to encoded video after the encoder stage but before transmission. This allows applications to preview exactly what is being sent over the network.
Supports H264 and VP8 codecs
Available for both Media Server (WebRTC) and Peer (SRT) outgoing video feeds
Can output to window, UDP, V4L2, or any other video output component
Video is decoded before display, so output components that re-encode (e.g.,
VideoOutputFeedUdp) will produce a transcoded stream rather than forwarding the original encoded streamSample applications updated with
--monitor-outputoption (complete demo and peer-simplex)
See Video Outputs for usage examples.
New feature: Optional UTC timestamp embedding in recording filenames
Adds optional frame-accurate UTC timestamp embedding in recording filenames to enable precise synchronization of multiple recordings that start and stop at different times.
New
enableTimestampInFilenamesetting inAVOutputFeedFileSettingsDisabled by default for backwards compatibility
See Recording Synchronization for usage guide, implementation details, and the new synchronized-recording sample.
New feature: V4L2 virtual camera output
This release adds support for outputting video to V4L2 loopback devices, enabling virtual cameras that can be used by web browsers, video conferencing tools, or any V4L2-compatible application.
New
VideoOutputFeedV4Linux2class for V4L2 loopback outputNew v4l2-loopback sample application
Requires the v4l2loopback kernel module (tested with v0.15.3 or later).
See Video Outputs for usage and Running samples
for the sample application.
New feature: Shared memory video input and output
This release adds video feed components that transfer raw video between processes on the same
host via shared memory, using GStreamer’s shmsrc and shmsink elements. This enables
efficient, zero-copy video sharing between processes on the same machine.
New
VideoOutputFeedSharedMemoryclass publishes raw video to a shared memory area (shmsink)New
VideoInputFeedSharedMemoryclass reads raw video from a shared memory area (shmsrc)The two endpoints are paired by a shared control socket path
New shared-memory sample application demonstrating a writer and reader
As the shared memory transport carries raw bytes with no caps negotiation, the reading endpoint must be configured with capabilities matching the format produced by the writer. See Video Inputs and Video Outputs for usage examples, and Running samples for the sample application.
New feature: Hardware-accelerated H.264 encoding with VAAPI
This release adds support for hardware-accelerated H.264 encoding using the Video Acceleration API (VAAPI), providing significant CPU usage reduction for video encoding workloads on Intel and AMD GPUs.
Key Features:
New
H264VaapiEncoderComponentclass providing VAAPI hardware encodingFull integration with existing video feeds: WebRTC, UDP output, peer feeds, and file recording
Comprehensive property interface matching GStreamer’s vaapih264enc element (rate control, bitrate, keyframe period, B-frames, quality settings, etc.)
Defaults optimized for WebRTC real-time communication, matching X264 software encoder defaults
Performance Benefits:
50-70% CPU reduction with JPEG/MJPEG camera sources
70-90% CPU reduction with RAW/uncompressed camera sources
Video encoding offloaded to dedicated GPU video engine (doesn’t impact GPU compute/graphics)
Documentation & Tools:
New comprehensive VAAPI H.264 encoder guide: H.264 VAAPI Encoder
New file-recording sample for encoder testing and benchmarking
Complete demo enhanced with
--h264-encoderoption for encoder selection
See H.264 VAAPI Encoder for installation instructions, usage examples, and detailed performance benchmarks.
New experimental feature: Network quality monitor
This release introduces an experimental network quality monitor feature. Network monitoring is in an experimental stage and for illustration purposes only. See Network monitoring (experimental) for more information.
Proximie services new API: getOrganisation
The ProximieServices now includes an API
getOrganisation() to obtain an organisation’s details by its ID.
Added mixer functionality to audio utility feeds and deprecated PeerSession::createRecordingFeed
UtilityAudioLocalFeed has been
enhanced to allow applications to mix audio sources. It supports dynamically adding and removing
inputs after the feed has been created. See Utility Feeds for more
details.
The addition of this new feed means
createRecordingFeed() is no longer needed as the same
functionality can be expressed using a combination of
UtilityAudioLocalFeed and
AVOutputFeedFile. As a result,
createRecordingFeed() has been deprecated and samples
that use it have been updated to use UtilityAudioLocalFeed and
AVOutputFeedFile.
Test signal audio input feed parameters added
The existing AudioInputFeedTestSignal class has been extended to
allow applications to configure the wave type.
Helpers to obtain HTTP fetch status/error summaries
Previously applications would need to assemble a human-readable summary of SDK HTTP fetch results, by checking the HTTP status, error code, and optionally the response reason. We have added a couple of helper functions to assemble status messages more easily:
The former is a status string reflecting the underlying HTTP response (e.g., “404/Not Found”). The latter returns the HTTP status string plus any supplementary text from the fetch operation error code itself (e.g. “client error - 404/Not Found”).
Breaking Changes
Breaking change: AVOutputFeedFileSettings changed from struct to class with setter methods
To follow SDK development guidelines and provide input validation,
AVOutputFeedFileSettings has been changed from
a struct with public members to a class with private members and setter/getter methods.
Old pattern (no longer works):
AVOutputFeedFile::AVOutputFeedFileSettings settings;
settings.destinationDirectory = "/recordings";
settings.destinationFilenamePattern = "video_%02d.mp4";
New pattern (required):
AVOutputFeedFile::AVOutputFeedFileSettings settings;
if (auto err = settings.destinationDirectory("/recordings")) {
std::cerr << "Invalid directory: " << err.message() << std::endl;
// Handle error
}
if (auto err = settings.destinationFilenamePattern("video_%02d.mp4")) {
std::cerr << "Invalid pattern: " << err.message() << std::endl;
// Handle error
}
Impact: This is a compile-time breaking change. Code using direct member assignment will fail
to compile. The fix is straightforward: replace settings.member = value with
settings.member(value).
Recommended: Check the std::error_code returned by all setters. Several setters now
perform validation and can return errors: destinationFilenamePattern() validates printf
specifiers and security constraints, maxFileSizeMB() and maxFileDurationS() validate
against overflow when converting to bytes/nanoseconds. Checking all setters is good defensive
programming and ensures your code handles validation errors gracefully.
Breaking change: H264 encoder properties changed to enable polymorphic encoder support
To enable support for multiple H264 encoder implementations (X264, VAAPI, etc.), the encoder
properties in the following classes have changed from concrete X264EncoderFeedComponent to
shared_not_null<H264VideoEncoderComponent>:
Impact: Code that directly accesses these properties must now use -> instead of .
(e.g., props.encoder->bitrate() instead of props.encoder.bitrate()). This change is
unlikely to affect most code as encoder configuration is typically done before passing to feed
creation functions.
Backwards compatibility: The deprecated encoderProperties() and encodingProperties()
methods provide backwards compatibility for X264-specific code.
Minor breaking change - EnumMapper now uses string_view instead of template string type
For simplicity and consistency with modern C++ practices, PxUtility::EnumMapper
now always uses string_view (previously the string type could be chosen as a template parameter).
Minor breaking change - PxLogger::severityLabel now returns string_view
PxLogger::severityLabel
now uses PxUtility::EnumMapper and the value returned
has been changed from plain const char* to string_view for simplicity and consistency.
Minor breaking change - MediaServerOutgoingVideoFeed::FeedProperties label is now a string_view
Previously MediaServerOutgoingVideoFeed::FeedProperties
took a std::string for a label, which is inconsistent with the other feed properties in the SDK.
This now takes a string_view the same as other feed property values; since std::string can be
implicitly passed as string_view values, existing code should not be affected by this change.
Minor breaking change - GetSessionResponse::session is now non-optional
Fix: the session member of the type GetSessionResponse
(which is returned as a response to ProximieServices::getSession)
is now non-optional, and will always contain session details if the API call was successful.
Fixes
Fix: intermittent failure to shut down a media server session that is still initializing
There is a fix to an edge case where applications attempting to shut down a
MediaServerSession before connection was complete could trigger a
race condition that caused the shutdown to fail.
Other Changes
X11 threading support initialized for improved video output stability
The SDK now automatically initializes X11 threading support (XInitThreads) before initializing
GStreamer. This prevents threading issues when multiple video outputs (e.g., monitor output and
preview windows) access the X11 display simultaneously. The initialization uses dynamic loading
to avoid hard dependency on X11 libraries.
Dockerfiles and install scripts pin CMake version
To ensure consistent builds, package install scripts and Dockerfiles have been updated to pin the version of CMake to 3.26.4.
Vulnerability scanning enforcement
While Proximie SDK releases and their runtime dependencies have been regularly scanned for vulnerabilities for some time, our build and deployment system now blocks the release of any Proximie SDK version if any vulnerabilities remain after Proximie’s recommended Security and Hardening practices have been applied.
This ensures that any released version of the Proximie SDK, when hardened using Proximie’s recommended practices, will have no runtime dependencies with known vulnerabilities.
Note that customers should still follow the Security and Hardening practices, to address known vulnerabilities in Proximie SDK runtime dependencies.
Software Bill of Materials (SBOM) publication
A Software Bill of Materials (SBOM) is now published with each Proximie SDK release, providing a machine-readable inventory of all software components in the SDK. See Certification Artifacts List for more details.
Planned certification artifacts added to documentation
A full list of planned certification artifacts has been added to the documentation, along with details of each artifact and its intended purpose. See the “Planned” section of Certification Artifacts List for details.
Privacy video stage re-implemented
VideoStagePrivacy has been internally re-implemented to simplify
the resulting feed pipelines, and solve issues arising from interactions with reusable inputs. The
new method of obscuring/destroying video pixel data has been introduced as part of this
re-implementation.
Known Issues
Known issue with GStreamer 1.24.2 causing audio visualization problems
While not introduced in this release, we have recently identified a known issue affecting
audio visualization in GStreamer 1.24.2, the version of GStreamer available on Ubuntu
24.04. See AudioOutputFeedWavescope documentation for
details.