Cómo reproducir un video de Amazon S3 en Android App?
Utilizo aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo
para previsualizar mis archivos almacenados en Amazon (Amazon Simple Storage Service). Mirando a través del código vi que usan esto, para acceder a los archivos:
com.amazonaws.demo.s3.S3.getDataForObject (line 130)
- Sube un archivo a S3 usando el SDK de AWS
- El ejemplo de S3 Transfer Manager muestra un error: No se admite el acceso no autenticado
- ¿Puedes configurar Android Studio / SDK Manager para buscar / obtener la última versión de AWS SDK para Android?
- La carga de imágenes GIF desde android utilizando la utilidad de transferencia aws causa un fallo
- Subida de imagen amazon s3 android SDK 2.0
public static String getDataForObject( String bucketName, String objectName ) { return read( getInstance().getObject( bucketName, objectName ).getObjectContent() ); } protected static String read( InputStream stream ) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream( 8196 ); byte[] buffer = new byte[1024]; int length = 0; while ( ( length = stream.read( buffer ) ) > 0 ) { baos.write( buffer, 0, length ); } return baos.toString(); } catch ( Exception exception ) { return exception.getMessage(); } }
}
Bueno, he modificado estos métodos para devolver ByteArrayOutputStream
lugar, entonces fácilmente transformar a String
o Bitmap
(aplicando ByteArrayOutputStream.toByteArray()
continuación, utilizando BitmapFactory.decodeByteArray(byte[] data, int offset, int length, Options opts)
).
Por lo tanto, funciona en archivos de texto y fotos. Mi problema es cuando intento acceder a los videos. Por lo tanto, mis preguntas son:
1.Usando el método proporcionado anteriormente, ¿cómo podría obtener un vídeo de ByteArrayOutputStream
( ByteArrayOutputStream.toString()
) y reproducirlo en un VideoView
o utilizando MediaPlayer
o un enfoque …?
2. ¿Alguien sabe alguna otra solución a este problema de videos de vista previa almacenados en Amazon? (He oído que en su sdk
para IOS
que utilizan las direcciones URL para acceder a los archivos …)
PS: El suministro de la URL del archivo y abrirlo en el navegador no tiene sentido, porque las URL caducan después de un wile.
- AWS Cognito: se ocupa del tiempo de expiración del token
- Granja de dispositivos AWS con Espresso y JUnit4
- La falla de carga de AWS S3 encontró una excepción que no se pudo volver a intentar en Android
- Amazon S3 TransferListener nunca se llama
- Descarga de imágenes de Android AWS Server
- AWS Cognito combinado con el Administrador de cuentas de Android para varias cuentas
- ¿Cómo probar las notificaciones de GCM sin la aplicación?
- Cómo subir archivos de Android a Amazon S3 SIN usar el SDK
Primero tenemos que proporcionar el nombre de nuestro cubo y el objeto (ver aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo
para una guía completa) queremos abrir entonces obtener la URL de nuestro objeto:
AWSCredentials myCredentials = new BasicAWSCredentials("YOUR_AMAZON_ACCESS_KEY_ID", "YOUR_AMAZON_SECRET_KEY_ID"); AmazonS3 s3client = new AmazonS3Client(myCredentials); GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName); URL objectURL = s3client.generatePresignedUrl(request);
Ahora, acaba de reproducir el video en una vista de video, proporcionando la URL obtenida:
getWindow().setFormat(PixelFormat.TRANSLUCENT); mediaCtrl = new MediaController(this); mediaCtrl.setMediaPlayer(videoView); videoView.setMediaController(mediaCtrl); Uri clip = Uri.parse(objectURL.toString()); videoView.setVideoURI(clip); videoView.requestFocus(); videoView.start();
Quiero dar gracias a @CommonsWare por
-
indicándome a través de
REST API
(incluso el código que usé es deaws-sdk
leyendo la documentaciónREST API
me ayudó y también mostrar otras formas de solicitar objetos de Amazon) -
indicándome que use
generatePresignedUrl()
-
el código para reproducir el video también se inspira en sus materiales .
1.Usando el método proporcionado anteriormente, ¿cómo podría obtener un vídeo de ByteArrayOutputStream (ByteArrayOutputStream.toString ()) y reproducirlo en un VideoView o utilizando MediaPlayer o un enfoque …?
Tal vez usted podría conseguir que funcione publicando la matriz de bytes a través de un ContentProvider
y openFile()
. Aquí hay un ejemplo de proyecto en el que demuestro que sirve un archivo mediante un InputStream
personalizado de esta manera.
El subsistema de medios es bastante exigente, sin embargo, y por lo que no le dan buenas probabilidades en este trabajo.
2. ¿Alguien sabe alguna otra solución a este problema de videos de vista previa almacenados en Amazon? (He oído que en su sdk para IOS que utilizan las direcciones URL para acceder a los archivos …)
La última vez que comprobé, S3 tenía una API de REST que usted podría utilizar para generar URLs a los videos. Daría esa URL a MediaPlayer
o VideoView
.
Proporcionar la URL del archivo y abrirla en el navegador no tiene sentido, porque las URL expiran después de un wile.
Pero usted controla cuánto tiempo "un wile [sic]" es. Que sea de 24 horas o algo así.