Skip to content

Surfmeter Player SDK (Android) Changelog

This is the changelog for the Surfmeter Player SDK for Android.

v0.12.1 (2026-10-30)

  • Fix for stalls being counted as play time. Sessions with stalls reported a play time that was too long, which also lowered the stalling ratio and changed the quality score.
  • Do not count pauses as play time, and do not count buffering while paused (for example, after seeking) as a stall. Playback that the system suppresses, for example during a phone call, counts as a pause.
  • Change in behavior: if the app prepares the player before starting playback, the initial loading delay now starts when playback is requested, not when the player starts loading

v0.12.0 (2026-10-30)

  • Add the builder methods setContentType(), setDeviceType() and setDisplaySize(), which set the content type of the videos (for example, live or feature), and the device type (mobile or pc) and display size used to calculate the video quality score. A display size set with setDisplaySize() replaces the size reported by the player for the whole session. The SDK logs a warning and ignores invalid values.
  • Change in behavior: the device type for the quality score is now detected from the hardware. Smartphones and tablets use mobile, all other devices (for example, TVs) use pc. Previously, all devices used mobile, so the quality score of TVs can change.
  • Send the type of hardware (smartphone, tablet or TV), the device vendor and model, and the screen resolution with each measurement
  • Change in behavior: a video that is not live is now sent with the content type unknown instead of feature, as in the other Player SDKs, unless you set a content type with setContentType(). This changes the content type of Android measurements in the dashboard.

v0.11.1 (2026-10-30)

  • Changed: a session that ends because of a fatal player error is now sent with the aborted reason playbackError, the same as in the other Player SDKs. Previously, the error message was sent as the aborted reason. The error message, type and code are still sent as an error event.
  • Changed: a session that ends because the player has no media item, or its URL cannot be read, is now sent with the aborted reason configurationError instead of the error message
  • abort(reason) still sends the reason given by the app, and abort() sends "User aborted"

v0.11.0 (2026-10-29)

  • Failed final reports are now retried up to five times, with increasing delays between attempts
  • Reports that the server rejects with a client error (for example, 403) are not retried
  • Final reports that cannot be converted to JSON are dropped and reported to the listener instead of being retried

v0.10.0 (2026-10-29)

  • Every session now ends with a final report that says whether it finished or was aborted, for example when the player is released, the playlist becomes empty, or a player error occurs
  • Player errors are now sent as error events with the error type PLAYER
  • A missing media item or a media URL that cannot be parsed now aborts the session and is sent as an error event with the error type CONFIGURATION
  • Connection details and error events are no longer lost when sending a report fails; they are sent with the next report
  • Data that the server rejects is no longer marked as sent
  • Fixed the reporting of dropped video frames

v0.9.3 (2026-10-29)

  • Reuse one HTTPS connection for all reports, which reduces network overhead

v0.9.2 (2026-06-22)

  • Fixed media time advancing after playback has ended
  • Fixed connection detail tracing on devices without a GPS provider
  • Replaced the Jackson dependency with Gson

v0.9.1 (2026-03-17)

  • Internal code changes, no change in behavior

v0.9.0 (2026-03-17)

  • Added error event reporting: player errors are now captured and sent with the reports
  • Updated dependencies to their latest versions
  • Fixed edge-to-edge display in the demo app on Android 15 and later

v0.8.4 (2026-02-19)

  • Possible fix for large duration chunks in live cases

v0.8.3 (2025-07-03)

  • Fix for large duration chunks leading to too long total play time statistics

v0.8.2 (2025-06-18)

  • Filter out any stallings longer than 1 hour

v0.8.1 (2025-06-16)

  • Add demo implementation for PerformanceMonitoringHttpDataSource to the app code

v0.8.0 (2025-06-16)

  • Added support for performance monitoring via PerformanceMonitoringHttpDataSource, see our docs on ExoPlayer Quality Test for more information.

v0.7.2 (2025-03-24)

  • Fix for some AVC codecs not being parsed properly

v0.7.1 (2025-02-10)

  • Added additional logging capabilities

v0.7.0 (2025-01-28)

  • Added support for connection detail tracing
  • Fixed timestamp handling

v0.6.2 (2025-01-02)

  • Added custom user agent for requests

v0.6.1 (2024-12-05)

  • Improved error handling with automatic backoff on 403 errors

v0.6.0 (2024-12-05)

  • Added support for audio-only streams
  • Added client context attributes

v0.5.0 (2024-09-24)

  • Implemented connection pooling for improved performance
  • Major networking improvements with okhttp/okio

v0.4.4 (2024-09-18)

  • Added protection against oversized chunks
  • Improved ExoPlayer analytics integration

v0.4.3 (2024-06-28)

  • Added ability to set aborted reason
  • Improved error handling and logging
  • Fixed potential null value issues

v0.4.2 (2024-06-19)

  • Fixed issue with user-supplied API key handling
  • Added support for looping videos/channels
  • Added localhost support
  • Improved crash handling

v0.4.1 (2023-12-01)

  • Increased data send interval to 30 seconds

v0.4.0 (2023-10-05)

  • Migrated to Media3 ExoPlayer

v0.3.1 (2023-10-03)

  • Added support for request compression
  • Improved segment compression

v0.3.0 (2023-03-06)

  • Implemented incremental data sending

v0.2.2 (2023-03-01)

  • Fixed handling of manual endpoint override

v0.2.1 (2023-02-27)

  • Improved stalling detection by filtering out small events
  • Added data validation for remote API

v0.2.0 (2023-02-27)

  • Implemented periodic data sending

v0.1.4 (2023-02-21)

  • Fixed chunk sending behavior

v0.1.3 (2023-01-12)

  • Improved error handling
  • Added null pointer checks

v0.1.2 (2022-11-24)

  • Updated default configuration values

v0.1.1 (2022-11-24)

  • Added version information output

v0.1.0 (2022-11-21)

  • Initial release