Это возможно при использовании заголовка HTTP «Content-range». Этот заголовок гласит: «Пожалуйста, просто дайте мне байты отсюда сюда и игнорируйте все остальное». Если веб-сервер настроен на их обработку (например, Apache), вы получите ответ 206 с телом только этих байтов.
Вы должны создать небольшое прокси-приложение, которое эффективно действует как шлюз между слушателем и Amazon.
Чтобы узнать, ответит ли ваш хост, попробуйте это из командной строки:
curl -v -I http://www.mfiles.co.uk/mp3-downloads/01-Tartaros%20of%20light.mp3
Где URL-адрес один из ваших. Если вам повезет, вы увидите:
Accept-Ranges: bytes
Content-Length: 5284483
Это означает, что сервер принимает заголовок Content-range и полная длина файла составляет 5284483 байта.
Давайте запросим первую треть файла:
curl -H'Range: bytes=0-1761494' http://www.mfiles.co.uk/mp3-downloads/01-Tartaros%20of%20light.mp3 > /tmp/test1.mp3
Теперь вы сможете воспроизводить /tmp/test1.mp3 и прослушивать первую треть трека.
Следующим шагом является создание прокси-приложения. Хорошим подходом было бы использовать https://github.com/aniero/rack-streaming-proxy, но вам, вероятно, нужно было бы разветвить проект для отправки заголовка Range: bytes = 0-1761494. Или взгляните на Синатру.
Преимущество здесь в том, что, поскольку вы используете прокси-сервер на удаленном сервере, вы можете скрыть фактический URL-адрес файла, имея простую таблицу базы данных с идентификатором для каждого файла. Я бы предложил написать небольшой скрипт, который также хранит длину байта каждого файла, чтобы вам не приходилось вычислять диапазон для каждого запроса.
Таким образом, GET для "/ preview / 12345" прокси "http://amazon.com/my_long_url" и выдаст вам только первую треть файла.
Кроме того, вы можете разместить Varnish перед вашим собственным сервером, который будет кэшировать эти частичные MP3-файлы и означать, что вам не нужно постоянно возвращаться в Amazon, чтобы получить файлы.