AVS Device SDK Release Notes 3.0


The following release notes contain details about the Alexa Voice Service (AVS) Device SDK, including feature enhancements, updates, and resolved issues.

2022

Version 3.0

Release date: Sep 30, 2022

Breaking changes

Device makers who implemented the Alexa Smart Screen SDK should see Upgrade from Alexa Smart Screen SDK 2.X to AVS Device SDK 3.0 for details on breaking changes.

Enhancements

  • Renamed the SampleApp directory to SampleApplications. The LibSampleApp is renamed to acsdkSampleApp. The SampleApplications directory contains three subdirectories:
  • Provided a Go Home Launcher for the IPC Server Sample App.
  • Added Video Device Control (VDC), which allows users to control devices and consume video content without invoking a specific skill. For details about integrating the VDC support in the SDK for your device, see AVS Device SDK Video Device Control.
  • Added LiveViewController Capability Agent (CA) for handling the Alexa.Camera.LiveViewController interface. This feature needs restricted access adapters that aren't available on the public GitHub distribution. For details, see What's New in Alexa Voice Service Device SDK 3.0.
  • Added the Alexa Presentation capability agents to handle the Alexa.Presentation and Alexa.Presentation.APL interfaces.
    • Added APLRuntimeInterface for allowing APL CA to render APL content.
    • Added APLCapabilityCommon including BaseAPLCapabilityAgent for use by the Alexa Presentation Language (APL) CA.
    • Added a new AlexaPresentation CA for reporting presentation states to the AVS.
    • Added the ability for APL CA Observers used by the Presentation Orchestrator to modify the presentation lifespan.
  • Added BluetoothMediaSessionHandlerInterface to notify Bluetooth media streaming state and get callbacks for any transport control state change.
  • Added APLRuntimeInterface for allowing APL CA to render APL content.
  • Added the new configurable SDKClient so that you can add and remove specific Alexa features to your device. For details, see Configurable SDKClient.
  • Added out-of-box alerts and speaker volumes, for which the default is set by you in the configuration file AlexaClientSDKConfig.json and loaded from persistent storage. Four new optional parameters are supported: speakerManagerCapabilityAgent.persistentStorage, speakerManagerCapabilityAgent.defaultSpeakerVolume, speakerManagerCapabilityAgent.defaultAlertsVolume, and speakerManagerCapabilityAgent.restoreMuteState. For details, see AlexaClientSDKConfig.
  • Added new locale combinations in the AlexaClientSDKConfig.json file. For details, see AlexaClientSDKConfig.
  • Added new methods, createRegistrationManager and createRegistrationNotifier for instantiating RegistrationManager objects. These are non-manufactory factory methods to instantiate objects.
  • Updated AggregatedPowerResourceManager to use the acquirePowerResource and releasePowerResource methods from the new PowerResourceManagerInterface to reduce latency. Previously, AggregatedPowerResourceManager used acquirePowerResource and releasePowerResource from the legacy PowerResourceManager.
  • Enhanced the AlexaInterfaceMessageSenderInterface to allow non DefaultClient CAs to send V3 style directive response events.
  • Modified the FinallyGuard class to accept r-value reference for a Lambda object. This enhancement reduces memory footprint and improves performance.
  • Redefined all logging tags as macros to reduce memory footprint and code size. Previously, LogEntry expected std::string as a tag parameter. Now, the logging API is updated to allow the use of const char* as a LogEntry tag argument.
  • ACSDK_LOG_SINK is no longer used to override the sink logger in the SDK. For an application to use a specialized implementation of Logger, call utils::logger::LoggerSinkManager::instance().initialize(myCustomSink). The logLevel configuration per module now is set per the verbosity specified in the configuration independent of the logLevel of the logger sink.
  • Reduced the binary and memory footprint in the logging API. Now if logging is disabled, logging arguments are marked used with sizeof(x) operator instead of casting arguments results to void.
  • Added the acsdkAudioEncoderInterfaces library to provide an encoded stream when encoding operation starts, and to provide output encoding instead of audio format. The SpeechEncoder is now refactored to implement new interfaces and renamed as acsdkAudioEncoder. The OpusEncoderContext library is renamed as acsdkOpusAudioEncoder. The EncodingContext interface is renamed as BlockAudioEncoderInterface to provide encoded prologue and epilogue contents.
  • Thread monikers are now owned by Executor and MultiTimer types. This means the moniker now stays persistent no matter which thread is executing the task. This reduces the thread recreation, and simplifies diagnostics when the same thread moniker is used for the same component.
  • Added support for PostConnectSynchronizeStateSender, PostConnectCapabilitiesPublisher, and PostConnectVerifyGatewaySender to send operational metrics if metrics is enabled and the metrics publisher interface is configured.
  • Added ExecutorInterface and factory methods for creating shared executor instances. An existing Executor can be used in functions that accept ExecutorInterface. Previously, the Executor type was a non-shareable component.

Build option and configuration changes

  • Removed CBLAuthDelegate.
  • Refactored Properties to follow new coding and namespace conventions. The acsdkProperties and acsdkPropertiesInterfaces headers now use "acsdk/" include directory prefix and shortened namespaces.
  • Refactored SpeakerManager to follow new conventions. The library is now split into two: the acsdkSpeakerManager for CA and default implementations of support interfaces, and the acsdkSpeakerManagerComponent library for manufactory integration.
  • Refactored acsdkCodecUtils to follow new conventions. acsdkCodecUtils headers now use "acsdk/CodecUtils" include directory and "alexaClientSDK::codecUtils" namespace.
  • Doxygen is no longer required when building the AVS Device SDK and running tests.
  • Moved the SampleApp into SampleApplications and renamed to ConsoleSampleApplication. The SampleApp is no longer built by default. To build it, use the make SampleApp command.
  • Removed the PreviewAlexaClient sample application.
  • Removed integration tests from sources. You no longer have the options to build or run integration tests.
  • Moved PortAudio microphone into its own library named acsdkPortAudioMicrophoneAdapter.

Bug Fixes

  • Fixed a race condition in AudioPlayer when interrupting a playing track.
  • Fixed an issue in MultiTimer so that it no longer holds the lock when calling tasks.
  • Fixed a shutdown issue when DefaultClient failed to initialize.
  • Updated setup.sh to download the SDK from GitHub using https for git clone per the new GitHub policy.
  • Updated onCallStateChanged() in InteractionManager.cpp in the Console SampleApp to reflect that the microphone must be on to call startStreaming().
  • Fixed a bug that caused the ProgressReportDelayEleapsed event to be significantly delayed.
  • Stopped writing to legacy tables offlineAlerts and alerts_v2 in alerts db. You are responsible to handle the case when rollback to the legacy db happens.
  • Handled the rare case of two pause events delivered in close proximity so that only a single pause event takes effect.
  • Fixed a condition where seeking after setting loop mode caused the next track to be played instead of the current track.
  • Reworked MockEndpointBuilder to accommodate new APIs in the EndpointBuilderInterface.
  • Changed linking for all Linux distributions so that libatomic library is always linked explicitly.
  • Fixed a bug in Executor related to excessive power lock release.
  • Corrected the SDK version printout in the Console Sample App. Previously, version 0.0.0 was printed.