Cómo reproducir vídeos en android desde la carpeta de activos o la carpeta en bruto?
Estoy tratando de reproducir un video en el emulador de Android Tengo el video en mi carpeta de activos, así como la carpeta en bruto Pero después de hacer algunas investigaciones aún no puedo reproducir vídeo en mi emulador estoy trabajando en Android 2.1 Mi formato de vídeo es mp4 así que i No creo que debería ser un problema ¿Podría alguien simplemente darme un código de ejemplo para que pueda entender un poco más?
El problema es que el VideoView que necesito para mostrar el video tomará sólo un URI o una ruta de acceso de archivo para apuntar al vídeo.
- Eventos VideoView onTouch: pausar / reanudar vídeo y mostrar / ocultar MediaController y ActionBar
- ¿Cómo puedo tomar una captura de pantalla de un video, en android
- ¿Cómo transmitir vídeo directamente entre dvr (servidor) y el teléfono móvil con android (cliente)?
- Video Recorte o zoom con una coordenada específica?
- ¿Cómo realizar zoom in / out en VideoView en android?
Si guardo el video en la carpeta raw o assets solo puedo obtener un flujo de entrada o un descriptor de archivo y parece que nada de eso se puede usar para inicializar el VideoView.
Actualizar
Eché un vistazo más de cerca al ejemplo MediaPlayer y trató de iniciar un MediaPlayer con un FileDescriptor a los archivos de activos como en el código de abajo:
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 tengo una 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 de copiar el archivo a la tarjeta sd en el inicio y que parece una pérdida de tiempo y memoria.
- Android - No se pueden reproducir videos (mp4 / mov / 3gp / etc.)?
- Apertura de vídeo RTSP en VideoView
- Reproducción inversa de Android y marco por cuadro
- Buscando FFmpeg Wrappers para Android
- Reproducción de un video descargado Error: 1, -2147483648
- Reproducción automática de vídeos (vista de lista)
- Cómo reproducir video en vivo desde URL remota en android?
- Cómo recortar vídeo en android (sin ffmpeg)?
## 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();
## Compruebe 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 del 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:
<?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>
Si recuerdo bien, tuve el mismo tipo de problema al cargar cosas de la carpeta de activos pero con una base de datos. Parece que las cosas en su carpeta de activos pueden tener 2 estadísticas: comprimido o no.
Si se comprime, se le permite 1 Mo de memoria para descomprimirlo, de lo contrario obtendrá este tipo de excepción. Hay varios reportes de errores sobre eso porque la documentación no está clara. Así que si todavía quieres usar tu formato, debes utilizar una versión sin comprimir, o dar una extensión como .mp3 o .png a tu archivo. Sé que es un poco loco pero carga 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 indicarle que no comprima una determinada extensión. Pero entonces usted necesita para construir su aplicación manualmente y agregar "zip -0" opción.
La ventaja de un assest sin comprimir es que la fase de zip-align antes de la publicación de una aplicación alineará los datos correctamente de modo que cuando se cargue en la memoria pueda ser mapeada directamente.
Por lo tanto, las soluciones:
- Cambiar la extensión del archivo a .mp3 o .png y ver si funciona
- Construya su aplicación manualmente y use la opción zip-0
¿Has intentado poner manualmente Video en SDCard e intentar reproducir video store en SDCard?
Si está funcionando puedes encontrar la manera de copiar de Raw a SDcard aquí:
Android-copy-rawfile-a-sdcard-video-mp4 .
Lo encontré :
Uri raw_uri = Uri.parse(<package_name>/+R.raw.<video_file_name>);
Personnaly Android encontró el recurso, pero no puede jugarlo por ahora. Mi archivo es .m4v
Pienso que usted necesita mirar esto – debe tener todo que usted desea.
EDIT: Si no quieres ver el enlace – esto resume bastante lo que te gustaría.
MediaPlayer mp = MediaPlayer.create (context, R.raw.sound_file_1); Mp.start ();
Pero todavía 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();
Suena como si tuvieras el mismo problema que yo. En lugar de usar MP4, 3GPP es posible? Creo que he utilizado como HandBrake o algo así como el convertidor de vídeo … sólo tiene que asegurarse de que tiene el codificador de la derecha, como H.264x o algo así. Lo siento por ser un poco vago, ha sido un tiempo. Además, si es posible, no te molestes en preocuparte por el android 2.1 ya, y también, algo las cosas simplemente NO TRABAJARÁN EN EMULADOR. Así que si funciona en una gran cantidad de dispositivos, entonces sólo asumir que funciona (especialmente con diferentes fabricantes)
Aquí, puede leer mi problema y cómo he resuelto el problema (después de mucho tiempo y nadie tenía una respuesta). I explicado en mucho más detalle aquí: reproductor de medios android no funciona
En el fileName
debe poner la ruta relativa al archivo (sin /asset
) por ejemplo:
player.setDataSource( getAssets().openFd(**"media/video.mp4"**).getFileDescriptor() );
A- Utilice la API de MediaPlayer
y el código de ejemplo.
B- Coloque el archivo multimedia en raw
carpeta raw
C- obtener el file descriptor
en el archivo
mediaplayer.setDataSource(fd,offset,length);
– es un constructor de tres argumentos
E- entonces when onPreared
, mediaplayer.start();
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>
- Nueva interfaz de la tarjeta Google Now y Google+
- ¿Cómo se relacionan las devoluciones de llamada de SurfaceHolder con el ciclo de vida de la actividad?