eSDK Changelog
Commercial Hardware tools and the eSDK are available only for approved partners
- FixInternal bug fixes.
- API-ChangeRemoved
SpConnectionLoginPassword
API.
- FixFixed an issue where eSDK will not call the
SpCallbackStreamEnd
callback when the integration reports an invalid position.
- API-ChangeeSDK will only send the
kSpConnectionNotifyProductTypeChanged
notification if the product type is changed during a logged in session. Previously it was also sent unconditionally after each new login. - FixExtended list of valid values for
SpSourceInfo::type
field. - FixFixed built-in mDNS implementation in order to provide all local IPv4 network addresses when queries target the specific mDNS/DNS-SD service. Align this behaviour with how queries for spotify-connect related service-type & domain "_spotify-connect._tcp.local" were handled.
- FixExtended HTTP response headers of the built-in ZeroConf HTTP server with Content-Security-Policy. When set to frame-ancestors: 'none' it prevents embedding of ZeroConf URLs into malicious webpages and therefore minimizes the risk of ZeroConf attacks. Partners who don't use the ZeroConf HTTP server provided with eSDK have to make sure they apply the same measures on their external webservers.
- FixFixed an issue where the last track of a context can cause media delivery to be stuck in a draining audio loop.
- FixFixed an issue where the last track of a context can cause media delivery to be stuck in a draining audio loop.
- FixInternal bug fixes.
- FixFixed an issue with download fallback during network outage which causes a skip to the next track once reconnected.
- FixFixed missing error handling for setting socket into non-blocking mode on windows.
- FixModified Windows examples in order to use CRITICAL_SECTION instead of mutex-based synchronisation.
- FixMade the pytest environment compatible with Python 3.11.
- FixFixed an issue that caused playback to fail once storage manager had filled up the cache.
- FixAdded certificate verification in the OpenSSL example.
- FixSplit header file
media_delivery.h
in order to ease reuse of single structures. Fix include dependencies. - FixRenamed
decode_error
totrack_error
and made error reason configurable in MediaDelivery examples.
- FixFixed an error when inability of setting kSpSocketMcastSendIf option led to the missing mDNS advertisings.
- FixChanged hal_get_unix_time_in_milliseconds() in order to avoid overflows.
- FixFixed a bug where toggling shuffle/repeat while being paused causes data corruption in the audio- and download buffers.
- FixFixed an issue with audio clipping in the vorbis decoder example code.
- FixMade example implementation of MediaDelivery API more modular. The header
media_delivery.h
was split into 4 single files and include dependencies were revisited. This change made it possible for partner integrations to add our example code to their projects unmodified.
- FixImproved error handling for sending of mDNS messages. Introduced a check whether the outgoing interface was suitable for sending a multicast message (see
SpCallbackSocketSetOption()
&kSpSocketMcastSendIf
). Send multiple A records as part of a single mDNS answer. - FixImproved out-of-sync playback position between the active device and its observers. In case of long buffering or seek there will be an additional update of the connect cluster.
- FixFixed an issue where a new seek while a seek was ongoing caused track failure.
- FixChanged the implementation of seek beyond the track length to no longer result in a skip next. Rather, the integration should seek to the very end of the track.
- FixFixed minor inaccuracy of playback position which might occur during seek.
- FixRemoved support for legacy streaming from Spotify's proprietary access point.
- FixRemoved
TrackStream::position_ms
in MediaDelivery examples and replaced it withTrackStream::position_samples
. This was done in order to avoid intermediate conversion of samples to milliseconds and to minimize rounding errors. - FixCleaned up example code from internal preprocessor directives.
- FixAdded support for mono tracks to the vorbis decoder in example code. Mono tracks are very rare as most mono tracks are converted to stereo.
- FixStopped sending unconditional MetadataChanged notifications on calls to
SpNotifyTrackLength()
. The notification is only sent if the track length actually differs from the information in eSDK's metadata. - FixFixed truncation of oversized values in class
SpDeviceAlias::display_name
which was ignoring UTF-8 before. - FixFixed length check for the passed URI in
SpQueueUri()
. - FixFixed validation of passed formats in
SpRestrictDrmMediaFormats()
. Previously only the first item of the array was checked. - FixChanged the Posix HAL to use
clock_gettime()
instead ofgettimeofday()
. - FixUpdated the documentation on HTTPS support and removed deprecated TLS APIs from example code.
- FixMarked
SpTLSAddCARootCert()
andSpTLSFreeCARootCerts()
as deprecated and to be removed in a future release. - FixMarked
SpConnectionLoginPassword()
as deprecated and to be removed in a future release. - FixRemoved obsolete notifications
kSpPlaybackNotifyLostPermission
andkSpPlaybackNotifyTrackDelivered
from the public header. - FixCorrected documentation for
kSpErrorInvalidRequest
. It is used for asynchronous notifications about failed attempts to callSpQueueUri()
.
- FixFixed an issue where a new seek while a seek was ongoing caused track failure.
- FixFixed an issue where calling
SpNotifyStreamPlaybackStarted()
multiple times for the same track would incorrectly result inkSpErrorAlreadyInitialized
error.
- FixFixed an issue in the example OGG/Vorbis decoder where a seek to a position near the end of the file would cause an error.
- FixMade the example vorbis decoder play mono tracks. These are very rare as most mono tracks are converted to stereo.
- FixFlush of delivery stream is moved prior to track pipeline re-enumeration to avoid integration returning stale stream id at media seek.
- FixRemoved very chatty async DNS printouts about a request being in progress.
- FixFixed an issue where a combination of queuing and seeking could corrupt the internal download buffer and eSDK would deliver corrupt data to the integration.
- FixChanged the internal scheduling to prevent calls to the integration from
SpSetDownloadPosition()
function. - FixAdded more robust handling of
FINAL_JUMP_OFFSET
to the example implementation of Media Delivery API. - FixFixed handling of retryable error codes in the example of TLS handshake function for OpenSSL.
- FixRelaxed the checks on position reporting allowing one second of deviation.
- FixFixed too chatty mDNS advertisements which contradict RFC6762 and Bonjour Conformance Test.
- FixFixed mangling of symbols for certain builds.
Version 3.200.389 (Standard builds only)
- API-ChangeFeatureIntroduced ability to set repeat mode in
SpPlayUriWithOptions()
. - API-ChangeFeatureAdded support for asynchronous name lookup library (libanl, glibc >= 2.2.3). It avoids blocking of eSDK and reduces the amount of stutters. Libanl will be used automatically in case toolchain provides it. User code has to be linked with
-lanl
. - API-ChangeFixRemoved Preset APIs from eSDK API, see requirements presets.
- API-ChangeFixFixed
SpPlayUriWithOptions()
which didn't allow to turn off shuffling mode. This fix changes the semantics ofstruct SpPlayOptions::shuffle_change
and requires modification on the caller side. - API-ChangeFixIntroduced macro
SP_PLAYOPTIONS_INITIALIZER
which has be used for initialization ofSpPlayOptions
structure. - FixCorrected and extended documentation about built-in implementation of DNS lookups as well as corresponding callbacks.
- FixUpdated seeking in the example vorbis decoder to be millisecond accurate. The
seek_result
enum is expanded with aSEEK_DONE
value that signifies that seeking has now reached the desired PCM offset. - FixRemove usage of floating point arithmetics with double precision from the example code.
- FixMake examples more platform independent.
- FixUpdated link to the eSDK changelog.
- API-ChangeFixAdded documentation about the field
struct SpPlayOptions::from_index
being optional. - FixFixed an issue where the downloading stream could be stalled due to erroneous flagging of two tracks downloading at the same time.
- FixFixed a bug where track byte_offset was not cleared at reset of the stream delivery.
- FixFixed
SpQueueUri()
which might stop working after temporary network issues. - FixFixed missing check in
SpGetMetadataImageURL()
which supposed to returnkSpErrorFailed
if the output buffer is not big enough. - FixFixed an issue where eSDK made a flush call to the integration even though no playback was active.
- FixAdded error code
kSpErrorGeneralDownloadError
which can be used for notification overSpCallbackError()
callback. Corrected documentation forkSpErrorGeneralPlaybackError
with respect to the fact that it doesn't require any additional error handling.
- FixFixed an issue where calling
SpNotifyStreamPlaybackStarted()
multiple times for the same track would incorrectly result inkSpErrorAlreadyInitialized
error. - FixFixed an issue where a new seek while a seek was ongoing caused track failure.
- FixFixed an issue where a combination of queuing and seeking would bring eSDK to a state where upcoming track will never be delivered and as a result the playback will stop.
- FixFixed a bug where
on_seek_callback
would be called twice when seeking in the delivering track.
- FixFixed too chatty mDNS advertisements which contradict RFC6762 and Bonjour Conformance Test.
- FixFixed an issue where eSDK could end up in a broken state if the user skips immediately after transferring the playback.
- FixChanged ad progress reporting to be more granular, the new minimum value is 1 sec instead of 15 sec.
- FixChanged the internal scheduling to prevent calls to the integration from
SpNotify
functions. Updated the example code to call those functions in the correct order. - FixUpdated to mbedtls v2.28.0.
- FixCorrected documentation for
SpCallbackStreamSeekToPosition
.
- FixFixed an issue where decryption of downloaded audio data is causing high CPU usage.
- FixMade the
SpConfig::platform_name
parameter optional.
- API-ChangeFeatureAdded support for loudness normalization, see documentation.
- FixFixed calculation of buffered samples in OSX/AudioToolbox example. In paused state it has to return the amount of samples stored in the ring buffer.
- FixFixed a bug to not end seek in playing track if download of upcoming track fails.
- FixIntroduced new internal calculation of playback position. This will reduce overhead caused by polling for position.
- FixFixed a bug to not report corrupt track for playing track if download of upcoming track fails.
- FixFixed an issue where the example OGG decoder could fail to parse the metadata page.
- FixFixed reuse stored TLS session tickets only if handshake is performed with matching host. This is relevant if built-in MbedTLS implementation is used.
- FixRemoved unnecessary re-delivery when doing a regular seek in currently downloading track.
- FixFixed a bug where eSDK ends up in a loop falling back to ingested track at download failure of upcoming track.
- FeatureImproved documentation of media_delivery_* example code functions.
- FixFixed an issue where downloads would fail after too many network timeouts.
- FixFixed an issue with inaccurate seeking in the beginning of long files.
- API-ChangeFeature
SpPlayPreset()
and related preset APIs have been deprecated and will be removed at the start of 2022. Integrations should useSpPlayUriWithOptions()
instead. See the product requirements for presets. - API-ChangeFixAdded missing API call validation for multithreading and reentry for
SpNotifyTrackLength()
andSpNotifyTrackError()
. - API-ChangeFeatureAdded generic builds for linux-arm7hf and linux-aarch64.
- FeatureEnabled use of TLS SessionTicket for a faster connection re-establishment (RFC5077).
- FixFixed memory leaks in example code for vorbis decoder.
- FixRemoved deprecated notifications
kSpPlaybackNotifyNext
andkSpPlaybackNotifyPrev
from example code and documentation. - FixExtended comments to the media delivery example implementation.
- FixRemoved obsolete example code for WAV and sndio from examples/common/audio.
- FixRemoved unused parameters from
media_delivery_init
in the example code. - FixUpdated public documentation regarding switching of audio sources. Suggested to use
SpPlaybackSetDeviceInactive()
instead of SpPlaybackPause(). - FixFixed an issue where the updated track length (as reported by the application via
SpNotifyTrackLength()
) was not propagated to the observing clients. - FixFixed an issue with inaccurate seeking in the beginning of long files.
- FixFixed an assertion failure in
CallbackStreamGetPosition()
in case the integration calledSpPlaybackGetPosition()
immediately after track change whenkSpPlaybackNotifyMetadataChanged
was received. - FixRestored correct invocation of
SpCallbackStreamEnd
callback which could be suppressed for multiple consecutive short tracks.
- FixRemoved superfluous flush for a skip made over connect.
- FixUpdated mbedTLS to include upstream bug-fixes
- FixFixed an issue where the hostname is not properly parsed for some external URLs.
- FixSimplified ZeroConf URL: use /zc instead of /zc/0.
- FixRemoved platform specific implementation of
mbedtls_platform_zeroize()
in order to avoid additional glibc dependencies. - FixAdded handling of the error returned by
SpNotifyStreamPlaybackFinishedNaturally()
in the example code. - FixFixed an issue where the MP3 decoder PCM buffer is not cleared when flushing.
- FixFixed an issue where the fallback track doesn't start at a given seek position after the external URL failed to download.
- FixAdded context pointer to the example audio driver api.
- FixRemoved frequent logging of samples played from the example code.
- FixFixed a memory leak in the example code.
- FixFixed an issue where a track download is started but a track is already downloading.
- FeatureIncluded Storage Manager in all (non-offline) build configurations using Storage API. Whether the Storage Manager is used depends on whether the callbacks for it are registered by the integration.
- FixFixed an issue where the internal ZeroConf webserver could get blocked by clients sending non-HTTP traffic on the server connection.
- FixFixed the example code to remove decoders on shutdown.
- FixRemoved obsolete licenses for mongoose and c-ares.
- FixFixed repeated entries in supported_drm_media_formats from the ZeroConf device description.
- FixFixed example code in decoder_mp3.c for decoding error detection to work with the latest minimp3 version.
- FixFixed an issue where 64-bit addresses are truncated on Windows 64-bit build.
- FixFixed error logging for WSAEWOULDBLOCK socket error on Windows builds.
- FixFixed progress calculation in case draining audio is required. Media delivery example missed information about the sample format in such cases.
- FixFixed media delivery example with regards to the playback of corrupted tracks.
- API-ChangeImproved performance of Media Delivery API. The StreamData callback is called up to 4 times per pump to deliver more data.
- FixFixed edge case where seeking would fail if seek action was triggered immediately after a track finished before the next track delivery started.
- FixFixed error logging for
WSAEWOULDBLOCKi
socket error on Windows builds.
- FixFixed an issue where eSDK would fail playback in case of quick subsequent pause/resume actions. The issue was caused by eSDK forgetting the current playing position if a pause is issued before the (re-)delivery of current track data started.
- FixFixed an error where eSDK incorrectly detected an invalid position when seek is requested on the playing track.
- FixAvoid using IPv6 from DNS resolver if no valid IPv6 interface exists.
Version 3.180.57
- FixFixed reporting of correct seek-to position in
SpCallbackPlaybackSeek
. - FixChanged volume update rate-limiting algorithm to have limited number of volume update requests in flight. Previously eSDK could drop volume updates which would cause different volume levels in the integration and Spotify backend.
Version 3.179.27
- FixFixed progress calculation of media delivery example.
- FixUpdated MbedTls version (2.16.5 to 2.26.0) in build configurations with TLS support.
Version 3.178.38
- FixFixed an issue where the playing track got interrupted as a result of calling
SpQueueUri()
.
Version 3.176.20
- FixFixed an issue where playback would not work with re-delivery mode enabled.
Version 3.171.19
- FixFixed inconsistent ZeroConf documentation about remoteName when integration uses device aliases.
Version 3.170.37
- API-ChangeAdded new API function (
SpNotifySeekComplete()
) for ending a seek operation. In addition, the parameter is_final_value is removed from the functionSpSetDownloadPosition()
. To adapt your code to this API change: after every call whereSpSetDownloadPosition()
was called with is_final_value==1, remove this argument and add a call toSpNotifySeekComplete()
immediately after. - FeatureAdded code to example_delivery.c on how to provide CA certificates to eSDK via the API function
SpTLSAddCARootCerts()
. - FixFixed crash in Linux pulseaudio example code.
- FixFixed the example code calculation of the duration of an MP3 file with constant bitrate given the file size and bitrate.
Version 3.169.26
- FixFixed an issue where mp3 playback would get stuck at the end of the stream and not continuing on with the next track. The issue is fixed in the eSDK example code.
Version 3.168.57
- FixFixed a problem where calling
SpNotifyStreamPlaybackStarted()
immediately afterSpNotifyStreamPlaybackFinishedNaturally()
would fail.
Version 3.167.55
- FixFixed an issue where eSDK gets stuck when calling
SpPlayUri()
while an advertisement is playing. This issue was introduced in v3.162. - FixRemoved mentions of compressed mode in the documentation.
- FixAdded error reporting to MP3 decoder in the example code.
- FeatureRemoved PCM delivery mode. All build configurations which were previously using PCM delivery mode are now changed to use Media Delivery.
Version 3.166.69
Note: This is the last version of eSDK to support PCM mode. All future releases will be media-delivery only.
- FixFixed seeking video track over connect. The position was corrupted.
- Fixdon't include port number in HTTP "Host" request header field when using standard port number for the protocol. Some HTTP servers were found to return status 404 (Not Found) when the Host header field contains a port number.
- FixFixed some bytes from old offset being delivered after call to
SpSetDownloadPosition()
ifSpSetDownloadPosition()
was not called withinSpCallbackStreamSeekToPosition
callback. - FeatureChanged audio decoder example code to use stream_size_bytes.
- API-ChangeAdded audio quality field to
SpMetadata
. This field tells the currently playing track quality. - API-ChangeAdded stream byte size to
SpCallbackStreamStart on_start
function in Media Delivery API.
Version 3.163.106
- FixFixed documentation for ZeroConf regarding device aliases and display name in getInfo reply.
- FeatureRemoved the following unused callbacks from example code
SpExampleAudioCallbacks
:audio_get_buffered_ms,audio_get_written_frames, audio_reset_written_frames, audio_subtract_written_frames, audio_changed
. - FeatureRemoved Compressed Mode audio delivery (WITH_COMPRESS_DATA_API build option). All integrations using compressed mode should migrate to Media Delivery ("playapi_media_tls" build profile).
- FeatureAdded
OsConnectivityStatus()
to arch example code. - API-ChangeIntroduced a new API to allow starting playback with
SpPlayOptions
. This change simplifies "play uri" functionality by receiving the optional parameters in a single struct (rather than as individual params). - API-ChangeAdded support for shuffle_context parameter in
SpPlayOptions
. - API-ChangeAdded support for referrer in
SpSourceInfo
.
Version 3.162.101
- FixChanged the behaviour of
SpPlayUri
to stop the music immediately when called. Where it previously continued playback of current track till Backend response was received. - FixFixed a bug where switching bitrate mid-track would not start the playback from the position where the bitrate change happened. This affected Media Delivery builds.
- FeatureDisabled automatic bitrate switching.
Version 3.161.46
- FixFixed audio glitches with vorbis decoder example code. This was a regression in the example code shipped with eSDK versions >=3.157.
- FixFixed reporting of position in Media Delivery example code. The last_samples_buffered was not reset correctly during flush which caused the track position to have too big value after skip or seek.
- FixFixed a typo in
SpLogSetLevel()
documentation. - API-ChangeAdded
kSpErrorPlaybackInitiationTimeout
toSpError
enum. This is used to notify integration thatSpPlayUri()
timed out.
Version 3.160.72
- FixFixed a small typo in the documentation for is_group field in
SpZeroConfDeviceAlias
structure.
Version 3.159.86
- API-ChangeRemoved event
kSpPlaybackNotifyTrackDelivered
from the public API in Media Delivery builds. In the Media Delivery API, callbackSpCallbackStreamEnd on_end
is used instead to let the integration know that delivery of track data has finished.
Version 3.158.86
- FixAdded an interface to check for audio decoder errors in the Media Delivery API example.
- FeatureSet default log level to INFO in builds with verbose logging. Integration should use
SpLogSetLevel()
to set TRACE and DEBUG log levels. - FeatureChanged the example code
audio_decoder.h
seek()
function definition to simplify the seeking logic inmedia_delivery.c
.
Version 3.157.78
- FixFixed minor errors in the device alias documentation (incorrect description of fields 'isGroup' and 'alias_count').
- FixUpdated examples for the proprietary metadata page. Relevant for Media Delivery API builds.
- Featuresimplified ogg vorbis decoder in the example code. Relevant for Media Delivery API builds.
- FeatureAdded more precise seeking to ogg decoder example code. When seeking, samples from ogg pages before the actual location will be skipped and not played. Relevant for Media Delivery API builds.
- FeatureChanged example code
audio_decoder.h
decode_and_output_to_audio_driver()
to not return anything. Usefinished()
to check if the decoder has finished decoding. Relevant for Media Delivery API builds. - FeatureRemoved
written_frames()
from audio_decoder.h API in the example code. Relevant for Media Delivery API builds.
Version 3.156.25
- FixFixed an issue where eSDK starts playback on skip and seek actions when the device is not in controllable state. With this fix the integration receives an error code
kSpErrorDeviceUncontrollable
. - FixAdded
SpContentType
field toSpMetadata
to indicate the type of the content (e.g. music track, podcast show episode, advertisement) in TPAPI configurations. - FixAdded a new error code
kSpErrorDeviceUncontrollable
. eSDK returns this error code when integration calls playback APIs when the device is not controllable.
Version 3.155.22
- FixFixed track statistics reporting when seek was done while a track was playing but had been fully delivered using the Media Delivery API.
Version 3.152.41
- FixObserved position is now reset when receiving observe commands without seek to value. Without this fix the incorrect position will be set after track change.
Version 3.151.52
- API-ChangeIntroduced a new API to operate on device's controllable and active states.
SpPlaybackSetAvailableToPlay()
is marked as deprecated and the integration should useSpPlaybackSetDeviceControllable()
,SpPlaybackIsDeviceControllable()
andSpPlaybackSetDeviceInactive()
instead. - FixFixed an issue where the current playback continues to play when eSDK fails to send a play command to the backend when an integration calls
SpPlayUri()
API. With this fix, eSDK pauses the current playback if eSDK fails to send a play command to the backend.
Version 3.150.82
- FixFixed use case diagram pictures for edge cases in Media Delivery API doxygen doc.
- FixFixed issue where media format restrictions wouldn't survive re-login.
- Fixverified that the format of a fallback file is supported before playing it.
Version 3.149.74
- Fixrestored missing mbedTLS object files in the static library.
- FixFixed case where integration restricted capabilities immediately after
SpInit()
. The original capabilities set inSpInit()
were ignored when restoring all capabilities. - FixFixed an issue where restricted capabilities would be registered with Track Playback if restriction happened between initializing the eSDK and registering.
- FixFixed an issue where the currently playing file was unnecessarily reloaded and resumed. This happened when it was the preferred file (for the currently playing track) both before and after format capabilities changed.
- API-Changerenamed the field
supported_media_formats_bitmask
on structSpFormat
tomedia
. - API-Changerenamed
SP_MAX_SUPPORTED_DRM_FORMATS to SP_MAX_SUPPORTED_FORMATS
.
Version 3.148.40
- FixFixed an issue in Zeroconf urldecode where the '+' character is not decoded as a space.
- FeatureAdded
SpRestrictMediaFormat()
andSpRestoreMediaFormat()
API functions to update the list of supported DRM and media formats during runtime.
Version 3.147.79
- FixFixed c89 compatibility in mp3 decoder example code.
- FixChanged the behaviour how eSDK becomes Active when
SpPlayUri()
is called. Previously eSDK would become Active immediately which could cause the old metadata being displayed for a short period of time. Now the Active status is not updated until the reply from the backend arrives and the metadata is updated. - FixFixed an issue with multicast DNS server could fail after a network connectivity interruption.
- FixFixed an rarely occurring issue where the OGG decoder could fail during seek if a false sync sequence was hit in the input stream. A false sync sequence is some part of the compressed audio stream that happens to contain the start-of-page marker "OggS". The symptoms would include an eSDK log message with the message "OUT OF RAM!".
- FixFixed ogg decoder code example which would hang if seeking to or beyond the end of a track.
- FixFixed an issue where calls to
SpPlayUri()
might get lost between the pumps.
Migration to eSDK 3.147.79
- FixDeprecation of separate voice APIs: From now on for Alexa actions the integrations should call
SpPlayUri
instead ofSpPerformVoiceAction
- FixRemove mentions of
spotify_embedded_voice_api.h
. - FixRemove
SpCallbackVoiceActionStatus
callback and calls toSpRegisterVoiceCallbacks
. - FixReplace calls to
SpPerformVoiceAction
bySpPlayUri
:err = SpPlayUri(action, SP_NO_INDEX, 0, NULL, -1);
Version 3.146.79
- Fixcorrected a bug which could have caused DDoS-like simultaneous calls to the backend from many different eSDK clients if integrations made certain API-calls (such as SetAvailableToPlay) at startup, and those integrations were restarted at the same time (as in a major upgrade).
- FixFixed an audio corruption in Media Delivery vorbis decoder example code.
- FixFixed potential memory out-of-bounds read in Media Delivery example code.
- FixFixed error where TrackChanged notification was played twice in succession in the same context.
- API-ChangeAdded
kSpDrmFormatUnknown
toSpDrmFormat
. This is used forkSpMediaFormatSpotifyManifestId
media format. - FixFixed playback for mono MP3 by interleaving mono samples to stereo in the Media Delivery API example.
- FixFixed an issue causing a crash when a platform implements asynchronous DNS lookup.
- FixAdded retry logic on socket read error while streaming from CDN for the streamer builds.
Version 3.145.39
- FixFixed a bug causing eSDK to send constant traffic to the backend after approximately 49 days and 17 hours have elapsed since initialization or re-login.
- API-ChangeExtended metadata track window by adding
kSpMetadataTrackBeforePrevious
andkSpMetadataTrackAfterNext
toSpMetadataTrack
enum. - API-ChangeChanged stream_id type from "int" to "unsigned int" in Media Delivery API.
Version 3.143.24
- API-ChangeFixed an issue with HTTP redirects, increased the max number of HTTP redirects allowed to 10.
- FixAdded possibility to uniquely identify a track in the context by introducing track UIDs. The playback could be started using new API
SpPlayContextUri()
defined inspotify_embedded.h
for PCM builds.
Version 3.142.85
- API-ChangeRemoved
on_audio_data
callback fromspotify_embedded.h
from non PCM build configurations. - FixFixed an issue where playback stopped after network reconnection.
- FixRemoved mentions of
SpCallbackPlaybackAudioData()
from documentation of compress builds.
Version 3.140.92
- FixFixed an issue where timing out when resolving apresolve.spotify.com could lead to infinite retry loops by correctly falling back to ap.spotify.com.
- FixFixed a bug that could cause the wrong next track to be played if playback order changed (i.e. toggling shuffle) under certain conditions.
- FixFixed an issue where
SpConnectionRequestAccessTokenForClientId()
would fail because of a long scope string provided.
Version 3.139.109
- FixIntroduced a possibility to run an external webserver for ZeroConf with the built-in mDNS.
Version 3.138.47
- FixAdded caching of HTTP redirect locations to reduce the overhead setting up HTTPS connections for each CDN download request.
Version 3.137.39
- FixFixed an issue where eSDK could crash due to receiving a too long or malformed redirect URL.
Version 3.136.71
- FixRemoved the context parameter from example audio drivers' audio_data functions (as the parameter was never used).
- FixAdded comments to the audio functions in examples/common/include/audio.h
- FixFixed an issue where the current play time position in an observing client can be out of bounds.
Version 3.134.19
- FixFixed an issue with
kSpPlaybackNotifyTrackDelivered
event raised for the prefetched track before the playing track had finished andkSpPlaybackNotifyTrackChanged
was raised, which could happen when playing short tracks. - FixFixed an issue where eSDK was not reporting the initial start position when the current track progressed to the next track with resume position.
Version 3.133.35
- FeatureImplemented an example application of the Media Delivery API with audio decoder abstraction.
- API-ChangeAdded audio decoder abstraction seek support for the Media Delivery API example implementation.
Version 3.132.71
- FeatureWhen changing connectivity type, the active sockets are recreated. When an attempt is made to read from them, EOF (-1) will be returned.
- FixRemoved reentrancy check from
SpZeroConfGetVars()
. - FixChanged colors of sequence diagrams in the documentation.
Version 3.131.65
- FixFixed the color of the tabs in the documentation page.
Version 3.129.43
- FixUpdated outdated link to the Tremor repo in docs/LICENSE file.
- FixAdded missing documentation to
spotify_embedded_debug.h
andspotify_embedded_internal.h
.
Version 3.127.32
- API-ChangeRemoved deprecated
SpGetLoginUsername()
API. - FixUpdated the documentation about TLS certificate buffer in
SpTLSAddCARootCert()
.
Version 3.126.17
- FixFixed calculation of
buffered_ms
for example pulseaudio driver.
Version 3.125.62
- FixFixed documentation for
SpSetDeviceIsGroup()
regarding device aliases: when using device aliases, SpSetDeviceAliases should be used instead. - FixFixed an issue where Zeroconf login would fail due to the way the request was split into TCP segments on the network connection.
- FixFixed documentation in
SpConfig::display_name
andSpConfig::device_aliases
to reflect the fact thatSpConfig::device_aliases
andSpConfig::display_name
are mutually exclusive. - FixDocumented the expected array size in
SpSetDeviceAliases()
argument. - FixFixed an issue where sometimes seek immediately after starting track does not produce any audio.
- FixFixed an issue where mbedTLS would not link on Windows plarforms because of usage of forbidden API
lstrlenW
. - FixFixed an issue in the default MbedTLS entropy functions on Windows platforms. The API used by MbedTLS (CryptGenRandom) is forbidden in Windows Store Apps.
Version 3.124.52
- FixAdded missing multithreading check to
SpZeroConfGetVars()
to prevent the API function being called from a different thread than where eSDK was initialized. - FixFixed
CallbackNewCredentials()
function signature in example code in eSDK documentation.
Version 3.123.57
- FixRemoved undefined
SP_MAX_DEVICE_ALIASES_OVERRIDE
from builds with 32 device aliases. - FixFixed an issue where sometimes
ms_played
in the end-song is less than the actual playing time when network connection toggles while playing track. - FixFixed an issue where the metadata is changed but not the playing track when changing presets.
Version 3.122.67
- API-ChangeIntroduced macro
SP_LOG_REGISTER_TRACE_OBJ
to decorate the registration of a trace object. - FeatureAdded API function
SpLogGetLevels
to get current logging levels from eSDK. - FixFixed an issue where socket communications fail in builds with custom socket HAL. The issue was caused by the "tls" field in struct
SpSocketHandle
not being initialized properly (introduced in eSDK release 3.117). - FixFixed an issue where the process stack was mapped as executable (PROT_EXEC) on Linux platforms.
- FixFixed a bug where eSDK in bad network conditions would run out of network resources and become unresponsive until restart.
Version 3.121.19
- FixFixed an issue where socket communications fail in builds with custom socket HAL. The issue was caused by the "tls" field in struct
SpSocketHandle
was not initialized properly (introduced in eSDK release 3.117).
Version 3.120.58
- FixFixed an issue where there was sometimes no sound for the externally hosted tracks.
- FixFixed a regression in eSDK >=3.114 where mDNS announcements and replies were not sent on all network interfaces.
Version 3.119.105
- FeatureIntroduced new APIs for controlling logging via eSDK in
spoitfy_embedded_logh.h
. - FixUnified logging function for all examples.
- FixFixed a bug with high latency on externally hosted podcasts in low bandwidth conditions.
Version 3.118.55
- FixFixed an issue where user login failed because of long brand and model names.
- FeatureShut down TLS connections gracefully.
- FixFixed a crash caused by a stack corruption during TLS connection establishment on platforms with HTTPS support.
- FixFixed an issue where an externally hosted podcast fails without falling back to ingested when playback error happens before transitioning from upcoming to playing.
- FixFixed an issue where CDN times out with HTTP redirects.
Version 3.117.71
- FeatureDeprecated ZeroConf fields
accountReq
,activeUser
&voiceSupport
; added uniqueness requirement fordeviceId
. - FixAllocated enough korn memory for aliases in zeroconf.
- FixChanged the error code returned when calling
SpRegisterSocketHALCallbacks()
orSpRegisterTLSCallbacks()
afterSpInit()
. The returned error code (kSpErrorAlreadyInitialized
) will now signal this particular reason much more clearly than the previous value (kSpErrorFailed
).
Version 3.116.55
- FixFixed an issue where device gets stuck at an ad when device goes to unavailable and inactive state and then goes to available to play state.
- FeatureIntroduced a support of redirects in the http client.
- FixUpdated the documentation to clarify that
SpPresetSubscribe
should always be used withSpPlayPreset
.
Version 3.114.42
- FeatureIntroduced new device aliases. Backwards incompatible changes in API.
- FixFixed an issue where seeking back at the end of the track would play the next track instead
Migration of 3.114.42
-
In the new device alias implementation the selection of the alias is moved from the device login to the playback initiation. Because of this change parameters related to device alias selection are moved from login related functions to the functions responsible for starting playback of a context.
-
Functions that lost alias index (alias id or index should be removed from the call):
SpCallbackConnectionNewCredentials
SpConnectionLoginBlob
SpConnectionLoginUnscrambledBlob
SpZeroConfGetVars
SpConnectionLoginZeroConf
-
Functions that got alias index:
SpPlaybackPlay
SpPlayUriAtByteOffset
SpPlayUri
SpPlaybackBecomeActiveDevice
SpPlayPreset
SpPlayPresetEx
-
From now on the integration has to either use old style display name or device aliases. These two approaches can not be combined. If the integration does not use aliases then use:
display_name
in inSpConfig
structureSpSetDisplayName()
SpSetDeviceIsGroup()
SP_NO_ALIAS_SELECTED
as an alias index
With the device aliases use:
device_aliases
inSpConfig
structureSpGetSelectedDeviceAlias()
SpSetDeviceAliases()