reproduzca - ¿Cómo reproducir videos en Android desde la carpeta de activos o la carpeta sin formato?
mejor reproductor de video para android 2017 (13)
Use la API de
MediaPlayer
y el código de muestra.Coloque el archivo multimedia en
raw
carpetaraw
formato.Obtenga el
file descriptor
del archivo en el archivo.mediaplayer.setDataSource(fd,offset,length);
- Es un constructor de tres argumentos.Luego, cuando
onPreared
,mediaplayer.start();
Estoy tratando de reproducir un video en emulador de Android Tengo el video en mi carpeta de activos, así como en la carpeta en bruto. Pero después de investigar aún no puedo reproducir el video en mi emulador. Estoy trabajando en Android 2.1. Mi formato de video es mp4, así que no creas que debería ser un problema ¿Alguien podría darme un código de ejemplo para que yo pueda entender un poco más?
El problema es que la VideoView que necesito para mostrar el video solo tomará un URI o una ruta de archivo para apuntar al video.
Si guardo el video en la carpeta raw o assets, solo puedo obtener una secuencia de entrada o un descriptor de archivo y parece que nada de eso puede usarse para inicializar VideoView.
Actualizar
Eché un vistazo más de cerca al ejemplo de MediaPlayer e intenté iniciar un MediaPlayer con un FileDescriptor en los archivos de activos como en el siguiente código:
SurfaceView videoView = (SurfaceView) findViewById(gettingStarted)
SurfaceHolder holder = videoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);
player.setDataSource(getAssets().openFd(fileName).getFileDescriptor());
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
Ahora recibo la siguiente excepción:
java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
Parece que no hay otra manera que copiar el archivo en la tarjeta SD al inicio y parece una pérdida de tiempo y memoria.
¿Intentó poner Video manualmente en la tarjeta SD e intentó reproducir la tienda de videos en la tarjeta SD?
Si funciona, puede encontrar la forma de copiar de Raw a SDcard aquí:
Código principal
Uri raw_uri=Uri.parse("android.resource://<package_name>/+R.raw.<video_file_name>);
myVideoView=(VideoView)findViewbyID(R.idV.Video_view);
myVideoView.setVideoURI(raw_uri);
myVideoView.setMediaController(new MediaController(this));
myVideoView.start();
myVideoView.requestFocus();
XML
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<VideoView
android:id="+@/Video_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
Creo que debes mirar this , debería tener todo lo que deseas.
EDITAR: Si no quiere ver el enlace, esto resume bastante lo que le gustaría.
MediaPlayer mp = MediaPlayer.create (contexto, R.raw.sound_file_1); mp.start ();
Pero aún así recomiendo leer la información en el enlace.
En fileName
debe poner la ruta relativa al archivo (sin /asset
) por ejemplo:
player.setDataSource(
getAssets().openFd(**"media/video.mp4"**).getFileDescriptor()
);
Lo encontré :
Uri raw_uri = Uri.parse(<package_name>/+R.raw.<video_file_name>);
Personalmente, Android encontró el recurso, pero no puede jugarlo por el momento. Mi archivo es .m4v
Parece que tienes el mismo problema que yo. en lugar de usar MP4, ¿es posible 3GPP? Creo que utilicé HandBrake o algo así como el convertidor de video ... solo necesitas asegurarte de tener el codificador correcto, como H.264x o algo así. lo siento por ser un poco vago, ha pasado un tiempo. Además, si es posible, no te preocupes por Android 2.1 más, y también, algo simplemente NO FUNCIONARÁ EN EL EMULADOR. entonces, si funciona en muchos dispositivos, entonces supongamos que funciona (especialmente con diferentes fabricantes)
aquí, puedes leer mi problema y cómo resolví el problema (después de mucho tiempo y nadie tenía una respuesta). Expliqué con mucho más detalle aquí: el reproductor multimedia Android no funciona
Si recuerdo bien, tuve el mismo tipo de problema al cargar cosas desde la carpeta de activos pero con una base de datos. Parece que las cosas en su carpeta de activos pueden tener 2 estadísticas: comprimidas o no.
Si está comprimido, se le permite 1 Mo de memoria para descomprimirlo, de lo contrario obtendrá este tipo de excepción. Hay varios informes de errores porque la documentación no está clara. Entonces, si aún desea usar su formato, debe usar una versión sin comprimir o dar una extensión como .mp3 o .png a su archivo. Sé que está un poco loco, pero cargo una base de datos con una extensión .mp3 y funciona perfectamente bien. Esta otra solución es empaquetar su aplicación con una opción especial para decirle que no comprima cierta extensión. Pero luego necesita construir su aplicación manualmente y agregar la opción "zip -0".
La ventaja de un asspres sin comprimir es que la fase de zip-align antes de la publicación de una aplicación alineará los datos correctamente para que cuando se cargue en la memoria se pueda mapear directamente.
Entonces, soluciones:
- cambie la extensión del archivo a .mp3 o .png y vea si funciona
- crea tu aplicación manualmente y usa la opción zip-0
Tratar:
AssetFileDescriptor afd = getAssets().openFd(fileName);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
## Perfectamente trabajando desde Android 1.6 ##
getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
//if you want the controls to appear
videoHolder.setMediaController(new MediaController(this));
Uri video = Uri.parse("android.resource://" + getPackageName() + "/"
+ R.raw.your_raw_file); //do not add any extension
//if your file is named sherif.mp4 and placed in /raw
//use R.raw.sherif
videoHolder.setVideoURI(video);
setContentView(videoHolder);
videoHolder.start();
PlayVideoActivity.java:
public class PlayVideoActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
VideoView videoView = (VideoView) findViewById(R.id.video_view);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.documentariesandyou));
videoView.start();
}
}
activity_play_video.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</VideoView>
</LinearLayout>
String UrlPath="android.resource://"+getPackageName()+"/"+R.raw.ur file name;
videocontainer.setVideoURI(Uri.parse(UrlPath));
videocontainer.start();
donde videocontainer de tipo videoview.
VideoView myVideo = (VideoView) rootView.findViewById(R.id.definition_video_view);
//Set video name (no extension)
String myVideoName = "my_video";
//Set app package
String myAppPackage = "com.myapp";
//Get video URI from raw directory
Uri myVideoUri = Uri.parse("android.resource://"+myAppPackage+"/raw/"+myVideoName);
//Set the video URI
myVideo.setVideoURI(myVideoUri);
//Play the video
myVideo.start();