es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo tener dos exoplayer en una actividad?

En Android Studio (Kotlin), quiero tener dos exoplayers en una actividad. Sin embargo, sé que esto depende de las limitaciones del hardware. Algunos dispositivos solo pueden mostrar un video en cada actividad en ese momento, pero hay alguna forma de manejar esta solicitud.

Por ejemplo, tenemos dos exoplayer1 y exoplayer2. Ambos están en nuestra actividad, pero en cualquier momento, solo uno de ellos puede estar activo.

Para lograr esto, cuando exoplayer1 quiere funcionar, el exoplayer2 debe ser destruido. Y viceversa.

Destruido exoplayer1 y exoplayer2 con este código:

exoplayer1.removeAllViews()
exoplayer2.removeAllViews()

Sin embargo, cuando quiero activar nuevamente estos exoplayers, no puedo hacerlo.

¿Existe alguna manera de reactivar exoplayer después de removeAllViews?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de reactivar ExoPlayer después de removeAllViews (). Aquí están los pasos que puedes seguir:

    1. Crea dos instancias separadas de ExoPlayer y sus respectivos diseños en el archivo XML del diseño de tu actividad.
    <framelayout android:id="@+id/player_view_1" android:layout_width="match_parent" android:layout_height="wrap_content"></framelayout>
    
    <framelayout android:id="@+id/player_view_2" android:layout_width="match_parent" android:layout_height="wrap_content"></framelayout>
    
    1. En la clase de tu actividad, puedes inicializar ambas instancias de ExoPlayer con sus respectivas URL de medios y adjuntarlas a sus diseños correspondientes.
    class MainActivity : AppCompatActivity() {
    
        private var exoPlayer1: SimpleExoPlayer? = null
        private var exoPlayer2: SimpleExoPlayer? = null
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            initializeExoPlayer1()
            initializeExoPlayer2()
        }
    
        private fun initializeExoPlayer1() {
            val playerView1 = findViewById<framelayout>(R.id.player_view_1)
    
            exoPlayer1 = SimpleExoPlayer.Builder(this).build()
            playerView1.addView(PlayerView(this).apply { player = exoPlayer1 })
            val mediaSource1 = buildMediaSource("mediaUrl1")
            exoPlayer1?.prepare(mediaSource1)
            exoPlayer1?.playWhenReady = true
        }
    
        private fun initializeExoPlayer2() {
            val playerView2 = findViewById<framelayout>(R.id.player_view_2)
    
            exoPlayer2 = SimpleExoPlayer.Builder(this).build()
            playerView2.addView(PlayerView(this).apply { player = exoPlayer2 })
            val mediaSource2 = buildMediaSource("mediaUrl2")
            exoPlayer2?.prepare(mediaSource2)
        }
    }
    
    1. Cuando desees cambiar entre los dos reproductores, primero puedes detener el reproductor que se está reproduciendo actualmente y luego inicializar el otro reproductor.
    private fun switchToExoPlayer1() {
        exoPlayer2?.playWhenReady = false
        exoPlayer2?.release()
        initializeExoPlayer1()
    }
    
    private fun switchToExoPlayer2() {
        exoPlayer1?.playWhenReady = false
        exoPlayer1?.release()
        initializeExoPlayer2()
    }
    

    Con este enfoque, puedes tener dos ExoPlayers en una actividad y cambiar entre ellos cuando lo desees. Sin embargo, ten en cuenta que reproducir varios videos simultáneamente en un solo dispositivo puede afectar su rendimiento y duración de la batería, así que utiliza esta función con prudencia.

Comments are closed.