Commercial Hardware tools and the eSDK are available only for approved partners
The SpTLSAddCARootCert() and SpTLSFreeCARootCerts() APIs have been deprecated and will be removed in a future release. Please see spotify_embedded_tls.h for information on the callback APIs to use instead.


Version 3.201.430

  • Made 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. fix

Version 3.201.417

  • Improved 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. fix
  • Improved 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. fix
  • Fixed an issue where a new seek while a seek was ongoing caused track failure. fix
  • Changed 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. fix
  • Fixed minor inaccuracy of playback position which might occur during seek. fix
  • Removed support for legacy streaming from Spotify’s proprietary access point. fix
  • Removed TrackStream::position_ms in MediaDelivery examples and replaced it with TrackStream::position_samples. This was done in order to avoid intermediate conversion of samples to milliseconds and to minimize rounding errors. fix
  • Cleaned up example code from internal preprocessor directives. fix
  • Added support for mono tracks to the vorbis decoder in example code. Mono tracks are very rare as most mono tracks are converted to stereo. fix
  • Stopped 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. fix
  • Fixed truncation of oversized values in class SpDeviceAlias::display_name which was ignoring UTF-8 before. fix
  • Fixed length check for the passed URI in SpQueueUri(). fix</spa>
  • Fixed validation of passed formats in SpRestrictDrmMediaFormats(). Previously only the first item of the array was checked. fix
  • Changed the Posix HAL to use clock_gettime() instead of gettimeofday(). fix
  • Updated the documentation on HTTPS support and removed deprecated TLS APIs from example code. fix
  • Marked SpTLSAddCARootCert() and SpTLSFreeCARootCerts() as deprecated and to be removed in a future release. fix
  • Marked SpConnectionLoginPassword() as deprecated and to be removed in a future release. fix
  • Removed obsolete notifications kSpPlaybackNotifyLostPermission and kSpPlaybackNotifyTrackDelivered from the public header. fix
  • Corrected documentation for kSpErrorInvalidRequest. It is used for asynchronous notifications about failed attempts to call SpQueueUri(). fix

Version 3.200.454

  • Fixed an issue where a new seek while a seek was ongoing caused track failure. fix
  • Fixed an issue where calling SpNotifyStreamPlaybackStarted() multiple times for the same track would incorrectly result in kSpErrorAlreadyInitialized error. fix

Version 3.200.445

  • Fixed an issue in the example OGG/Vorbis decoder where a seek to a position near the end of the file would cause an error. fix
  • Made the example vorbis decoder play mono tracks. These are very rare as most mono tracks are converted to stereo. fix
  • Flush of delivery stream is moved prior to track pipeline re-enumeration to avoid integration returning stale stream id at media seek. fix
  • Removed very chatty async DNS printouts about a request being in progress. fix
  • Fixed an issue where a combination of queuing and seeking could corrupt the internal download buffer and eSDK would deliver corrupt data to the integration. fix
  • Changed the internal scheduling to prevent calls to the integration from SpSetDownloadPosition() function. fix
  • Added more robust handling of FINAL_JUMP_OFFSET to the example implementation of Media Delivery API. fix
  • Fixed handling of retryable error codes in the example of TLS handshake function for OpenSSL. fix

Version 3.200.405

  • Relaxed the checks on position reporting allowing one second of deviation. fix
  • Fixed too chatty mDNS advertisements which contradict RFC6762 and Bonjour Conformance Test. fix

Version 3.200.397

  • Fixed mangling of symbols for certain builds. fix

