4

我使用aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo預覽存儲在亞馬遜(Amazon Simple Storage Service)上的文件。翻翻代碼,我看到他們利用這一點,來存取權限的文件:如何在Android應用程序中從Amazon S3播放視頻?

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.使用上述方法進行,我怎麼能得到ByteArrayOutputStreamByteArrayOutputStream.toString())的視頻,並在播放一個VideoView或使用MediaPlayer或靠近...?

2。有誰知道存儲在亞馬遜上的預覽視頻的這個問題的任何其他解決方案嗎? (我聽說他們的sdkIOS他們使用URL來訪問文件...)

PS:提供文件URL並在瀏覽器中打開它沒有任何意義,因爲這些URL在wile之後過期。

回答

6

首先,我們必須爲我們的桶的名稱和對象(見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); 

現在,只需播放視頻在視頻視圖,提供獲得的網址:

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爲

+0

does not throw MediaPlayer:setDataSource IOException happend?因爲該url不是在Android播放器將接受的格式 – therealprashant

+0

這不適用於我 – therealprashant

+0

@therealprashant我不記得在這個時候,很久以前:)。但是,一旦你有了網址,我認爲你可以根據你的需要進行格式化。 – AlexAndro

3

1.使用上述方法進行,我怎麼能拿從ByteArrayOutputStream視頻(ByteArrayOutputStream.toString()),並在VideoView播放或使用的MediaPlayer或靠近...?

也許你可以得到它通過一個ContentProvideropenFile()發佈字節數組工作。 Here is a sample project我在這裏演示如何通過自定義InputStream服務文件。

雖然媒體子系統比較挑剔,所以我不會給你很好的賠率。

2。有誰知道存儲在亞馬遜上的預覽視頻的這個問題的任何其他解決方案嗎? (我聽說在他們的IOS SDK中,他們使用URL來訪問文件...)

最後我檢查了一下,S3有一個REST API,您可以使用它來爲視頻生成URL。我會將該URL遞交到MediaPlayerVideoView

提供文件的URL並在瀏覽器中打開它沒有任何意義,因爲這些URL在wile之後過期。

但是你控制了「一個可怕的[原文如此]」的時間。讓它成爲24小時或什麼的。

+0

謝謝馬克,我會看看你提供的兩種解決方案。你知道我可以從哪裏拿到「S3 REST API」嗎?!關於URL可用性的持續時間,恐怕它是由亞馬遜控制的...... – AlexAndro

+0

@AlexAndro:「關於URL可用性的持續時間,我恐怕它是由亞馬遜控制的」 - 我保證你知道它不是。我自己從Ruby API控制它,使我的書可供下載給訂閱者。此外,您可以在S3 Explorer for Firefox等瀏覽器中看到有時間限制的網址。您正在查找IIRC文檔中的「預先簽名的URL」。 「你知道我可以在哪裏把」S3 REST API「從」 - 你不需要它,因爲Java API有'generatePresignedUrl()',你可以使用它。 – CommonsWare

相關問題