How to play a video from Amazon S3 in Android App?

北战南征 提交于 2019-12-03 06:23:18

问题


I use aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo to preview my files stored on Amazon (Amazon Simple Storage Service). Looking through code I saw that they use this, to acces the files:

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();

    }
}

}

Well, I have modified this methods to return ByteArrayOutputStream instead then I easily transform it to String or Bitmap (applying ByteArrayOutputStream.toByteArray() then using BitmapFactory.decodeByteArray(byte[] data, int offset, int length, Options opts)).

So, it works on text-files and pictures. My problem is when I try to access videos. So, my questions are:

1.Using the method provided above, how could I get a video from ByteArrayOutputStream (ByteArrayOutputStream.toString()) and play it in a VideoView or using MediaPlayer or an approach... ?

2 . Does anybody know any other solution to this problem of preview videos stored on Amazon ? (I heard that on their sdk for IOS they use URLs to access files...)

PS: Supplying the file URL and open it in browser does not make sense, because this URLs expire after a wile.


回答1:


First we have to provide the name of our bucket and the object (see aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo for a complet guide) we want to open then get the URL to our object:

    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);

Now, just play the video in a video view, supplying the URL obtained:

    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();

I want to give thanks to @CommonsWare for

  • indicating me through REST API (even the code I used is from aws-sdk reading the REST API documentation helped me and show also other ways of requesting Amazon objects)

  • indicating me to use generatePresignedUrl()

  • the code for playing the video is also inspired from his materials.




回答2:


1.Using the method provided above, how could I get a video from ByteArrayOutputStream (ByteArrayOutputStream.toString()) and play it in a VideoView or using MediaPlayer or an approach... ?

Maybe you could get it to work by publishing the byte array through a ContentProvider and openFile(). Here is a sample project where I demonstrate serving a file by means of a custom InputStream this way.

The media subsystem is rather fussy, though, and so I do not give you good odds on this working.

2 . Does anybody know any other solution to this problem of preview videos stored on Amazon ? (I heard that on their sdk for IOS they use URLs to access files...)

Last I checked, S3 had a REST API that you could use to generate URLs to the videos. I'd hand that URL to MediaPlayer or VideoView.

Supplying the file URL and open it in browser does not make sense, because this URLs expire after a wile.

But you control how long "a wile [sic]" is. Make it be 24 hours or something.



来源:https://stackoverflow.com/questions/13287233/how-to-play-a-video-from-amazon-s3-in-android-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!