Version 3.200.389 (Standard builds only)

  • Introduced ability to set repeat mode in SpPlayUriWithOptions(). feature api-change
  • Added 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. feature api-change
  • Removed Preset APIs from eSDK API, see requirements presets. fix api-change
  • Fixed SpPlayUriWithOptions() which didn’t allow to turn off shuffling mode. This fix changes the semantics of struct SpPlayOptions::shuffle_change and requires modification on the caller side. fix api-change
  • Introduced macro SP_PLAYOPTIONS_INITIALIZER which has be used for initialization of SpPlayOptions structure. fix api-change
  • Corrected and extended documentation about built-in implementation of DNS lookups as well as corresponding callbacks. fix
  • Updated seeking in the example vorbis decoder to be millisecond accurate. The seek_result enum is expanded with a SEEK_DONE value that signifies that seeking has now reached the desired PCM offset. fix
  • Remove usage of floating point arithmetics with double precision from the example code. fix
  • Make examples more platform independent. fix
  • Updated link to the eSDK changelog. fix
  • Added documentation about the field struct SpPlayOptions::from_index being optional. fix api-change
  • Fixed an issue where the downloading stream could be stalled due to erroneous flagging of two tracks downloading at the same time. fix
  • Fixed a bug where track byte_offset was not cleared at reset of the stream delivery. fix
  • Fixed SpQueueUri() which might stop working after temporary network issues. fix
  • Fixed missing check in SpGetMetadataImageURL() which supposed to return kSpErrorFailed if the output buffer is not big enough. fix
  • Fixed an issue where eSDK made a flush call to the integration even though no playback was active. fix
  • Added error code kSpErrorGeneralDownloadError which can be used for notification over SpCallbackError() callback. Corrected documentation for kSpErrorGeneralPlaybackError with respect to the fact that it doesn’t require any additional error handling. fix

Version 3.199.414

  • Fixed an issue where calling SpNotifyStreamPlaybackStarted() multiple times for the same track would incorrectly result in kSpErrorAlreadyInitialized error. fix
  • Fixed an issue where a new seek while a seek was ongoing caused track failure. fix
  • Fixed 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. fix
  • Fixed a bug where on_seek_callback would be called twice when seeking in the delivering track. fix

Version 3.199.383

  • Fixed too chatty mDNS advertisements which contradict RFC6762 and Bonjour Conformance Test. fix

Version 3.199.379

  • Fixed an issue where eSDK could end up in a broken state if the user skips immediately after transferring the playback. fix

Version 3.199.375

  • Changed ad progress reporting to be more granular, the new minimum value is 1 sec instead of 15 sec. fix

Version 3.199.368

  • Changed the internal scheduling to prevent calls to the integration from SpNotify functions. Updated the example code to call those functions in the correct order. fix
  • Updated to mbedtls v2.28.0. fix
  • Corrected documentation for SpCallbackStreamSeekToPosition. fix

Version 3.199.315

  • Fixed an issue where decryption of downloaded audio data is causing high CPU usage.fix
  • Made the SpConfig::platform_name parameter optional.fix

Version 3.199.303

  • Added support for loudness normalization, see documentation.featureapi-change
  • Fixed calculation of buffered samples in OSX/AudioToolbox example. In paused state it has to return the amount of samples stored in the ring buffer. fix
  • Fixed a bug to not end seek in playing track if download of upcoming track fails. fix
  • Introduced new internal calculation of playback position. This will reduce overhead caused by polling for position. fix
  • Fixed a bug to not report corrupt track for playing track if download of upcoming track fails. fix
  • Fixed an issue where the example OGG decoder could fail to parse the metadata page. fix
  • Fixed reuse stored TLS session tickets only if handshake is performed with matching host. This is relevant if built-in MbedTLS implementation is used. fix
  • Removed unnecessary re-delivery when doing a regular seek in currently downloading track. fix
  • Fixed a bug where eSDK ends up in a loop falling back to ingested track at download failure of upcoming track. fix
  • Improved documentation of mediadelivery* example code functions.feature

Version 3.198.103

  • Fixed an issue where downloads would fail after too many network timeouts. fix

Version 3.198.85

  • Fixed an issue with inaccurate seeking in the beginning of long files. fix

