Как воспроизвести видео с Amazon S3 в приложении Android?

Я использую 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 а затем я легко преобразую его в String или Bitmap (используя ByteArrayOutputStream.toByteArray() затем используя BitmapFactory.decodeByteArray(byte[] data, int offset, int length, Options opts) ).

Таким образом, он работает с текстовыми файлами и изображениями. Моя проблема в том, когда я пытаюсь получить доступ к видео. Итак, мои вопросы:

1. Используя приведенный выше метод, как я могу получить видео от ByteArrayOutputStream ( ByteArrayOutputStream.toString() ) и воспроизвести его в VideoView или с помощью MediaPlayer или подхода …?

2. Кто-нибудь знает какое-либо другое решение этой проблемы предварительного просмотра видео, хранящегося на Amazon? (Я слышал, что на их sdk для IOS они используют URL-адреса для доступа к файлам …)

PS: Поставка URL-адреса файла и его открытие в браузере не имеет смысла, поскольку эти URL-адреса истекают после wile.

    Сначала мы должны aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo имя нашего ведра и объекта (см. aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo для aws-android-sdk-1.4.3/samples/S3_SimpleDB_SNS_SQS_Demo руководства), которое мы хотим открыть, затем 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); 

    Теперь просто воспроизведите видео в режиме просмотра видео, предоставив полученный 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()

    • Код для воспроизведения видео также вдохновлен его материалами .

    1. Используя приведенный выше метод, как я могу получить видео от ByteArrayOutputStream (ByteArrayOutputStream.toString ()) и воспроизвести его в VideoView или с помощью MediaPlayer или подхода …?

    Возможно, вы можете заставить его работать, опубликовав массив байтов через ContentProvider и openFile() . Вот пример проекта, в котором я показываю, что я обслуживаю файл с помощью пользовательского InputStream таким образом.

    Однако медиа-подсистема довольно суетлива, и поэтому я не даю вам хороших шансов на эту работу.

    2. Кто-нибудь знает какое-либо другое решение этой проблемы предварительного просмотра видео, хранящегося на Amazon? (Я слышал, что на их sdk для IOS они используют URL-адреса для доступа к файлам …)

    Последнее, что я проверил, у S3 был REST API, который вы могли бы использовать для создания URL-адресов для видео. Я VideoView бы этот URL-адрес MediaPlayer или VideoView .

    Предоставление URL-адреса файла и его открытие в браузере не имеет смысла, поскольку эти URL-адреса истекают после wile.

    Но вы контролируете, как долго «wile [sic]». Сделайте это 24 часа или еще что-то.

    Intereting Posts
    Входы, не работающие в Android Emulator Android 2D игра простой движок или фреймворк Smart App Баннеры; Windows Store приложение HTML-метатег эквивалент для Android / Google Play? Как определить и / или включить режим разработчика в Android, используя sdk? Android: обновление ListFragment с помощью notifyDataSetChanged () с пользовательским адаптером не работает Какой правильный синтаксис для определения активности в файле манифеста Размер экрана для Android Несколько общих элементов Приложение на стороне сервера Django (возможно, микро-блог) и приложение для Android-приложений – как общаться Отключить селектор ListView Android Как избежать дублирования имени контакта (данных) при загрузке контактной информации в listview? Случайное исключение NullPointerException в API Google Maps v2 Как указать действия, которые предназначены только для телефонов или планшетов на Android Yahoo Авторизация OAUTH: oauth_problem = "timestamp_refused" Ошибка инструментария из-за «java.lang.IllegalAccessError». Gradle + Espresso