Inserción de un vídeo en MediaStore

Estoy intentando insertar un video en el MediaStore , de la misma manera que es posible almacenar una imagen usando este método:

 MediaStore.Images.Media.insertImage(getContentResolver(), imagePath, null, null) 

Como no hay un método similar en MediaStore.Video.Media , lo que intenté hacer fue insertar un registro en MediaStore.Video.Media.EXTERNAL_CONTENT_URI y luego copiar el archivo al destino, como se muestra a continuación:

 ContentValues values = new ContentValues(); values.put(MediaStore.Video.Media.TITLE, "Title1"); values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4"); values.put(MediaStore.Video.Media.DATA, videoPath); Uri uri = cr.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); try { OutputStream os = cr.openOutputStream(uri); ... ... } (FileNotFoundException e) { cr.delete(uri, null, null); } 

El uri devuelto non-null es non-null en forma de content://media/external/video/media/{id} , lo que parece correcto.

Pero entonces cuando cr.openOutputStream(uri); Se ejecuta, se genera una FileNotFoundException .

Este último bit es similar a lo que se hace para Images.Media.insertImage mirando su código fuente.

Por cierto, tengo el permiso WRITE_EXTERNAL_STORAGE . Además, estoy probando en 4.3 y 4.4.

One Solution collect form web for “Inserción de un vídeo en MediaStore”

Lo que se obtiene de este pedazo de código:

 ContentValues values = new ContentValues(); values.put(MediaStore.Video.Media.TITLE, "Title1"); values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4"); values.put(MediaStore.Video.Media.DATA, videoPath); Uri uri = cr.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); 

Es un Uri público. Más información sobre se puede encontrar aquí , donde se puede ver, que desde la API 19 (KitKat) el acceso a los Media de Media ha cambiado.

Al mirar en el código fuente de Android se puede ver un esquema de vídeo de base de datos y columnas . VideoColumns extiende desde MediaColumns , que tiene la columna:

 MediaStore.MediaColumns.DATA 

descrito como:

Ruta de acceso al archivo en disco.

Así que debes conseguir el verdadero Uri del público Uri .

Para poder ejecutar el código:

 getDataColumn(context, uri, null, null); 

Donde uri es tu Uri pública y la función getDataColumn parece a:

 public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; final String column = MediaStore.MediaColumns.DATA; final String[] projection = { column }; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { final int column_index = cursor.getColumnIndexOrThrow(column); return cursor.getString(column_index); } } finally { if (cursor != null) cursor.close(); } return null; } 

Este código viene de aFileChooser y la función getPath

  • Aplicación de la aplicación demo de Android app?
  • Mejor manera de desarrollar una aplicación de chat de video simple para Android e iOS
  • Filtro de video de Android
  • Multiplexación de flujos de audio y vídeo en línea en android
  • Integración de VLC o cualquier otro reproductor de video de terceros en la aplicación para Android
  • Transmisión en directo del reproductor RTMP / RTSP sin utilizar la visualización web (servidor WOWZA) en Android
  • Cómo encontrar y reproducir videos descargados por Lynda.com Aplicación para Android o Windows
  • Realice un ajuste de vídeo en un TextureView (Partes de él están fuera (no visibles)) con MediaPlayer
  • Convertir secuencias de entrada de vídeo a RTMP
  • La captura de video de Phonegap se bloquea
  • Decodificación de flujo de vídeo en Android de DJI drone
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.