Version 3.198.41

  • SpPlayPreset() and related preset APIs have been deprecated and will be removed at the start of 2022. Integrations should use SpPlayUriWithOptions() instead. See the product requirements for presets.feature api-change
  • Added missing API call validation for multithreading and reentry for SpNotifyTrackLength() and SpNotifyTrackError(). fix api-change
  • Added generic builds for linux-arm7hf and linux-aarch64. feature api-change
  • Enabled use of TLS SessionTicket for a faster connection re-establishment (RFC5077). feature
  • Fixed memory leaks in example code for vorbis decoder. fix
  • Removed deprecated notifications kSpPlaybackNotifyNext and kSpPlaybackNotifyPrev from example code and documentation. fix
  • Extended comments to the media delivery example implementation. fix
  • Removed obsolete example code for WAV and sndio from examples/common/audio. fix
  • Removed unused parameters from media_delivery_init in the example code. fix
  • Updated public documentation regarding switching of audio sources. Suggested to use SpPlaybackSetDeviceInactive() instead of SpPlaybackPause(). fix
  • Fixed an issue where the updated track length (as reported by the application via SpNotifyTrackLength()) was not propagated to the observing clients. fix
  • Fixed an issue with inaccurate seeking in the beginning of long files. fix
  • Fixed an assertion failure in CallbackStreamGetPosition() in case the integration called SpPlaybackGetPosition() immediately after track change when kSpPlaybackNotifyMetadataChanged was received. fix
  • Restored correct invocation of SpCallbackStreamEnd callback which could be suppressed for multiple consecutive short tracks. fix

Version 3.194.71

  • Removed superfluous flush for a skip made over connect. fix
  • Updated mbedTLS to include upstream bug-fixes fix

Version 3.194.67

  • Fixed an issue where the hostname is not properly parsed for some external URLs. fix

Version 3.194.61

  • Simplified ZeroConf URL: use /zc instead of /zc/0. fix
  • Removed platform specific implementation of mbedtls_platform_zeroize() in order to avoid additional glibc dependencies. fix
  • Added handling of the error returned by SpNotifyStreamPlaybackFinishedNaturally() in the example code. fix
  • Fixed an issue where the MP3 decoder PCM buffer is not cleared when flushing. fix
  • Fixed an issue where the fallback track doesn’t start at a given seek position after the external URL failed to download. fix

Version 3.192.28

  • Added context pointer to the example audio driver api. fix
  • Removed frequent logging of samples played from the example code. fix

Version 3.191.6

  • Fixed a memory leak in the example code. fix
  • Fixed an issue where a track download is started but a track is already downloading. fix
  • Included 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. feature
  • Fixed an issue where the internal ZeroConf webserver could get blocked by clients sending non-HTTP traffic on the server connection. fix
  • Fixed the example code to remove decoders on shutdown. fix
  • Removed obsolete licenses for mongoose and c-ares. fix

Version 3.189.33

  • Fixed repeated entries in supported_drm_media_formats from the ZeroConf device description. fix
  • Fixed example code in decoder_mp3.c for decoding error detection to work with the latest minimp3 version. fix
  • Fixed an issue where 64-bit addresses are truncated on Windows 64-bit build. fix

Version 3.188.74

  • Fixed error logging for WSAEWOULDBLOCK socket error on Windows builds. fix
  • Fixed progress calculation in case draining audio is required. Media delivery example missed information about the sample format in such cases. fix
  • Fixed media delivery example with regards to the playback of corrupted tracks. fix

Version 3.184.49

  • Improved performance of Media Delivery API. The StreamData callback is called up to 4 times per pump to deliver more data. api-change
  • Fixed edge case where seeking would fail if seek action was triggered immediately after a track finished before the next track delivery started. fix
  • Fixed error logging for WSAEWOULDBLOCKi socket error on Windows builds. fix

Version 3.183.28

  • Fixed 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. fix
  • Fixed an error where eSDK incorrectly detected an invalid position when seek is requested on the playing track. fix
  • Avoid using IPv6 from DNS resolver if no valid IPv6 interface exists. fix

