5.2.1. Release notes for v0.11

About release 0.11

The main feature of this SDK release is adding a new type of adaptive streaming rule called AdaptiveBandsRule.

For other improvements and bug fixes, see the release notes.

NOTE: This release introduces some breaking changes, please see the notes below.

WARNING: Previously deprecated functions are now removed

Previously deprecated APIs have been removed in this release. See the notes below for details of deprecated functions.

v0.11.2

Feature: Peer streaming improvements

Peer streams are now implemented using SRT, rather than SRTP. The benefits of this change include:

  • Receiving peers can now connect to a stream at any time, rather than needing to be present at the start of the stream.

  • Streams will recover after connection loss

  • Sending peers are now notified when a receiving peer connects or disconnects

v0.11.1

Bug fixes and improvements

This release includes adjustments and optimisations to peer streaming audio feeds. This should resolve reported issues of peer audio becoming increasingly out of sync over time, and improves general latency for peer audio feeds.

Feature: Proximie REST API improvements

The Proximie REST API support in ProximieServices has been improved to include richer details in the case of errors. Previously, only a simple error code indicating HTTP status type (e.g. a 400 “client error”) would typically be available. Now, in the case of error, the details included in the response are available in the resulting response object.

For more details, see the updated Proximie REST services section.

Deprecated types

The following types are deprecated and will be removed in a future release: HttpFetchTyped<T> and RestService.

These are unlikely to affect any client/application code, as they were chiefly used to support the implementation of ProximieServices, which no longer uses them.

v0.11.0

WARNING: Previously deprecated functions are now removed

This release removes various previously deprecated functions and types. The sample demo has removed these deprecated functions and types.

  • Use PxMedia::MediaServerOutgoingVideoFeed for local/outgoing video feeds instead of:

    • PxMedia::LocalVideoFeed

    • MediaServerSession::StartLocalVideoProperties

    • MediaServerSession::startLocalVideo

    • MediaServerSession::createLocalVideoFeed

    • MediaServerSession::stopLocalVideo

  • Use PxMedia::MediaServerIncomingVideoFeed for remote/incoming feeds instead of:

    • MediaServerSession::StartRemoteVideoProperties

    • MediaServerSession::startRemoteVideo

    • MediaServerSession::stopRemoteVideo

  • Use PxMedia::MediaServerTwoWayAudioFeed for audio feeds instead of:

    • MediaServerSession::StartAudioProperties

    • MediaServerSession::startAudio

    • MediaServerSession::stopAudio

  • Collect stats directly from feed objects:

    • PxMedia::FeedStatistics is now named PxMedia::MediaServerFeedStats

    • MediaServerSession::collectStatsPeriod and MediaServerSession::onFeedStatistics are removed

  • PeerSession::listFeeds is now listSessionFeedIds()

  • Certain Proximie REST API payloads have had their deprecated fields removed:

Feature: New “banded” adaptive streaming rule

A new adaptive streaming rule called AdaptiveBandsRule has been added to the SDK to allow the application specify a set of bands across the quality range (0..1). The application provides an ordered vector of bands, which are used to break the quality range into segments. Each band has a “weight” which determines the band size.

using VideoResolution = PxMedia::VideoCapabilities::VideoResolution;

// Define 3 bands of equal weighting from low, to mid, to top quality
auto ruleCreated = PxMedia::AdaptiveBandsRule<VideoResolution>::create(
    {{1, MIN_VIDEO_RESOLUTION},     // Lowest tier when quality is worst
     {1, MID_VIDEO_RESOLUTION},     // Middle tier
     {1, BEST_VIDEO_RESOLUTION}});  // Highest tier maintained for upper 1/3rd quality
if (!ruleCreated) {
    // Handle error...
}
auto resolutionRule = ruleCreated.value();

// Apply rule to the feed video component as before
video.videoCapabilities().adaptiveResolution(resolutionRule);

This style of rule allows the application to specify discrete quality values rather than a continuous range per the existing AdaptiveMinMaxRule.

Bands can also be used to allow feeds to maintain a quality level whilst other feeds are behaving differently - e.g. a high priority feed could maintain a fixed quality output at the top of the range (e.g. setting the 50% - 100% band at high quality), allowing other feeds to drop quality earlier. Here, the goal could be to model allowing lower priority feeds to drop before the higher quality feeds decide to if the network conditions remain too poor.

The demo has been updated to demonstrate both the existing min/max rule and the new banded rule. This is controlled by the existing demo-adaptive command line option and environment variable PXSDK_DEMO_ADAPTIVE. However, now instead of a flag option, demo-adaptive accepts values of either minmax or bands.

Feature: Obtain pipeline graphs from feed objects

Feed objects now support the ability to obtain GStreamer graphs for pipelines, in the standard dot format.

For details and example usage, see the Debugging section.