6.1.1. Release notes for v0.17
6.1.1.1. v0.17.0
New Features
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 Included 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.
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.
Other Changes
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 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 Planned Artifacts 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.