Version 3.180.57

  • Fixed reporting of correct seek-to position in SpCallbackPlaybackSeek. fix
  • Changed 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. fix

Version 3.179.27

  • Fixed progress calculation of media delivery example. fix
  • Updated MbedTls version (2.16.5 to 2.26.0) in build configurations with TLS support. fix

Version 3.178.38

  • Fixed an issue where the playing track got interrupted as a result of calling SpQueueUri(). fix

Version 3.176.20

  • Fixed an issue where playback would not work with re-delivery mode enabled. fix

Version 3.171.19

  • Fixed inconsistent ZeroConf documentation about remoteName when integration uses device aliases. fix

Version 3.170.37

  • Added new API function (SpNotifySeekComplete()) for ending a seek operation. In addition, the parameter is_final_value is removed from the function SpSetDownloadPosition(). To adapt your code to this API change: after every call where SpSetDownloadPosition() was called with is_final_value==1, remove this argument and add a call to SpNotifySeekComplete() immediately after. api-change
  • Added code to example_delivery.c on how to provide CA certificates to eSDK via the API function SpTLSAddCARootCerts(). feature
  • Fixed crash in Linux pulseaudio example code. fix
  • Fixed the example code calculation of the duration of an MP3 file with constant bitrate given the file size and bitrate. fix

Version 3.169.26

  • Fixed 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. fix

Version 3.168.57

  • Fixed a problem where calling SpNotifyStreamPlaybackStarted() immediately after SpNotifyStreamPlaybackFinishedNaturally() would fail. fix

Version 3.167.55

  • Fixed an issue where eSDK gets stuck when calling SpPlayUri() while an advertisement is playing. This issue was introduced in v3.162. fix
  • Removed mentions of compressed mode in the documentation. fix
  • Added error reporting to MP3 decoder in the example code. fix
  • Removed PCM delivery mode. All build configurations which were previously using PCM delivery mode are now changed to use Media Delivery feature

Version 3.166.69

Note: This is the last version of eSDK to support PCM mode. All future releases will be media-delivery only.

  • Fixed seeking video track over connect. The position was corrupted. fix
  • don’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. fix
  • Fixed some bytes from old offset being delivered after call to SpSetDownloadPosition() if SpSetDownloadPosition() was not called within SpCallbackStreamSeekToPosition callback. fix
  • Changed audio decoder example code to use stream_size_bytes feature
  • Added audio quality field to SpMetadata. This field tells the currently playing track quality. api-change
  • Added stream byte size to SpCallbackStreamStart on_start function in Media Delivery API. api-change

Version 3.163.106

  • Fixed documentation for ZeroConf regarding device aliases and display name in getInfo reply. fix
  • Removed 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. feature
  • Removed 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). feature
  • Added OsConnectivityStatus() to arch example code. feature
  • Introduced 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-change
  • Added support for shuffle_context parameter in SpPlayOptions. api-change
  • Added support for referrer in SpSourceInfo. api-change

Version 3.162.101

  • Changed the behaviour of SpPlayUri to stop the music immediately when called. Where it previously continued playback of current track till Backend response was received. fix
  • Fixed 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. fix
  • Disabled automatic bitrate switching. feature

Version 3.161.46

  • Fixed audio glitches with vorbis decoder example code. This was a regression in the example code shipped with eSDK versions >=3.157. fix
  • Fixed 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. fix
  • Fixed a typo in SpLogSetLevel() documentation. fix
  • Added kSpErrorPlaybackInitiationTimeout to SpError enum. This is used to notify integration that SpPlayUri() timed out. api-change

Version 3.160.72

  • Fixed a small typo in the documentation for is_group field in SpZeroConfDeviceAlias structure. fix

Version 3.159.86

  • Removed event kSpPlaybackNotifyTrackDelivered from the public API in Media Delivery builds. In the Media Delivery API, callback SpCallbackStreamEnd on_end is used instead to let the integration know that delivery of track data has finished. api-change

