¿Cómo reproducir videos en TextureView en Android?

TextureView en Android se usa para mostrar flujos de contenido que pueden ser una instancia de un video o una escena OpenGL. La fuente podría ser tanto local como en Internet. Esta vista se comporta como una vista normal sin crear una ventana separada y solo se puede usar en una ventana acelerada por hardware. Entonces, en este artículo, le mostraremos cómo puede reproducir un video guardado localmente en un TextureView en Android. Siga los pasos a continuación una vez que el IDE esté listo.

Implementación paso a paso

Paso 1: crea un nuevo proyecto en Android Studio

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Demostramos la aplicación en Kotlin , así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.

Paso 2: agregue un video en la carpeta de activos

Cree una carpeta de activos y copie y pegue cualquier video de muestra de su elección. Para saber cómo crear una carpeta de activos, siga este artículo: Carpeta de activos en Android Studio

Paso 3: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml . Agregue un TextureView como se muestra a continuación.

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <TextureView
        android:id="@+id/texture_view_1"
        android:layout_width="300sp"
        android:layout_height="200sp"
        android:layout_centerInParent="true"/>
 
</RelativeLayout>

Paso 4: trabajar con el archivo MainActivity.kt

Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.

Kotlin

package org.geeksforgeeks.textureviewexample
 
import android.content.res.AssetFileDescriptor
import android.graphics.SurfaceTexture
import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Surface
import android.view.TextureView
 
class MainActivity : AppCompatActivity(), TextureView.SurfaceTextureListener {
 
    // Declaring mediaPlayer and
    // asset file descriptor
    private var mediaPlayer: MediaPlayer? = null
    private lateinit var assetFileDescriptor: AssetFileDescriptor
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        // Declaring and initializing
        // TextureView from layout
        val mTextureView = findViewById<TextureView>(R.id.texture_view_1)
        mTextureView.surfaceTextureListener = this@MainActivity
    }
 
    // When app is destroyed,
    // media player stops
    override fun onDestroy() {
        super.onDestroy()
        if (mediaPlayer != null) {
            mediaPlayer?.stop()
            mediaPlayer?.release()
            mediaPlayer = null
        }
    }
 
    // Locate the video file and
    // add to the media player
    override fun onSurfaceTextureAvailable(surfaceTexture: SurfaceTexture, width: Int, height: Int) {
        try {
            assetFileDescriptor = assets.openFd("sample_video.mp4")
        } catch (e: Exception) {
            e.printStackTrace()
        }
 
        try {
            val surface = Surface(surfaceTexture)
            mediaPlayer = MediaPlayer()
            mediaPlayer?.setDataSource(
                assetFileDescriptor.fileDescriptor,
                assetFileDescriptor.startOffset,
                assetFileDescriptor.length
            )
            mediaPlayer?.prepareAsync()
            mediaPlayer?.setSurface(surface)
            mediaPlayer?.isLooping = true
            mediaPlayer?.setOnPreparedListener { player -> player?.start() }
            mediaPlayer?.setOnErrorListener { _, _, _ -> false }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
 
    override fun onSurfaceTextureSizeChanged(p0: SurfaceTexture, p1: Int, p2: Int) {}
 
    override fun onSurfaceTextureDestroyed(p0: SurfaceTexture): Boolean {
        return false
    }
 
    override fun onSurfaceTextureUpdated(p0: SurfaceTexture) {}
}

Producción:

Puede ver que TextureView muestra el video.

Publicación traducida automáticamente

Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *