Skip to main content

Instream Video Ad Options

This guide explains how to configure various options for in-stream video ads and how to implement AdVideoPlayer.


GfpVideoAdOptions Configuration

You can configure video ad options through GfpVideoAdOptions.

Option Items

  • supportedStreamingHLS: Whether to support HLS streaming (default: false)
  • bitrateKbps: Ad quality setting (default: -1, auto setting)
  • videoLoadTimeout: Video load timeout (default: 5000ms)
val videoAdOptions = GfpVideoAdOptions().apply {
supportedStreamingHLS = true // HLS support
bitrateKbps = 1000 // 1Mbps quality setting
videoLoadTimeout = 10000 // 10 second timeout
}

videoAdScheduleManager.setVideoAdOptions(videoAdOptions)

AdVideoPlayer Implementation

Adding Gradle Dependencies

dependencies {
...
implementation("com.google.android.exoplayer:exoplayer-core:x.y.z")
implementation("com.google.android.exoplayer:exoplayer-hls:x.y.z")
implementation("com.google.android.exoplayer:exoplayer-ui:x.y.z")
}

AdVideoPlayer Implementation Example

warning

The example below uses ExoPlayer. In actual implementation, you should implement it using the player used in your service.

import com.naver.gfpsdk.provider.AdVideoPlayer
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.ui.StyledPlayerView

class SampleExoPlayerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : StyledPlayerView(context, attrs, defStyleAttr) {

private val videoPlayerCallbacks = CopyOnWriteArraySet<AdVideoPlayer.PlayerCallback>()
private var player: ExoPlayer
private var playbackState: PlaybackState
private var adPlayer: AdVideoPlayer

init {
player = ExoPlayer.Builder(context).build()
playbackState = PlaybackState.STOPPED

adPlayer = object: AdVideoPlayer {
override fun play() {
player.playWhenReady = true
playbackState = PlaybackState.PLAYING
videoPlayerCallbacks.forEach { it.onPlay() }
}

override fun pause() {
player.playWhenReady = false
playbackState = PlaybackState.PAUSED
videoPlayerCallbacks.forEach { it.onPause() }
}

override fun getCurrentPosition(): Long {
return player.currentPosition
}

override fun getDuration(): Long {
return if (playbackState == PlaybackState.STOPPED) 0L else player.duration
}

override fun setVideoPath(videoUrl: String) {
player.setMediaSource(generateMediaSource(videoUrl), true)
player.prepare()
}

override fun addPlayerCallback(callback: AdVideoPlayer.PlayerCallback) {
videoPlayerCallbacks.add(callback)
}

override fun removePlayerCallback(callback: AdVideoPlayer.PlayerCallback) {
videoPlayerCallbacks.remove(callback)
}
}
}

fun createAdVideoPlayer(contentVideoUrl: String): AdVideoPlayer {
return adPlayer
}

enum class PlaybackState {
STOPPED, PAUSED, PLAYING
}
}

QOE Listener Configuration

You can set up a QOE listener to obtain video ad playback quality information.

videoAdScheduleManager.setQoeListener(object: GfpVideoAdQoeListener {
override fun onAdLoaded(info: GfpVideoAdQoeInfo) {
Log.d("QOE", "Ad load completed - Provider: ${info.provider}")
}

override fun onAdStarted(info: GfpVideoAdQoeInfo) {
Log.d("QOE", "Ad playback started")
}

override fun onAdCompleted(info: GfpVideoAdQoeInfo) {
Log.d("QOE", "Ad playback completed")
}

override fun onError(error: GfpError) {
Log.e("QOE", "Error occurred: ${error.errorMessage}")
}
})

Timeout Configuration

You can set the ad request timeout.

// Set 60 second timeout
videoAdScheduleManager.setGfpVideoProperties(GfpVideoProperties(60_000L, null))