Saltar la navegación

5.2.2. App de vídeo

Una app que muestre vídeos será en principio más sencilla, ya que no tendrá sentido separar los controles del propio reproductor. Normalmente, el reproductor estará enlazado a una ventana en la que volcará las imágenes del vídeo. No obstante, también deberíamos diferenciar en el código qué parte es la interfaz gráfica y qué otra parte se dedica al control del media, como la carga, la codificación, etcétera.

En el caso de una app reproductora de vídeo, además, la parte gráfica tiene diferentes posibilidades para enlazar la salida del reproductor hacia la interfaz gráfica. Podríamos, por ejemplo, utilizar un elemento VideoView en nuestro layout y cargar en él los vídeos directamente, utilizando un MediaController para permitir que el usuario pueda controlar la reproducción a su gusto.

<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

El código para cargar los vídeos en VideoView sería:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val videoView1 = findViewById(R.id.videoView1)
// Opción 1: Archivo en disco (Nota: android.permission.WRITE_EXTERNAL_STORAGE)
        val clip = File(Environment.getExternalStorageDirectory(), "libro.mp4")
        videoView1.setVideoPath(clip.path);
        reproducir(videoView1)
// Opción 2: Archivo en directorio res/raw (Nota: no debemos escribir la extensión)
        val videoView2 = findViewById(R.id.videoView2)
        videoView2.setVideoURI(Uri.parse("android.resource://$packageName/raw/libro"))
        reproducir(videoView2)
// Opción 3: Archivo en Internet (Nota: android.permission.INTERNET)
        val videoView3 = findViewById(R.id.videoView3)
        videoView3.setVideoPath("https://videocdn.bodybuilding.com/video/mp4/62000/62792m.mp4")
        reproducir(videoView3)
    }

    private fun reproducir(videoView: VideoView) {
        val mediaController = MediaController(this)
        mediaController.setMediaPlayer(videoView)
        videoView.setMediaController(mediaController)
        videoView.requestFocus()
        videoView.start()
    }
}

En el caso de acceder a archivos de vídeo en el disco o a vídeos en internet, no debemos olvidarnos de añadir los permisos correspondientes en el manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Esta sería la opción más sencilla, pero no permitiría tanto control como utilizando directamente los objetos MediaPlayer o ExoPlayer.

Creado con eXeLearning (Ventana nueva)