Я использую Expoplayer, чтобы показать видео в качестве первого элемента в recyclerview, и теперь я получаю видео с URL-адреса в расширении mp4, и оно должно воспроизводиться автоматически, когда появляется экран. Я также оборачиваю весь макет в макет кадра. потому что иногда я хочу скрыть представление, когда я запускаю приложение, оно показывает черный экран, я не знаю, почему!
вот мой просмотрщик, где я должен воспроизвести видео. Кто-нибудь может мне помочь?
class SpotlightViewHolder(val itemVw: View, val adapter: NewNewsAdapter) : RecyclerView.ViewHolder(itemVw), Player.EventListener {
lateinit var simpleExoplayer: SimpleExoPlayer
private var playbackPosition: Long = 0
private val dataSourceFactory: DataSource.Factory by lazy {
DefaultDataSourceFactory(adapter.activity, "exoplayer-sample")
}
fun bind(spotLightData: List<SpotlightModel>?) {
if (spotLightData == null) {
itemVw.spotLayoutRoot.toggleVisibility(false)
} else {
val spotlight = spotLightData[0]
itemVw.spotLayoutRoot.toggleVisibility(true)
when (spotlight.adType) {
"image" -> {
itemVw.spot_light_image.toggleVisibility(true)
itemVw.video_view.toggleVisibility(false)
GlideApp.with(adapter.activity).load(spotLightData[0].coverUrl).into(itemVw.spot_light_image)
}
"video" -> {
itemVw.spot_light_image.toggleVisibility(false)
itemVw.video_view.toggleVisibility(true)
initializePlayer(spotlight.coverUrl)
}
}
itemVw.btn_spotLight_cta.text = spotlight.cta.title
itemVw.btn_spotLight_cta.setOnClickListener {
adapter.callback.spotLightClicked(spotLightData[0])
}
}
}
private fun initializePlayer(url: String) {
Log.e(TAG, "initializePlayer: --------------------------------,-")
var simpleExoplayer = SimpleExoPlayer.Builder(adapter.activity).build()
preparePlayer(url)
itemVw.video_view.player = simpleExoplayer
simpleExoplayer.seekTo(playbackPosition)
simpleExoplayer.playWhenReady = true
simpleExoplayer.addListener(this)
}
private fun preparePlayer(videoUrl: String) {
val uri = Uri.parse(videoUrl)
val mediaSource = buildMediaSource(uri)
simpleExoplayer.prepare(mediaSource)
}
override fun onPlayerError(error: ExoPlaybackException) {
// handle error
Log.e(TAG, "onPlayerError: -----------------------------${error}")
}
private fun buildMediaSource(uri: Uri): MediaSource {
return ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(uri)
}
private fun releasePlayer() {
playbackPosition = simpleExoplayer.currentPosition
simpleExoplayer.release()
}}
вот макет
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/spotLayoutRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="0dp"
android:layout_height="230dp"
android:id="@+id/spot_light_image"
android:scaleType="centerCrop"
tools:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="230dp"
app:onlyShowVideo="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:id="@+id/btn_spotLight_cta"
style="@style/btnStyle"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:background="@drawable/newswav_accent_button"
android:backgroundTint="@color/white"
android:text="Learn more"
android:textColor="@color/red_death_covid"
android:paddingStart="@dimen/small"
android:paddingEnd="@dimen/small"
android:layout_margin="@dimen/hiad_12_dp"
android:stateListAnimator="@null"
android:textAllCaps="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>