Version 3.158.86

  • Added an interface to check for audio decoder errors in the Media Delivery API example. fix
  • Set default log level to INFO in builds with verbose logging. Integration should use SpLogSetLevel() to set TRACE and DEBUG log levels. feature
  • Changed the example code audio_decoder.h seek() function definition to simplify the seeking logic in media_delivery.c feature

Version 3.157.78

  • Fixed minor errors in the device alias documentation (incorrect description of fields ‘isGroup’ and ‘alias_count’). fix
  • Updated examples for the proprietary metadata page. Relevant for Media Delivery API builds. fix
  • simplified ogg vorbis decoder in the example code. Relevant for Media Delivery API builds. feature
  • Added 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. feature
  • Changed example code audio_decoder.h decode_and_output_to_audio_driver() to not return anything. Use finished() to check if the decoder has finished decoding. Relevant for Media Delivery API builds. feature
  • Removed written_frames() from audio_decoder.h API in the example code. Relevant for Media Delivery API builds. feature

Version 3.156.25

  • Fixed 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. fix
  • Added SpContentType field to SpMetadata to indicate the type of the content (e.g. music track, podcast show episode, advertisement) in TPAPI configurations. fix
  • Added a new error code kSpErrorDeviceUncontrollable. eSDK returns this error code when integration calls playback APIs when the device is not controllable. fix

Version 3.155.22

  • Fixed track statistics reporting when seek was done while a track was playing but had been fully delivered using the Media Delivery API. fix

Version 3.152.41

  • Observed position is now reset when receiving observe commands without seek to value. Without this fix the incorrect position will be set after track change. fix

Version 3.151.52

  • Introduced a new API to operate on device’s controllable and active states. SpPlaybackSetAvailableToPlay() is marked as deprecated and the integration should use SpPlaybackSetDeviceControllable(), SpPlaybackIsDeviceControllable() and SpPlaybackSetDeviceInactive() instead. api-change
  • Fixed 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. fix

Version 3.150.82

  • Fixed use case diagram pictures for edge cases in Media Delivery API doxygen doc. fix
  • Fixed issue where media format restrictions wouldn’t survive re-login. fix
  • verified that the format of a fallback file is supported before playing it. fix

Version 3.149.74

  • restored missing mbedTLS object files in the static library. fix
  • Fixed case where integration restricted capabilities immediately after SpInit(). The original capabilities set in SpInit() were ignored when restoring all capabilities. fix
  • Fixed an issue where restricted capabilities would be registered with Track Playback if restriction happened between initializing the eSDK and registering. fix
  • Fixed 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. fix
  • renamed the field supported_media_formats_bitmask on struct SpFormat to media. api-change

Version 3.148.40

  • Fixed an issue in Zeroconf urldecode where the ‘+’ character is not decoded as a space. fix
  • Added SpRestrictMediaFormat() and SpRestoreMediaFormat() API functions to update the list of supported DRM and media formats during runtime. feature

Version 3.147.79

  • Fixed c89 compatibility in mp3 decoder example code. fix
  • Changed 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. fix
  • Fixed an issue with multicast DNS server could fail after a network connectivity interruption. fix
  • Fixed 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!”. fix
  • Fixed ogg decoder code example which would hang if seeking to or beyond the end of a track. fix
  • Fixed an issue where calls to SpPlayUri() might get lost between the pumps. fix

Migration to eSDK 3.147.79

  • Deprecation of separate voice APIs: From now on for Alexa actions the integrations should call SpPlayUri instead of SpPerformVoiceAction
  • Remove mentions of spotify_embedded_voice_api.h.
  • Remove SpCallbackVoiceActionStatus callback and calls to SpRegisterVoiceCallbacks.
  • Replace calls to SpPerformVoiceAction by SpPlayUri: err = SpPlayUri(action, SP_NO_INDEX, 0, NULL, -1);

