The FastPix Android Data Core SDK serves as the foundational layer for integrating video playback analytics within Android applications. As a core SDK, it does not function as a standalone player but instead enhances any video player by capturing essential playback metrics such as playback events, buffering patterns, and user engagement data. This data is automatically collected and made available on the FastPix dashboard for real-time monitoring and analysis. Designed for efficiency, the SDK ensures minimal impact on playback performance. While currently optimized for Java-based Android projects, future updates will introduce extended support for Kotlin and enhanced customization options for analytics tracking.
- Automatic analytics tracking – Seamlessly captures playback metrics without additional configuration.
- Real-time insights – Provides instant access to video performance data on the FastPix dashboard.
- Optimized for performance – Ensures minimal impact on playback and system resources.
- Future enhancements – Planned support for Kotlin and expanded analytics customization options.
- Minimum Android SDK: 24 (Android 7.0)
- Target/Compile SDK: 35
- Kotlin: 2.0.21+
- Java: 11
Add the GitHub Packages repository to your project's settings.gradle.kts:
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/FastPix/android-core-data-sdk")
credentials {
username = project.findProperty("lpr.user") as String? ?: "github-username"
password =
project.findProperty("lpr.token") as String? ?: "github-personal-access-token"
}
}
}
}Add the dependency to your app's build.gradle.kts:
dependencies {
implementation("io.fastpix.data:core:1.2.6")
}Create a local.properties file in your project root and add your GitHub credentials:
lpr.user=YOUR_GITHUB_USERNAME lpr.key=YOUR_GITHUB_PERSONAL_ACCESS_TOKEN
Note: Make sure to add
local.propertiesto your.gitignoreto keep credentials secure.
import io.fastpix.data.FastPixDataSDK import io.fastpix.data.domain.SDKConfiguration import io.fastpix.data.domain.model.VideoDataDetails import io.fastpix.data.domain.model.PlayerDataDetails import io.fastpix.data.domain.model.CustomDataDetails import io.fastpix.data.domain.listeners.PlayerListener class MainActivity : AppCompatActivity() { private val fastPixSDK = FastPixDataSDK() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Create configuration val config = SDKConfiguration( workspaceId = "your-workspace-id", beaconUrl = "custom.beacon.url", // Optional // Optional videoData = VideoDataDetails( videoId = "video-123", videoTitle = "My Awesome Video", videoDuration = "300000", // in milliseconds videoThumbnail = "https://example.com/thumbnail.jpg", fpPlaybackId = "playback-id" // Optional FastPix playback ID //.. etc ), // Optional playerData = PlayerDataDetails( playerName = "ExoPlayer", playerVersion = "2.19.0" ), playerListener = MyPlayerListener(), enableLogging = true, // Enable for debugging // Optional customData = CustomDataDetails( customField1 = "custom-value-1", customField2 = "custom-value-2" //.. etc ) ) // Initialize SDK fastPixSDK.initialize(config, applicationContext) } override fun onDestroy() { super.onDestroy() // Clear the SDK instance fastPixSDK.release() } }
The PlayerListener interface provides the SDK with real-time player state information:
import io.fastpix.data.domain.listeners.PlayerListener import io.fastpix.data.domain.model.BandwidthModel import io.fastpix.data.domain.model.ErrorModel class MyPlayerListener : PlayerListener { override fun playerHeight(): Int? = player.videoSize.height override fun playerWidth(): Int? = player.videoSize.width override fun videoSourceWidth(): Int? = player.videoFormat?.width override fun videoSourceHeight(): Int? = player.videoFormat?.height override fun playHeadTime(): Int? = player.currentPosition.toInt() override fun mimeType(): String? = player.videoFormat?.sampleMimeType override fun sourceFps(): String? = player.videoFormat?.frameRate?.toString() override fun sourceAdvertisedBitrate(): String? = player.videoFormat?.bitrate?.toString() override fun sourceAdvertiseFrameRate(): Int? = player.videoFormat?.frameRate override fun sourceDuration(): Int? = player.duration.toInt() override fun isPause(): Boolean? = !player.isPlaying override fun isAutoPlay(): Boolean? = player.isAutoPlay() override fun preLoad(): Boolean? = player.preLoad override fun isBuffering(): Boolean? = player.playbackState == Player.STATE_BUFFERING override fun playerCodec(): String? = player.videoFormat?.codecs override fun sourceHostName(): String? = Uri.parse(player.currentMediaItem?.localConfiguration?.uri.toString()).host override fun isLive(): Boolean? = player.isCurrentMediaItemLive override fun sourceUrl(): String? = player.currentMediaItem?.localConfiguration?.uri.toString() override fun isFullScreen(): Boolean? = isPlayerFullScreen override fun getBandWidthData(): BandwidthModel { return BandwidthModel( bandwidth = player.currentBandwidthEstimate.toString(), // Add other bandwidth metrics ) } override fun getPlayerError(): ErrorModel { return ErrorModel( errorCode = player.playerError?.errorCode?.toString(), errorMessage = player.playerError?.message ) } override fun getVideoCodec(): String? = player.videoFormat?.codecs override fun getSoftwareName(): String? = "software-name" override fun getSoftwareVersion(): String? = "software-version" }
Track player events throughout the video lifecycle:
import io.fastpix.data.domain.enums.PlayerEventType // When player is ready fastPixSDK.dispatchEvent(PlayerEventType.playerReady) // When video begins fastPixSDK.dispatchEvent(PlayerEventType.viewBegin) // When playback starts fastPixSDK.dispatchEvent(PlayerEventType.play) fastPixSDK.dispatchEvent(PlayerEventType.playing) // When user pauses fastPixSDK.dispatchEvent(PlayerEventType.pause) // When seeking fastPixSDK.dispatchEvent(PlayerEventType.seeking) fastPixSDK.dispatchEvent(PlayerEventType.seeked) // When buffering fastPixSDK.dispatchEvent(PlayerEventType.buffering) fastPixSDK.dispatchEvent(PlayerEventType.buffered) // When quality changes fastPixSDK.dispatchEvent(PlayerEventType.variantChanged) // When video ends fastPixSDK.dispatchEvent(PlayerEventType.ended) fastPixSDK.dispatchEvent(PlayerEventType.viewCompleted) // On errors fastPixSDK.dispatchEvent(PlayerEventType.error)
Release SDK resources when done:
override fun onDestroy() { super.onDestroy() fastPixSDK.release() }
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId |
String | ✅ | Your FastPix workspace identifier |
playerListener |
PlayerListener | ✅ | Interface implementation for player state |
videoData |
VideoDataDetails | ❌ | Video metadata (see below) |
beaconUrl |
String | ❌ | Custom beacon URL (default: metrix.ws) |
playerData |
PlayerDataDetails | ❌ | Player information |
enableLogging |
Boolean | ❌ | Enable debug logs (default: true) |
customData |
CustomDataDetails | ❌ | Custom metadata fields |
| Field | Type | Required | Description |
|---|---|---|---|
videoId |
String | ✅ | Unique video identifier |
videoTitle |
String | ✅ | Video title |
videoDuration |
String | ❌ | Duration in milliseconds |
videoThumbnail |
String | ❌ | Thumbnail URL |
videoSeries |
String | ❌ | Series name |
videoProducer |
String | ❌ | Producer name |
videoDrmType |
String | ❌ | Producer name |
videoContentType |
String | ❌ | Content type |
videoVariant |
String | ❌ | Variant information |
videoLanguage |
String | ❌ | Language code |
fpPlaybackId |
String | ❌ | FastPix playback ID |
foMediaId |
String | ❌ | Media ID |
fpLiveStreamId |
String | ❌ | Live stream ID |
| Field | Type | Required | Description |
|---|---|---|---|
playerName |
String | ❌ | Player name (e.g., "ExoPlayer") |
playerVersion |
String | ❌ | Player version |
Supports up to 10 custom fields (customField1 through customField10) for additional metadata.
The SDK tracks the following player events:
playerReady- Player is initialized and readyviewBegin- Video view has startedplay- Playback initiatedplaying- Video is actively playingpause- Playback pausedseeking- Seek operation startedseeked- Seek operation completedbuffering- Buffering startedbuffered- Buffering completedvariantChanged- Quality/variant changedended- Playback endedviewCompleted- View session completederror- Playback error occurredrequestCanceled- Network request canceledrequestFailed- Network request failedrequestCompleted- Network request completed
The SDK uses the following libraries:
- Kotlin Coroutines - Async operations
- OkHttp - Network requests
- Retrofit - API communication
- Gson - JSON serialization
- Kotlinx Serialization - Data serialization
See CHANGELOG.md for release history and version updates.
For questions, issues, or feature requests:
- Email: support@fastpix.io
- Documentation: FastPix Documentation
- GitHub Issues: Report an issue
Copyright © 2025 FastPix. All rights reserved.
This SDK is proprietary software. Unauthorized copying, modification, distribution, or use of this software is strictly prohibited.