2

我正在 IMA SDK 的帮助下实施前贴片广告,并在 Surface/Texture View 上使用媒体播放器。

一直在密切关注google示例IMA ANDROID的实现

初始化代码如下

 fun requestAds(){
      videoAdPlayer = object : VideoAdPlayer {
            override fun getAdProgress(): VideoProgressUpdate {
                return if (myVideoPlayer == null || (myVideoPlayer?.getDuration() ?: 0 <= 0)) {
                    VideoProgressUpdate.VIDEO_TIME_NOT_READY
                } else if (myVideoPlayer != null) {
                    VideoProgressUpdate(myVideoPlayer!!.getCurrentPosition().toLong(),
                        myVideoPlayer!!.getDuration().toLong())
                } else {
                    VideoProgressUpdate.VIDEO_TIME_NOT_READY
                }
            }

            override fun getVolume(): Int {
                return myVideoPlayer?.getVolume() ?: 0
            }

            override fun addCallback(p0: VideoAdPlayer.VideoAdPlayerCallback?) {
                if (p0 != null) {
                    videoPlayerCallbacks.add(p0)
                }
            }

            override fun loadAd(adMediaInfo: AdMediaInfo?, adpodInfo: AdPodInfo?) {
                if (adMediaInfo != null && !TextUtils.isEmpty(adMediaInfo.url)) {
                    mCurrentMediaInfo = adMediaInfo
                    var duration: Int? = null
                    duration = (mAdsManager?.currentAd?.duration ?: 0).toInt()
                    adViewLayout.getAdViewController()
                        ?.addMediationUrl(adMediaInfo.url, this@videoController,
                            duration, -1, mAdsManager?.currentAd?.vastMediaHeight,
                            mAdsManager?.currentAd?.vastMediaWidth)
                }
            }

            override fun pauseAd(p0: AdMediaInfo?) {
                
                myVideoPlayer?.pauseAd(mIsCalledByDev)
                for (callback in videoPlayerCallbacks) {
                    callback.onPause(p0)
                }
            }

            override fun playAd(p0: AdMediaInfo?) {
             
                val playbackState = myVideoPlayer?.getPlayerState()
                if (playbackState == MediaPlayer.STATE_PAUSED) {
                    myVideoPlayer?.resumeAd(mIsCalledByDev)
                    for (callback in videoPlayerCallbacks) {
                        callback.onResume(p0)
                    }
                } else if (playbackState == MediaPlayer.STATE_PREPARED) {
                    mAdsManager.start()
                    myVideoPlayer?.startVideo()
                    for (callback in videoPlayerCallbacks) {
                        callback.onPlay(p0)
                    }
                }

            }

            override fun release() {
               
                myVideoPlayer?.release()
            }

            override fun removeCallback(p0: VideoAdPlayer.VideoAdPlayerCallback?) {
               
                if (p0 != null) {
                    videoPlayerCallbacks.remove(p0)
                }
            }

            override fun stopAd(p0: AdMediaInfo?) {
                myVideoPlayer?.stopAds()
            }
        }
        mAdUiContainer = FrameLayout(mContext)
        val mAdDisplayContainer =
            ImaSdkFactory.createAdDisplayContainer(mAdUiContainer, videoAdPlayer)
        mAdDisplayContainer.player = videoAdPlayer
        mSdkFactory = ImaSdkFactory.getInstance()
        val request = mSdkFactory!!.createAdsRequest()
        request!!.adTagUrl = mAdTagUrl
        val imaSdkSettings = mSdkFactory!!.createImaSdkSettings()!!
        mAdsLoader =
            mSdkFactory?.createAdsLoader(mContext, imaSdkSettings, mAdDisplayContainer!!)
        mAdsLoader?.addAdErrorListener(this)
        mAdsLoader?.addAdsLoadedListener(this)

        // Request the ad. After the ad is loaded, onAdsManagerLoaded() will be called.
        mAdsLoader?.requestAds(request)
        }

媒体播放器已连接到AdsManager 示例中。已启用预加载.setEnablePreloading(true); 我正在LOADED接收事件,但在此之后没有收到任何事件。此外,我没有看到应该具有 webview 和跳过按钮的 AD UI。

加载广告管理器后启用预加载

 override fun onAdsManagerLoaded(adsManagerLoadedEvent: AdsManagerLoadedEvent?) {
if (adsManagerLoadedEvent?.adsManager != null) {
    mAdsManager = adsManagerLoadedEvent.adsManager
    if (mAdsManager != null && mSdkFactory != null) {
        mAdsManager!!.addAdErrorListener(this)
        mAdsManager!!.addAdEventListener(this)
        val adsRenderingSettings: AdsRenderingSettings =
            mSdkFactory!!.createAdsRenderingSettings()
        adsRenderingSettings.enablePreloading = true
        adsRenderingSettings.setLoadVideoTimeout(20000)
        mAdsManager?.init(adsRenderingSettings)
    }
}
}

播放器也连接到 adcallback

fun setVideoPlayer() {
videoPlayer!!.setPlayerCallback(object : VideoPlayer.Callback {
    override fun onPrepared() {
    }

    override fun onStarted() {
        if (mCurrentMediaInfo != null) for (callback in videoPlayerCallbacks) {
            callback.onPlay(mCurrentMediaInfo)
        }
    }

    override fun onComplete() {
        if (mCurrentMediaInfo != null) for (callback in videoPlayerCallbacks) {
            callback.onEnded(mCurrentMediaInfo)
        }
    }

    override fun onPaused() {
        if (mCurrentMediaInfo != null) for (callback in videoPlayerCallbacks) {
            callback.onPause(mCurrentMediaInfo)
        }
    }

    override fun onError() {
        if (mCurrentMediaInfo != null) for (callback in videoPlayerCallbacks) {
            callback.onError(mCurrentMediaInfo)
        }
    }

    override fun onProgress(totalDuration: Long, progress: Long) {
        if (mCurrentMediaInfo != null && videoAdPlayer != null) for (callback in videoPlayerCallbacks) {
            callback.onAdProgress(mCurrentMediaInfo, videoAdPlayer!!.adProgress)
        }
    }

    override fun onResumed() {
        if (mCurrentMediaInfo != null) for (callback in videoPlayerCallbacks) {
            callback.onResume(mCurrentMediaInfo)
        }
    }
})
}

无法解决这里的问题..

4

0 回答 0