Reproducción de vídeo en pantalla completa
Estoy intentando reproducir un video en mi aplicación. Tiene que ser incrustado.
Pasé por el subproceso "Reproducir archivos de vídeo en Android" .
- ¿Cómo grabar video con superposición animada en Android?
- Android WebView HTML5 Video Spawns MediaPlayer que vive para siempre en Samsung S4
- Android - vídeo de la cámara verticalmente volteado
- Android no puede grabar vídeo con la Cámara frontal, Error de inicio de MediaRecorder: -19
- ¿Hay una manera de hacer que VideoView siga jugando en segundo plano en la aplicación para Android?
Puedo reproducir mi video usando VideoView como se menciona en esta discusión. Pero hay algunos problemas.
-
Necesito video de pantalla completa, ¿cómo puedo estirar VideoView a pantalla completa? ¿Eso estirará el video también?
-
No necesito los botones de reproducción / avance / parada predeterminados. Básicamente, necesito la reproducción en bucle continuo del video.
He intentado la clase MediaPlayer como aquí , pero nunca funcionó. ¿Qué aspecto debería tener el formato de cadena si tengo mi archivo de vídeo en el directorio res / raw? Realmente no quiero que el archivo de vídeo se reproduzca desde sdcard. ¿Cómo se puede empaquetar junto con la aplicación?
Si cualquiera de estos dos enfoques funciona, estaré mejor.
Este es mi código:
videoHolder = new VideoView(this); // videoHolder = (VideoView)findViewById(R.id.videoview); LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); videoHolder.setLayoutParams(params); videoHolder.setMediaController(new MediaController(this)); setContentView(videoHolder); // // //// I tested and found that it works fine for .wmv, .3gp and .mp4 //// videoHolder.setVideoURI(Uri.parse("file:///sdcard/video.3gp")); videoHolder.setVideoURI(Uri.parse("res/raw/demo.3gp")); videoHolder.requestFocus(); videoHolder.start();
Curiosamente, la url comentada funciona (la que tiene sdcard). El otro no funciona. He intentado muchas combinaciones de "file: // res / raw / demo.3gp" a solo "demo".
¿Cuál sería la cadena correcta para acceder al archivo?
- Cómo convertir datos de video en base64
- Conversión de imágenes en vídeo
- VideoView se bloquea después de mucho tiempo jugando
- Video androide, escuchar sonido pero no video
- ¿Es posible comprimir videos en Android?
- Cómo escalar el video en un SurfaceView más grande que la ventana en Android?
- Error de cámara 100 en .takePicture SÓLO DESPUÉS de detener una grabación de vídeo
- Cómo reproducir un archivo de vídeo en android?
No es necesario hacer ninguna codificación para reproducir vídeo a modo de pantalla completa
Aplicar el siguiente formato de diseño en el xml que contiene el videoview que seguramente se reproducirá el video en modo de pantalla completa. Como se está ejecutando el mío. 🙂 Espero eso ayude
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/myvideoview" android:layout_width="fill_parent" android:layout_alignParentRight="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_height="fill_parent"> </VideoView> </RelativeLayout>
Además de añadir el mediacontroller también le dará el controlador para su uso.
He resuelto el problema:
1. Para quitar los botones de continuación / pausa, retire el controlador de medios. Para el problema de bucle poner OnCompletionListener
para que cuando el video llega al final, se inicia de nuevo:
videoView.setOnCompletionListener( new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { videoView.start(); } });
2. Para cambiar el tamaño del video, anule el método onMeasure()
en VideoView
siguiente manera:
public class MyVideoView extends VideoView { public MyVideoView(Context context) { super(context); } @Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(480,800); } }
Sé que este hilo es un par de semanas, pero no tiene que copiar el archivo de vídeo a la tarjeta SD sólo para jugar. Utilice lo siguiente pero inserte el nombre del paquete en lugar de "com.suempresa.suproyecto":
videoView.setVideoURI(Uri.parse("android.resource://com.yourcompay.yourproject/" + R.raw.yourvideoresource));
Si quieres reproducir vídeo en pantalla completa, simplemente añade esta línea de código en tu archivo Androidmanifest.xml, en la actividad en la que se va a reproducir este video. Simplemente agregue estas dos líneas en el archivo de manifiesto android.
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation|screenSize"
Al igual que en mi archivo androidmanifest.xml lo he añadido
<activity android:name="com.appliconic.straminglivevideo.MainActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation|screenSize" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Modificado respuesta @ Javanator un poco, esto no estirar el video:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/myvideoview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_centerHorizontal="true"> </VideoView> </RelativeLayout>
Espero que esto ayude a alguien 🙂
Para reproducir video en bruto, debe copiarlo en Sdcard de la siguiente manera:
File f=new File(Environment.getExternalStorageDirectory(), FICHIER_BLOW); try { if (f.exists()){ MyVideoView videoHolder = new MyVideoView(this); LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); videoHolder.setLayoutParams(params); setContentView(videoHolder); video =Uri.fromFile(f); videoHolder.setVideoURI(video); videoHolder.start(); } else if (f.createNewFile()){ BufferedOutputStream bufEcrivain = new BufferedOutputStream((new FileOutputStream(f))); BufferedInputStream VideoReader = new BufferedInputStream(getResources().openRawResource(R.raw.blow)); byte[] buff = new byte[32 * 1024]; int len; while( (len = VideoReader.read(buff)) > 0 ){ bufEcrivain.write(buff,0,len); } bufEcrivain.flush(); bufEcrivain.close(); MyVideoView videoHolder = new MyVideoView(this); LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); videoHolder.setLayoutParams(params); setContentView(videoHolder); video =Uri.fromFile(f); videoHolder.setVideoURI(video); videoHolder.start(); } else{ } } catch (IOException e) { e.printStackTrace(); }