api.video Android Player
api.video is the video infrastructure for product builders. Lightning fast video APIs for integrating, scaling, and managing on-demand & low latency live streaming features in your app.
Project description
Easily integrate a video player for videos from api.video in your Android application. The api.video Android player will help you to play the HLS video from api.video. It also generates analytics of your viewers usage.
Getting started
Installation
Gradle
In your module build.gradle
, add the following code in dependencies
:
dependencies {
implementation 'video.api:android-player:1.5.1'
}
For Jetpack Compose, also add the following code in dependencies
:
dependencies {
implementation 'video.api:android-compose-player:1.5.1'
}
Retrieve your video Id
At this point, you must have uploaded a least one video to your account. If you haven't see how to upload a video. You'll need a video Id to use this component and play a video from api.video. To get yours, follow these steps:
- Log into your account or create one here.
- Copy your API key (sandbox or production if you are subscribed to one of our plan).
- Go to the official api.video documentation.
- Go to API Reference -> Videos -> List all videos
- Create a
get
request to the/videos
endpoint based on the reference, using a tool like Postman. - Copy the "videoId" value of one of elements of the API response.
Alternatively, you can find your video Id in the video details of your dashboard.
View-based usage
The api.video Android player comes with a view ApiVideoExoPlayerView
to display the video and its
controller ApiVideoPlayerController
.
- Add a
ApiVideoExoPlayerView
to your Activity/Fragment layout:
<video.api.player.ApiVideoExoPlayerView
android:id="@+id/playerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:show_controls="true"
app:show_subtitles="true" />
You can also use an ExoPlayer PlayerView
or a SurfaceView
according to your requirements.
See Supported player views for more details.
- Implements the
ApiVideoPlayerController.Listener
interface:
val playerControllerListener = object : ApiVideoPlayerController.Listener {
override fun onError(error: Exception) {
Log.e(TAG, "An error happened", error)
}
override fun onReady() {
Log.I(TAG, "Player is ready")
}
}
- Instantiate the
ApiVideoPlayerController
in an your Activity/Fragment:
val playerView = findViewById<ApiVideoExoPlayerView>(R.id.playerView)
val playerController = ApiVideoPlayerController(
applicationContext,
VideoOptions(
"YOUR_VIDEO_ID",
VideoType.VOD
), // For private video: VideoOptions("YOUR_VIDEO_ID", VideoType.VOD, "YOUR_PRIVATE_VIDEO_TOKEN")
playerListener,
playerView
)
- Fullscreen video
If you require a fullscreen video. You will have to implement
the ApiVideoExoPlayerView.FullScreenListener
interface.
To help you, you can use the ApiVideoPlayerFullScreenController
that will handle the fullscreen.
As it implements the ApiVideoExoPlayerView.FullScreenListener
interface, you can pass it to
your ApiVideoExoPlayerView
instance.
playerView.fullScreenListener = ApiVideoExoPlayerView(
supportFragmentManager,
playerView,
playerController
)
Check out for the implementation in the Sample application.
Supported player views
The api.video Android player comes with a specific view ApiVideoExoPlayerView
to display the video
and its controller. If you require a customization of this view such as changing a button color,...,
you can contact us.
Otherwise, in the ApiVideoPlayerController
, you can also use the following views:
PlayerView
: ExoPlayer views frommedia3
SurfaceView
Surface
The SurfaceView
and the Surface
require more work to be used.
Jetpack compose usage
The api.video Android player comes with a composable ApiVideoPlayer
to display the video from a
compose application. In your application, you can add:
ApiVideoPlayer(
videoOptions = VideoOptions("YOUR_VIDEO_ID", VideoType.VOD),
)
Play your api.video video with ExoPlayer, MediaPlayer and VideoView
If you want to use the ExoPlayer directly, you can use the api.video Android extensions:
- Create a video
val videoOptions = VideoOptions("YOUR_VIDEO_ID", VideoType.VOD)
// For private video: VideoOptions("YOUR_VIDEO_ID", VideoType.VOD, "YOUR_PRIVATE_VIDEO_TOKEN")
- Pass it to your player
For ExoPlayer:
val exoplayer = ExoPlayer.Builder(context).build() // You already have that in your code
exoplayer.addMediaSource(videoOptions)
// Or
exoplayer.setMediaSource(videoOptions)
For MediaPlayer:
val mediaPlayer = MediaPlayer() // You already have that in your code
mediaPlayer.setDataSource(context, videoOptions)
For VideoView:
val videoView = binding.videoView // You already have that in your code
videoView.setVideo(videoOptions)
Sample application
A demo application demonstrates how to use player.
See /examples
folder.
On the first run, you will have to set your video Id:
- Click on the FloatingActionButton -> Settings
- Replace the video Id with your own video Id
Documentation
Dependencies
We are using external library
Plugin | README |
---|---|
Exoplayer | README.md |
FAQ
If you have any questions, ask us in the community or use issues.