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:
MediaServerIncomingVideoFeed
- remote feed in the media session, streaming into the applicationMediaServerOutgoingVideoFeed
- local feed that the application will stream to the media sessionMediaServerTwoWayAudioFeed
- bidirectional audio feed that sends local audio and received the mixed session audio
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.