Android/Fire TV Integration

Architecture

This SDK is built for Android-based platforms including Android TV and Fire TV. We should not include any Google/Amazon/TV specific features in the SDK.

We use Kotlin and Coroutine to build up this SDK and demo apps. Java developers can also use this SDK easily

The SDK uses the following dependencies:

  • Glide for image loading

  • Gson for json serialization/deserialization

  • Okhttp for network connection

  • Retrofit for http rest api connection

  • ExoPlayer for video playback

Modules

  • video_preview_sdk: the sdk library

  • demo_app: show how to integrate the SDK for Android TV apps

  • sample_app: show how to integrate the SDK for generic android apps

Branches

  • master: The developing branch with the latest changes

Build and deploy

Fastlane

We will use fastlane to help the build and deploy process. You can setup fastlane by fastlane_README or Online Doc The Fastlane config files: Fastfile and Appfile

You can also use gradle build as normal Android build process.

List some fastlane commands we defined in the following:

# Clean project
bundle exec fastlane clean

# Run lint static source code check
bundle exec fastlane lint_check

# Run all unit tests
bundle exec fastlane unit_tests

# Run lint and all unit tests
bundle exec fastlane lint_and_unit_tests

# Build debug sdk and apk
bundle exec fastlane build_debug

# Build release sdk and apk
bundle exec fastlane build_release

Continuous Integration (CI)

We are using Circle CI as our SAAS CI server.

The circleci needs a config file config.yml and all the automation commands are inside the config file.

Integrating with Android or Fire TV

Use these instructions to integrate the SDK with your Android/Android TV/Fire TV app. If you have any questions, please contact the Lucid account team.

Step 1: Download the Lucid Android SDK

The Lucid Preview Video Android SDK is available as an AAR. Download the latest aar file from here

Step 2: Add SDK to your project

To add the sdk dependency, put the aar file into your libs folder and make sure the app module's build.gradle to have the following lines:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}

The Lucid Preview Video Android SDK uses ExoPlayer for displaying the previews, so the first step will be to add ExoPlayer to your project. Add these lines to the app module's build.gradle:

dependencies {
    // ExoPlayer's leanback extension
    def exoplayer_version = '2.14.0'
    implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer_version"
    implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer_version"
    implementation "com.google.android.exoplayer:extension-mediasession:$exoplayer_version"
    implementation "com.google.android.exoplayer:extension-leanback:$exoplayer_version"
    implementation "com.google.android.exoplayer:exoplayer-dash:$exoplayer_version"
    implementation "com.google.android.exoplayer:exoplayer-hls:$exoplayer_version"
}

To support Java 8, add the language feature support:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Step 3. Update Your Android Manifest

Update your AndroidManifest.xml in order to complete the SDK integration.

<!-- Required permissions -->
<uses-permission android:name="android.permission.INTERNET" />

Step 4: Initialize the SDK in your app

After you have integrated the Lucid Preview Video SDK and created an access token, you must call LucidPreviewVideoSdk.init before showing any videos. Initialization is required for only once per app's lifecycle, typically on app launch.

You need to pass an access token string to the LucidPreviewVideoSdk.init API for initialization.

LucidPreviewVideoSdk.init("token")

You can also adjust the log level for debugging, the default log level is LogLevel.ERROR, which only print the error messages. You can set your own configuration when using LucidPreviewVideoSdk.init API.

// Do not print any logs
LucidPreviewVideoSdk.init("token", LogLevel.NONE)
// Print all logs
LucidPreviewVideoSdk.init("token", LogLevel.VERBOSE)

You can also adjust the cache size for the preview videos, the default size is 50 entries, you can set your own configuration when using LucidPreviewVideoSdk.init API.

LucidPreviewVideoSdk.init("token", LogLevel.Error, 100)

Step 5: Prepare Preview Videos

Once the sdk is initialized, you can use LucidRequest to prepare the preview video information with the prepareVideo() API.

val request = LucidRequest(videoId, videoIndex)
LucidPreviewVideoSdk.prepareVideo(request, object: LucidPreviewVideoSdk.LucidPreviewListener{
    override fun onError(e: Exception) {
    }

    override fun onSuccess(video: LucidVideo) {
    }
})

Step 6: Use PreviewLayout

The PreviewLayout class is an UI component to display the preview video. Use setLucidVideo() API to prepare the preview content and use setPreviewPlayback() to start/stop playing preview.

private lateinit var titlePreview: PreviewLayout

titlePreview = view.findViewById(R.id.title_preview)
titlePreview.setLucidVideo(video)
titlePreview.setPreviewPlayback(true)

There are multiple attributes for PreviewLayout. You can configurate them either using xml or Java/Kotlin APIs.

loop: default true
mute: default false
gradient_border: default true

{"mode":"full","isActive":false}

Last updated