Cómo convertir datos de video en base64
Tengo una aplicación que tomar vídeo de cámara o galería y convertirlo en datos base64 y que los datos enviar al servidor, pero el problema es que cada vez que convertir datos base64 no será los datos correctos en la variable videodata. Para esto utilicé debajo del código:
FileInputStream objFileIS = null; try { System.out.println("file = >>>> <<<<<" + selectedImagePath); objFileIS = new FileInputStream(selectedImagePath); } catch (FileNotFoundException e) { e.printStackTrace(); } ByteArrayOutputStream objByteArrayOS = new ByteArrayOutputStream(); byte[] byteBufferString = new byte[1024]; try { for (int readNum; (readNum = objFileIS.read(byteBufferString)) != -1;) { objByteArrayOS.write(byteBufferString, 0, readNum); System.out.println("read " + readNum + " bytes,"); } } catch (IOException e) { e.printStackTrace(); } videodata = Base64.encodeToString(byteBufferString, Base64.DEFAULT); Log.d("VideoData**> " , videodata);
Por favor, hágalo correcto …
- Android: Encontrando audio y video usando MediaCodec
- Android MediaRecorder para grabar una superficie (no la cámara)
- ¿Por qué `` OnInfoListener` de MediaRecorder no se llama en código inferior cuando se alcanza el tamaño máximo de archivo
- Borrar el marco de video de la vista de superficie en video completado
- Android no puede grabar vídeo con la Cámara frontal, Error de inicio de MediaRecorder: -19
- ¿El streaming de audio / video de Android no puede transmitir un archivo rtsp?
- Comprimir video como whatsapp
- Android, Java - Renderización de un vídeo utilizando marcos de mapa de bits para invertir un vídeo (Xuggler)
- Cambiar el tamaño de la vista de la superficie para el cambio de la relación de aspecto en la visualización de vídeo en android
- Streaming de vídeo con peerjs webrtc de android webview es demasiado lento
- Sube video grande a un servidor PHP desde Android Crashes Application
- Android MediaPlayer Streaming desde un redireccionamiento PHP no funciona-out!
- ¿Cómo las aplicaciones de Media Player para Android como MXPlayer y MoboPlayer reproducen formatos de archivo no soportados como MKV?
Cuando codifica el byteBufferString
, está codificando sólo el último fragmento de datos leídos. Debe codificar todo el contenido de ByteArrayOutputStream
. Puede hacer esto con el siguiente código:
videodata = Base64.encodeToString(objByteArrayOS.toByteArray(), Base64.DEFAULT);
Sin embargo, existe la posibilidad de que esto puede OutOfMemoryError
un OutOfMemoryError
si el tamaño del video es grande.
Lo soluciono así:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d("Imagen este ", String.valueOf(data)); if(data!=null) { switch (requestCode) { case SELECT_VIDEO: Uri selectedVideoUri = data.getData(); String[] projection = {MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION}; Cursor cursor = managedQuery(selectedVideoUri, projection, null, null, null); cursor.moveToFirst(); String filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)); Log.d("File Name:",filePath); Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.MINI_KIND); // Setting the thumbnail of the video in to the image view msImage.setImageBitmap(thumb); InputStream inputStream = null; // Converting the video in to the bytes try { inputStream = getContentResolver().openInputStream(selectedVideoUri); } catch (FileNotFoundException e) { e.printStackTrace(); } int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; byteBuffer = new ByteArrayOutputStream(); int len = 0; try { while ((len = inputStream.read(buffer)) != -1) { byteBuffer.write(buffer, 0, len); } } catch (IOException e) { e.printStackTrace(); } System.out.println("converted!"); String videoData=""; //Converting bytes into base64 videoData = Base64.encodeToString(byteBuffer.toByteArray(), Base64.DEFAULT); Log.d("VideoData**> " , videoData); String sinSaltoFinal2 = videoData.trim(); String sinsinSalto2 = sinSaltoFinal2.replaceAll("\n", ""); Log.d("VideoData**> " , sinsinSalto2); baseVideo = sinsinSalto2;
VideoData tiene el base64 del video .. Espero que sirva, trabajé perfecto
- Cómo obtener ID de proyecto de google y pushwoosh id de aplicación?
- No recibo la actualización de 'com.google.android.gms: play-services-wallet: 8.4.0' para los servicios de reproducción de Google en sdk