Version 3.146.79

  • corrected 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). fix
  • Fixed an audio corruption in Media Delivery vorbis decoder example code. fix
  • Fixed potential memory out-of-bounds read in Media Delivery example code. fix
  • Fixed error where TrackChanged notification was played twice in succession in the same context. fix
  • Added kSpDrmFormatUnknown to SpDrmFormat. This is used for kSpMediaFormatSpotifyManifestId media format. api-change
  • Fixed playback for mono MP3 by interleaving mono samples to stereo in the Media Delivery API example. fix
  • Fixed an issue causing a crash when a platform implements asynchronous DNS lookup. fix
  • Added retry logic on socket read error while streaming from CDN for the streamer builds. fix

Version 3.145.39

  • Fixed 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. fix
  • Extended metadata track window by adding kSpMetadataTrackBeforePrevious and kSpMetadataTrackAfterNext to SpMetadataTrack enum. api-change
  • Changed stream_id type from “int” to “unsigned int” in Media Delivery API. api-change

Version 3.143.24

  • Fixed an issue with HTTP redirects, increased the max number of HTTP redirects allowed to 10. fix
  • Added possibility to uniquely identify a track in the context by introducing track UIDs. The playback could be started using new API SpPlayContextUri() defined in spotify_embedded.h for PCM builds. api-change:

Version 3.142.85

  • Removed on_audio_data callback from spotify_embedded.h from non PCM build configurations. api-change
  • Fixed an issue where playback stopped after network reconnection. fix
  • Removed mentions of SpCallbackPlaybackAudioData() from documentation of compress builds. fix

Version 3.140.92

  • Fixed an issue where timing out when resolving could lead to infinite retry loops by correctly falling back to fix
  • Fixed a bug that could cause the wrong next track to be played if playback order changed (i.e. toggling shuffle) under certain conditions. fix
  • Fixed an issue where SpConnectionRequestAccessTokenForClientId() would fail because of a long scope string provided. fix

Version 3.139.109

  • Introduced a possibility to run an external webserver for ZeroConf with the built-in mDNS. fix

Version 3.138.47

  • Added caching of HTTP redirect locations to reduce the overhead setting up HTTPS connections for each CDN download request. fix

Version 3.137.39

  • Fixed an issue where eSDK could crash due to receiving a too long or malformed redirect URL. fix

Version 3.136.71

  • Removed the context parameter from example audio drivers’ audio_data functions (as the parameter was never used). fix
  • Added comments to the audio functions in examples/common/include/audio.h fix
  • Fixed an issue where the current play time position in an observing client can be out of bounds. fix

Version 3.134.19

  • Fixed an issue with kSpPlaybackNotifyTrackDelivered event raised for the prefetched track before the playing track had finished and kSpPlaybackNotifyTrackChanged was raised, which could happen when playing short tracks. fix
  • Fixed an issue where eSDK was not reporting the initial start position when the current track progressed to the next track with resume position. fix

Version 3.133.35

  • Implemented an example application of the Media Delivery API with audio decoder abstraction. feature
  • Added audio decoder abstraction seek support for the Media Delivery API example implementation. api-change

Version 3.132.71

  • When changing connectivity type, the active sockets are recreated. When an attempt is made to read from them, EOF (-1) will be returned. feature
  • Removed reentrancy check from SpZeroConfGetVars(). fix
  • Changed colors of sequence diagrams in the documentation. fix

Version 3.131.65

  • Fixed the color of the tabs in the documentation page. fix

Version 3.129.43

  • Updated outdated link to the Tremor repo in docs/LICENSE file. fix
  • Added missing documentation to spotify_embedded_debug.h and spotify_embedded_internal.h. fix

Version 3.127.32

  • Removed deprecated SpGetLoginUsername() API. api-change
  • Updated the documentation about TLS certificate buffer in SpTLSAddCARootCert(). fix

Version 3.126.17

  • Fixed calculation of buffered_ms for example pulseaudio driver. fix

