5.2.3. Release notes for v0.9

About release 0.9

The goal of the 0.9 release of Proximie SDK is to consolidate SDK APIs for consistency, in particular between the original “media session” feeds and the newer “peer session” feeds.

Additionally, the 0.9.2 release introduces local recording of peer feeds.

General notes

In places, this release uses the C++ [[deprecated]] attribute to mark some APIs as deprecated. Deprecations may be errors for your application, depending on your compiler settings. For more details see C++ attribute: deprecated.

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

v0.9.2

Feature: Local recording of peer feeds

The SDK now supports the local (to disk) recording of video and (optionally) audio peer feeds. To enable this, the PeerSession class interface has a new function: createRecordingFeed(). This function creates and returns an AVOutputFeedFile object that can be used to start and stop recording.

Feature: Peer streaming encoder configuration

The SDK now supports configuration of outgoing peer streams’ encoding. This is done by passing a X264EncoderFeedComponent to the peer feed creation function; see the Peer Streaming development guide for more details.

v0.9.1

Minor breaking change: Feed and session callbacks now include the originating object

Previously, feed callback functions (e.g. onFeedStarted()) and session callbacks (e.g. onSessionConnected()) did not include a reference to the originating object.

This could lead to the caller attempting to capture the object in a lambda, but this approach is problematic as it can easily create a circular reference - because the object owns the lambda, but the lambda captures it’s shared pointer.

Now, feed and session callbacks include a reference to the originating object, allowing the client code to refer to the feed directly and safely:

feed->onFeedStopped([](auto& feed, error_code error) {
    // The 'feed' parameter is a reference to the feed that stopped...
});

mediaSession->onSessionConnected([](const auto& session, error_code error) {
    // The 'session' parameter is a reference to the session that connected...
});

Minor breaking changes to FeedStatistics

Now that media server feeds are implemented as feed objects, the facility to obtain feed statistics from the MediaServerSession is deprecated and moved to the individual MediaServerFeed objects.

Using the mediaServerFeed() accessor, various media-server feed operations are available, including requesting feed statistics:

// Here, 'feed' is a MediaServerFeed-derived object
feed->mediaServerFeed().feedStatistics([](const auto& stats) {
    auto feed = stats->feed;
    std::cout << "Received feed stats for feed " << feed->streamId() << " ("
              << feed->label() << ") " << std::endl;
});

As mentioned, obtaining feed statistics from the MediaServerSession (i.e. using MediaServerSession::collectStatsPeriod and MediaServerSession::onFeedStatistics) is now deprecated.

v0.9.0

Minor breaking change: FeedManager renamed

The FeedManager class has been renamed to MediaServerSession. In this release, the APIs are otherwise identical, so you can simply rename the class in your code.

Media server session feeds as objects

Whilst the existing feeds IDs that existed with the FeedManager class remain, they are deprecated in favour of using feed objects directly. Previously, the application would make requests of the feed manager for a feed to be created/started, stopped, etc.

Now the application creates feed objects the same as with peer feeds, with a factory create method and providing the owning session. This returns a feed object which can then be started or stopped using the feed object’s own methods.

The feed objects are:

See the sample code in the SDK demo for examples of how to use these new feed classes, in contrast to the legacy stream-ID approach.