mp3 фрагменты на s3 - PullRequest
       20

mp3 фрагменты на s3

3 голосов
/ 06 декабря 2010

Мне нужно решение для воспроизведения сегмента mp3.У меня есть несколько тысяч аудиофайлов, которые в настоящее время хранятся на Amazon S3, и я хотел бы разрешить пользователям воспроизводить их, однако я хотел бы ограничить продолжительность воспроизведения 30 секунд или около того в середине записи.

Я не уверен, нужно ли мне создавать совершенно новый файл (фрагмент), такой как для миниатюры, если бы это было изображение, или если возможно использовать какой-нибудь плеер / steam, чтобы безопасно ограничить его таким образом, чтобы они не моглиполучить доступ ко всей песне.

Я пришел из среды Rails и использую Paperclip для обработки файлов и JPlayer для их воспроизведения, если это имеет значение.

Какие-нибудь указатели или лучшие практики?

Ответы [ 4 ]

4 голосов
/ 29 декабря 2010

Это возможно при использовании заголовка 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, чтобы получить файлы.

0 голосов
/ 24 декабря 2010

Я думаю, что проще решить проблему на стороне клиента.

Используете ли вы flash для воспроизведения аудиофайлов?

Если да, я сделал что-то подобное (но свидео) с использованием JWPlayer (он также поддерживает аудио файлы).

Вы можете разработать собственный плагин для управления фрагментом, который хотите воспроизвести, а затем остановить аудиофайл и показать сообщение или что-то в этом роде.

Это решение в сочетании с подписанными URL-адресами или / ипотоковая передача RTMP с CloudFront может быть очень безопасной.

0 голосов
/ 24 декабря 2010

Из-за ограничения формата mp3 вы не можете искать произвольный кадр в середине песни и начинать передачу с этой точки.

Итак, в основном есть три варианта:

И никогда не передавайте больше, чем вам нужно: люди смогут перехватитьпоток и сохранить его на диск (бизнес-сторона);сохранить трафик ваших пользователей (хорошая карма).

0 голосов
/ 24 декабря 2010

К сожалению, вам нужно будет сделать новые фрагменты - на самом деле нет способа сказать браузеру пользователя «скачать весь этот mp3-файл, но только воспроизводить и разрешать доступ к середине 30 секунд».

...