我使用aws-
android-sdk-1.4.3 / samples / S3_SimpleDB_SNS_SQS_Demo来预览存储在Amazon(Amazon Simple Storage Service)上的文件.通过代码查看我看到他们使用它来访问文件:
com.amazonaws.demo.s3.S3.getDataForObject(第130行)
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,length ); } return baos.toString(); } catch ( Exception exception ) { return exception.getMessage(); } }
}
好吧,我已修改此方法以返回ByteArrayOutputStream,然后我轻松地将其转换为String或Bitmap(应用ByteArrayOutputStream.toByteArray()然后使用
BitmapFactory.decodeByteArray(byte [] data,int offset,int length,Options opts)).
因此,它适用于文本文件和图片.我的问题是当我尝试访问视频时.所以,我的问题是:
1.使用上面提供的方法,我如何从ByteArrayOutputStream(ByteArrayOutputStream.toString())获取视频并在VideoView中播放或使用MediaPlayer或方法……?
2.有没有人知道亚马逊上存储的预览视频这个问题的其他解决方案? (我听说他们在IOS的sdk上使用URL来访问文件…)
PS:提供文件URL并在浏览器中打开它没有意义,因为这个URL在wile之后到期.
解决方法
首先,我们必须提供我们的存储桶的名称和对象(请参阅aws-android-sdk-1.4.3 / samples / S3_SimpleDB_SNS_SQS_Demo以获取complet指南)我们要打开然后获取对象的URL:
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);
现在,只需在视频视图中播放视频,提供获得的网址:
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();
我要感谢@CommonsWare
>通过REST API指示我(甚至我使用的代码来自aws-sdk,阅读REST API文档帮助我并显示了其他请求Amazon对象的方法)
>表示我使用generatePresignedUrl()
> playing the video is also inspired from his materials的代码.