Changes in this update:
**Enhancements**
* Added the `ExternalMediaPlayer` Capability Agent. This allows playback from music providers that control their own playback queue. Example: Spotify.
* Added support for AU and NZ to the `SampleApp`.
* Firmware version can now be sent to Alexa via the `SoftwareInfo` event. The firmware version is specified in the config file under the `sampleApp` object as an integer value named [`firmwareVersion`](https://github.com/alexa/avs-device-sdk/blob/master/Integration/AlexaClientSDKConfig.json#L52).
* The new `f` command was added to the `SampleApp` which allows the firmware version to be updated at run-time.
* Optional configuration changes have been introduced. Now a [default log level](https://github.com/alexa/avs-device-sdk/blob/master/Integration/AlexaClientSDKConfig.json#L93) can be set for `ACSDK_LOG_MODULE` components, globally or individually. This value is specified under a new root level configuration object called `logger`, and the value itself is named `logLevel`. This allows you to limit the degree of logging to that default value, such as `ERROR`or `INFO`.
**Bug Fixes**
* Fixed bug where `AudioPlayer` progress reports were not being sent, or were being sent incorrectly.
* [Issue 408](https://github.com/alexa/avs-device-sdk/issues/408) - Irrelevant code related to `UrlSource` was removed from the `GStreamer-based MediaPlayer` implementation.
* The `TZ` variable no longer needs to be set to `UTC` when building the `SampleApp`.
* Fixed a bug where `CurlEasyHandleWrapper` logged unwanted data on failure conditions.
* Fixed a bug to improve `SIGPIPE` handling.
* Fixed a bug where the filename and classname were mismatched. Changed `UrlToAttachmentConverter.h` to `UrlContentToAttachmentConverter.h`,and `UrlToAttachmentConverter.cpp` to `UrlContentToAttachmentConverter.cpp`
**Known Issues**
* The `ACL` may encounter issues if audio attachments are received but not consumed.
* Display Cards for Kindle don't render.
* If using the GStreamer-based `MediaPlayer` implementation, after muting and un-muting an audio item, the next item in the queue will begin playing rather than continuing playback of the originally muted audio item.
* `SpeechSynthesizerState` currently uses `GAINING_FOCUS` and `LOSING_FOCUS` as a workaround for handling intermediate state. These states may be removed in a future release.
* Music playback doesn't immediately stop when a user barges-in on iHeartRadio.
- Changes in this update:
- Better GStreamer error reporting. MediaPlayer used to only report `MEDIA_ERROR_UNKNOWN`, now reports more specific errors as defined in `ErrorType.h`.
- Codebase has been formatted for easier reading.
- `DirectiveRouter::removeDirectiveHandler()` signature changed and now returns a bool indicating if given handler should be successfully removed or not.
- Cleanup of raw and shared pointers in the creation of `Transport` objects.
- `HTTP2Stream`s now have IDs assigned as they are acquired as opposed to created, making associated logs easier to interpret.
- `AlertsCapabilityAgent` has been refactored.
- Alert management has been factored out into an `AlertScheduler` class.
- Creation of Reminder (implements Alert) class.
- Added new capability agent for `PlaybackController` with unit tests.
- Added Settings interface with unit tests.
- Return type of `getOffsetInMilliseconds()` changed from `int64_t` to `std::chronology::milliseconds`.
- Added `AudioPlayer` unit tests.
- Added teardown for all Integration tests except Alerts.
- Implemented PlaylistParser.
- Bug fixes:
- AIP getting stuck in `LISTENING` or `THINKING` and refusing user input on network outage.
- SampleApp crashing if running for 5 minutes after network disconnect.
- Issue where on repeated user barge-ins, `AudioPlayer` would not pause. Specifically, the third attempt to “Play iHeartRadio” would not result in currently-playing music pausing.
- Utterances being ignored after particularly long TTS.
- GStreamer errors cropping up on SampleApp exit as a result of accessing the pipeline before it’s been setup.
- Crashing when playing one URL after another.
- Buffer overrun in Alerts Renderer.
- [SampleApp crashing when issuing "Alexa skip" command with iHeartRadio.](https://github.com/alexa/avs-device-sdk/issues/153)
- [`HTTP2Transport` network thread triggering a join on itself.](https://github.com/alexa/avs-device-sdk/issues/127)
- [`HTTP2Stream` request handling truncating exception messages.](https://github.com/alexa/avs-device-sdk/issues/67)
- [`AudioPlayer` was attempting an incorrect state transition from `STOPPED` to `PLAYING` through a `playbackResumed`.](https://github.com/alexa/avs-device-sdk/issues/138)
Changes in this update
- Added a fix to the sample app so that the StateSynchronization event is the first that gets sent to AVS.
- Added a POST_CONNECTED enum to ConnectionStatusObserver.
- StateSychronizer now automatically sends a StateSynchronization event when it receives a notification that ACL is CONNECTED.
- Added make install for installing the AVS Device SDK.
- Added an optional make networkIntegration for integration tests for slow network (only on Linux platforms).
- Added shutdown management which fully cleans up SDK objects during teardown.
- Fixed an issue with AudioPlayer barge-in which was preventing subsequent audio from playing.
- Changed Mediaplayer buffering to reduce stuttering.
- Known Issues:
- Connection loss during listening keeps the app in that state even after connection is regained. Pressing ‘s’ unsticks the state.
- Play/Pause media restarts it from the beginning.
- SpeechSynthesizer shows wrong UX state during a burst of Speaks.
- Quitting the sample app while AudioPlayer is playing something causes a segmentation fault.
- AudioPlayer sending PlaybackPaused during flash briefing.
- Long Delay playing live stations on iHeartRadio.
- Teardown warnings at the end of integration tests.