본문으로 건너뛰기

인스트림 동영상 광고 옵션

이 가이드에서는 인스트림 동영상 광고의 다양한 옵션 설정 방법과 AdVideoPlayer 구현 방법을 설명합니다.


GfpVideoAdOptions 설정

GfpVideoAdOptions를 통해 비디오 광고 옵션을 설정할 수 있습니다.

옵션 항목

  • supportedStreamingHLS: HLS 스트리밍 지원 여부 (기본값: false)
  • bitrateKbps: 광고 품질 설정 (기본값: -1, 자동 설정)
  • videoLoadTimeout: 비디오 로드 타임아웃 (기본값: 5000ms)
val videoAdOptions = GfpVideoAdOptions().apply {
supportedStreamingHLS = true // HLS 지원
bitrateKbps = 1000 // 1Mbps 품질 설정
videoLoadTimeout = 10000 // 10초 타임아웃
}

videoAdScheduleManager.setVideoAdOptions(videoAdOptions)

AdVideoPlayer 구현

Gradle 의존성 추가

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 구현 예시

warning

아래 예시는 ExoPlayer를 사용하는 예시입니다. 실제 구현시에는 서비스에서 사용하는 플레이어로 구현해야 합니다.

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 리스너 설정

동영상 광고 재생 품질 정보를 얻기 위해 QOE 리스너를 설정할 수 있습니다.

videoAdScheduleManager.setQoeListener(object: GfpVideoAdQoeListener {
override fun onAdLoaded(info: GfpVideoAdQoeInfo) {
Log.d("QOE", "광고 로드 완료 - Provider: ${info.provider}")
}

override fun onAdStarted(info: GfpVideoAdQoeInfo) {
Log.d("QOE", "광고 재생 시작")
}

override fun onAdCompleted(info: GfpVideoAdQoeInfo) {
Log.d("QOE", "광고 재생 완료")
}

override fun onError(error: GfpError) {
Log.e("QOE", "에러 발생: ${error.errorMessage}")
}
})

타임아웃 설정

광고 요청 타임아웃을 설정할 수 있습니다.

// 60초 타임아웃 설정
videoAdScheduleManager.setGfpVideoProperties(GfpVideoProperties(60_000L, null))