android - 如何在 Android 应用程序中播放来自 Amazon S3 的视频?

标签 android video amazon-s3 amazon-web-services bytearrayoutputstream

我使用 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, 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。有人知道解决存储在亚马逊上的预览视频问题的任何其他解决方案吗? (我听说在他们用于 IOSsdk 上,他们使用 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

关于android - 如何在 Android 应用程序中播放来自 Amazon S3 的视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287233/

相关文章:

ios - 尝试启动 YouTube 应用的 iOS 网络应用出现问题

python - 客户端错误 : An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied

javascript - AWS Cors 问题 - Node.js

jquery - 在 android 上缩放时更改 div 的尺寸?

android - Android图像中的缩放比例?

android - 如何在 cwac 的 MergeAdapter 中添加 ExpandableListadApter

android - 我怎样才能在android中截取视频的屏幕截图

iphone - AVCaptureSession 只得到视频缓冲区

node.js - ZIP 文件在上传到 S3 期间损坏

android - Eclipse 找不到 android :id="@+id/android: names