我使用aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo预览存储在Amazon(Amazon Simple Storage Service)上的文件。查看代码,我发现他们使用它来访问文件:
com.amazonaws.demo.s3.S3.getDataForObject (line 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, 0, length );
        }

        return baos.toString();
    }
    catch ( Exception exception ) {
        return exception.getMessage();

    }
}

}

好吧,我已经修改了此方法以返回ByteArrayOutputStream,然后我轻松地将其转换为StringBitmap(应用ByteArrayOutputStream.toByteArray()然后使用BitmapFactory.decodeByteArray(byte[] data, int offset, int length, Options opts))。

因此,它适用于文本文件和图片。我的问题是当我尝试访问视频时。因此,我的问题是:

1.使用上面提供的方法,如何从ByteArrayOutputStream(ByteArrayOutputStream.toString())中获取视频并以VideoView或使用MediaPlayer或方法播放...?

2。对于这个存储在亚马逊上的预览视频问题,有人知道其他解决方案吗? (我听说他们在sdk上的IOS上使用URL访问文件...)

PS:提供文件URL并在浏览器中打开没有意义,因为这些URL会在错误之后过期。

最佳答案

首先,我们必须提供我们要打开的存储桶和对象的名称(有关完整的指南,请参见aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo),然后获取对象的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);

现在,只需在视频 View 中播放视频,并提供获得的URL:
    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的代码。
  • 10-08 04:53