¿Cómo reproducir videos en Android desde la carpeta de activos o la carpeta sin formato?

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.

## 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(); 

## Verifique el tutorial completo ##

Tratar:

 AssetFileDescriptor afd = getAssets().openFd(fileName); player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength()); 
 String UrlPath="android.resource://"+getPackageName()+"/"+R.raw.ur file name; videocontainer.setVideoURI(Uri.parse(UrlPath)); videocontainer.start(); 

donde videocontainer de tipo videoview.

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:

      

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

¿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í:

android-copy-rawfile-to-sdcard-video-mp4 .

Lo encontré :

 Uri raw_uri = Uri.parse(/+R.raw.); 

Personalmente, Android encontró el recurso, pero no puede jugarlo por el momento. Mi archivo es .m4v

Creo que debes mirar esto , 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.

 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(); 

https://gist.github.com/jrejaud/b5eb1b013c27a1f3ae5f

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

En fileName debe poner la ruta relativa al archivo (sin /asset ) por ejemplo:

 player.setDataSource( getAssets().openFd(**"media/video.mp4"**).getFileDescriptor() ); 
  1. Use la API de MediaPlayer y el código de muestra.

  2. Coloque el archivo multimedia en raw carpeta raw formato.

  3. Obtenga el file descriptor del archivo en el archivo.

  4. mediaplayer.setDataSource(fd,offset,length); – Es un constructor de tres argumentos.

  5. Luego, cuando onPreared , mediaplayer.start();

Código principal

 Uri raw_uri=Uri.parse("android.resource:///+R.raw.); myVideoView=(VideoView)findViewbyID(R.idV.Video_view); myVideoView.setVideoURI(raw_uri); myVideoView.setMediaController(new MediaController(this)); myVideoView.start(); myVideoView.requestFocus(); 

XML

     
    Intereting Posts