Version 3.125.62

  • Fixed documentation for SpSetDeviceIsGroup() regarding device aliases: when using device aliases, SpSetDeviceAliases should be used instead. fix
  • Fixed an issue where Zeroconf login would fail due to the way the request was split into TCP segments on the network connection. fix
  • Fixed documentation in SpConfig::display_name and SpConfig::device_aliases to reflect the fact that SpConfig::device_aliases and SpConfig::display_name are mutually exclusive. fix
  • Documented the expected array size in SpSetDeviceAliases() argument. fix
  • Fixed an issue where sometimes seek immediately after starting track does not produce any audio. fix
  • Fixed an issue where mbedTLS would not link on Windows plarforms because of usage of forbidden API lstrlenW. fix
  • Fixed an issue in the default MbedTLS entropy functions on Windows platforms. The API used by MbedTLS (CryptGenRandom) is forbidden in Windows Store Apps. fix

Version 3.124.52

  • Added missing multithreading check to SpZeroConfGetVars() to prevent the API function being called from a different thread than where eSDK was initialized. fix
  • Fixed CallbackNewCredentials() function signature in example code in eSDK documentation. fix

Version 3.123.57

  • Removed undefined SP_MAX_DEVICE_ALIASES_OVERRIDE from builds with 32 device aliases. fix
  • Fixed an issue where sometimes ms_played in the end-song is less than the actual playing time when network connection toggles while playing track. fix
  • Fixed an issue where the metadata is changed but not the playing track when changing presets. fix

Version 3.122.67

  • Introduced macro SP_LOG_REGISTER_TRACE_OBJ to decorate the registration of a trace object. api-change
  • Added API function SpLogGetLevels to get current logging levels from eSDK feature
  • Fixed 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). fix
  • Fixed an issue where the process stack was mapped as executable (PROT_EXEC) on Linux platforms. fix
  • Fixed a bug where eSDK in bad network conditions would run out of network resources and become unresponsive until restart. fix

Version 3.121.19

  • Fixed 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). fix

Version 3.120.58

  • Fixed an issue where there was sometimes no sound for the externally hosted tracks. fix
  • Fixed a regression in eSDK >=3.114 where mDNS announcements and replies were not sent on all network interfaces. fix

Version 3.119.105

  • Introduced new APIs for controlling logging via eSDK in spoitfy_embedded_logh.h. feature
  • Unified logging function for all examples. fix
  • Fixed a bug with high latency on externally hosted podcasts in low bandwidth conditions. fix

Version 3.118.55

  • Fixed an issue where user login failed because of long brand and model names. fix
  • Shut down TLS connections gracefully. feature
  • Fixed a crash caused by a stack corruption during TLS connection establishment on platforms with HTTPS support. fix
  • Fixed an issue where an externally hosted podcast fails without falling back to ingested when playback error happens before transitioning from upcoming to playing. fix
  • Fixed an issue where CDN times out with HTTP redirects. fix

Version 3.117.71

  • Deprecated ZeroConf fields accountReq, activeUser & voiceSupport; added uniqueness requirement for deviceId feature
  • Allocated enough korn memory for aliases in zeroconf. fix
  • Changed the error code returned when calling SpRegisterSocketHALCallbacks() or SpRegisterTLSCallbacks() after SpInit(). The returned error code (kSpErrorAlreadyInitialized) will now signal this particular reason much more clearly than the previous value (kSpErrorFailed). fix

Version 3.116.55

  • Fixed 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. fix
  • Introduced a support of redirects in the http client. feature
  • Updated the documentation to clarify that SpPresetSubscribe should always be used with SpPlayPreset. fix

Version 3.114.42

  • Introduced new device aliases. Backwards incompatible changes in API. feature
  • Fixed an issue where seeking back at the end of the track would play the next track instead fix

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 in SpConfig structure
    • SpSetDisplayName()
    • SpSetDeviceIsGroup()
    • SP_NO_ALIAS_SELECTED as an alias index

With the device aliases use: _ device_aliases in SpConfig structure _ SpGetSelectedDeviceAlias() * SpSetDeviceAliases()