eSDK Changelog
Changelog
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 withTrackStream::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 ofgettimeofday()
. fix - Updated the documentation on HTTPS support and removed deprecated TLS APIs from example code. fix
- Marked
SpTLSAddCARootCert()
andSpTLSFreeCARootCerts()
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
andkSpPlaybackNotifyTrackDelivered
from the public header. fix - Corrected documentation for
kSpErrorInvalidRequest
. It is used for asynchronous notifications about failed attempts to callSpQueueUri()
. 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 inkSpErrorAlreadyInitialized
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 ofstruct SpPlayOptions::shuffle_change
and requires modification on the caller side. fix api-change - Introduced macro
SP_PLAYOPTIONS_INITIALIZER
which has be used for initialization ofSpPlayOptions
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 aSEEK_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 returnkSpErrorFailed
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 overSpCallbackError()
callback. Corrected documentation forkSpErrorGeneralPlaybackError
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 inkSpErrorAlreadyInitialized
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 useSpPlayUriWithOptions()
instead. See the product requirements for presets.feature api-change- Added missing API call validation for multithreading and reentry for
SpNotifyTrackLength()
andSpNotifyTrackError()
. 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
andkSpPlaybackNotifyPrev
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 calledSpPlaybackGetPosition()
immediately after track change whenkSpPlaybackNotifyMetadataChanged
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 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. 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 afterSpNotifyStreamPlaybackFinishedNaturally()
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()
ifSpSetDownloadPosition()
was not called withinSpCallbackStreamSeekToPosition
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
toSpError
enum. This is used to notify integration thatSpPlayUri()
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, callbackSpCallbackStreamEnd 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 inmedia_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. Usefinished()
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 toSpMetadata
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 useSpPlaybackSetDeviceControllable()
,SpPlaybackIsDeviceControllable()
andSpPlaybackSetDeviceInactive()
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 inSpInit()
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 structSpFormat
tomedia
. api-change - renamed
SP_MAX_SUPPORTED_DRM_FORMATS to SP_MAX_SUPPORTED_FORMATS
. api-change
Version 3.148.40
- Fixed an issue in Zeroconf urldecode where the ‘+’ character is not decoded as a space. fix
- Added
SpRestrictMediaFormat()
andSpRestoreMediaFormat()
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 ofSpPerformVoiceAction
- Remove mentions of
spotify_embedded_voice_api.h
. - Remove
SpCallbackVoiceActionStatus
callback and calls toSpRegisterVoiceCallbacks
. - Replace calls to
SpPerformVoiceAction
bySpPlayUri
: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
toSpDrmFormat
. This is used forkSpMediaFormatSpotifyManifestId
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
andkSpMetadataTrackAfterNext
toSpMetadataTrack
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 inspotify_embedded.h
for PCM builds. api-change:
Version 3.142.85
- Removed
on_audio_data
callback fromspotify_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 apresolve.spotify.com could lead to infinite retry loops by correctly falling back to ap.spotify.com. 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 andkSpPlaybackNotifyTrackChanged
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
andspotify_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
andSpConfig::device_aliases
to reflect the fact thatSpConfig::device_aliases
andSpConfig::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 fordeviceId
feature - Allocated enough korn memory for aliases in zeroconf. fix
- Changed 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
). 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 withSpPlayPreset
. 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 inSpConfig
structureSpSetDisplayName()
SpSetDeviceIsGroup()
SP_NO_ALIAS_SELECTED
as an alias index
With the device aliases use:
_ device_aliases
in SpConfig
structure
_ SpGetSelectedDeviceAlias()
* SpSetDeviceAliases()