TextureView

 por: Alejandro Samudio

TextureView

Se trata de un widget que permite mostrar cualquier contenido audiovisual como un video, una escena de OpenGL o una vista previa de una cámara dentro de una aplicación. El contenido expuesto mediante este widget puede provenir de algún proceso de la propia aplicación o puede ser contenido externo. Aunque se debe tener en cuenta que TextureView solo puede ser ejecutado correctamente en una ventana acelerada por hardware si este no es el caso no se mostrará nada en el widget al ejecutarlo.

Implementación

A continuación, se presentará una serie de pasos que muestren como mostrar un video en una aplicación de Android usando TextureView.

Paso 1. Crear un nuevo proyecto.


Al entrar en Android Studio, se hace clic a la pestaña de Archivos (Files) para luego seleccionar nuevo proyecto en el cual elegiremos la plantilla con la que se trabajará la aplicación. Después, se mostrará otro pantalla en la que se pedirá colocar un nombre al proyecto al igual que el lenguaje que se utilizará (en este caso Java) y, por último, nos pedirá el SDK. Una vez hecho todo esto, hacemos clic en el botón de Terminar y se creará nuestro proyecto al igual que se abrirá una nueva ventana con el proyecto abierto.

Paso 2. Añadir un video a una carpeta dentro del proyecto.

Tras crear un nuevo proyecto, en la barra de archivos del proyecto se añadirá una carpeta de assets (Assets Folder) en la carpeta main del proyecto y a esa carpeta se le agregará el video que se utilizará en la aplicación.

Paso 3. Agregar el widget a la aplicación (XML).

Después de añadir el archivo con el video a nuestro proyecto, se buscará el archivo XML (activity_main.xml) de la aplicación para así agregar el widget del TextureView a la aplicación. 


Teniendo el XML en modo gráfico abierto, se seleccionará el widget de TextureView y se colocará dentro del espacio de trabajo en blanco y luego se ajustará el widget a nuestra conveniencia.

Paso 4. Codificar el widget para su uso (Java).

Habiendo agregado el widget de TextureView al proyecto, se procederá a desarrollar el código necesario para el correcto funcionamiento del widget. A continuación, se mostrará un algoritmo escrito en Java que permite visualizar nuestro video seleccionado en la aplicación.
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.content.res.AssetFileDescriptor;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.TextureView;
import android.view.Surface;

import java.io.IOException;

public class MainActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener {

private TextureView mTextureView;
private MediaPlayer mMediaPlayer;
private AssetFileDescriptor fileDescriptor;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mTextureView = findViewById(R.id.textureView);

mTextureView.setSurfaceTextureListener(this);

mMediaPlayer = new MediaPlayer();

try {
fileDescriptor = getAssets().openFd("video_prueba.mp4");
} catch (IOException e) {
e.printStackTrace();
}


}

@Override
public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surfaceTexture, int width, int height) {
Surface surface = new Surface(surfaceTexture);

try {
mMediaPlayer.setDataSource(fileDescriptor);

mMediaPlayer.setSurface(surface);

mMediaPlayer.prepareAsync();

mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surfaceTexture, int i, int i1) {

}

@Override
public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surfaceTexture) {
return false;
}

@Override
public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surfaceTexture) {

}

@Override
protected void onPause() {
if(mMediaPlayer != null && mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
}
super.onPause();
}

@Override
protected void onResume() {
if(mMediaPlayer != null)
{
mMediaPlayer.start();
}
super.onResume();
}

@Override
protected void onDestroy() {
if(mMediaPlayer != null)
{
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
super.onDestroy();
}
}

Resultado:

Tras completar todos los pasos anteriores, se procede a ejecutar el programa y obtendremos lo siguiente:


Al ejecutar la aplicación, se podrá visualizar el video que agregamos en la sección donde colocamos el widget del TextureView. 

Y, con esto, se habrá hecho un aplicación en la cual podemos ejecutar un video usando TextureView.



Comentarios

Entradas más populares de este blog

Plantillas/Pantallas para proyectos

SurfaceView

VideoView