2016-04-13 4 views
0

Мне нужно скачать (или, возможно, поток) песню из ведра Amazon s3. Проблема в том, что если песня скажет 270 секунд, я хочу начать загрузку/поток за 150 секунд в песню, а затем воспроизвести ее оттуда.Amazon s3 Загрузка музыкальных файлов быстрее

Как это сделать, используя веб-службы Amazon s3 и технологию сервлетов Java EE?

ответ

1

Используя AWS Java SDK, вы должны использовать AmazonS3Client и позвонить по телефону getObject на экземпляр GetObjectRequest. При создании запроса звоните setRange с байтом диапазона, чтобы получить. Это позволит вам получить часть файла без загрузки всего. getObject() возвращает объект S3Object, который вы можете использовать для потоковой передачи содержимого файла в музыкальный проигрыватель или локальный файл или что угодно.

Есть два Хитрость:

Одна хитрость в том, что вы, вероятно, нужно заголовок песни байтов, а также. Например. если файл находится в формате MP3, вам нужен MP3 header. Вы можете использовать тот же метод выше, чтобы получить диапазон байтов заголовка.

Другая сложная часть - как определить смещение байта в файле с нескольких секунд в песне. См. this question относительно этого. Вы можете легко оценить смещение байта, получив весь размер файла в байтах (см. getObjectMetadata), делясь на общую длину песни в секундах и умножая на количество секунд, чтобы компенсировать загрузку.

+0

Я пробовал это точно и думал об этих сложных деталях, прежде чем я задал этот вопрос. Я продолжал получать java io.eofexception, что я, похоже, не мог решить. Я попытаюсь воссоздать свой код, а затем отредактировать свой вопрос с кодом, включенным, если ошибка сохранится –

+0

Я получил его работу. Я понятия не имею, что я сделал по-другому, спасибо, но без вашего успокоения моих подозрений я бы не вернулся к нему –

+0

на самом деле это сработало, когда я установил диапазон от (0-безотносительно), но если я попробую (ничегоoverzero-безотносительно), он не работает, и я получаю javax.sound.sampled.UnsupportedAudioFileException –

Смежные вопросы