Имею относительно небольшой ресурс (1500 чел/день) для поиска и прослушивания музыки. На заре его проектирования я, разумеется, не хотел отдавать винты своего хостера за откровенный хлам современной эстрады для маленьких девочек, и поэтому реализовал выдачу музыки прямо из небезизвестной маргинальной социальной сети. Алгоритм прост: по крону через API контакта добавляем в БД данные новых песен и в том числе их контактовый ID. Когда юзер хочет прослушать песню в плеере - API ломится в контакт и по ID этой песни получает ее прямую ссылку для скачивания. Это приходится делать каждый раз, ибо такая ссылка привязана к IP юзера. Плеер качает данные по этой ссылке курлой (то есть сам плеер просто выкачивает ее для прослушивания из контакта в поток), и юзера вообще не знают, что мой ресурс - всего лишь прокладка для ВК :/
Вся эта конструкция работает отлично, но есть одно важное "но": разумеется такие дела жестко разводят моего хостера на траф, за что уже в начале каждого месяца он урезает мне канал, не смотря на то, что у меня VPS. Это еще ничего, многие хостеры за такое и вовсе отказываются сотрудничать!)
Вот я и хотел бы спросить, можно ли как то отдавать юзерам музло для прослушивания в плеере напрямую из ВК, не закачивая ее ко мне на сервер? Смотрел известные решения для такого, но они все отдают все курлой. У буржуйского грувшарка имеется отличный jQuery-плеер, и поэтому абсолютно кастомный, но его php-скрипт тоже отдает все курлами. Насчет Spotify не знаю, не смотрел просто... А сокеты тоже трафик жрут?
Помнится когда интернет был еще не безлимитный, приходилось всем объяснять мол скачать песню стоит 4 мегабайта = 4 рубля. Фильм - 700 рублей. И каждый спрашивал "А если я не буду качать, а просто послушаю/посмотрю?"
Здравствуй, собрат по несчастью :)
У меня аналогичная проблема, но я стал интегрироваться не с vk, а c pleer.com. К сожалению, они тоже быстро смекнули, что так трафика на всех не хватит и url-ы на песни имеют привязку к ip и access_token. Поэтому настроил проксирование с кешированием с помощью nginx (curl только для API).
Плюс в данном случае только один - не приходится качать музыку.
Но всё равно, трафик приходится пропускать через свой VPS. В принципе, я думаю, что не проблема доплатить за дополнительный трафик, если надо будет.
Хо-хооо! Приятно видеть единомышленников даже в такой узкой теме ;) Спасибо. А чем был мотивирован Ваш отказ от VK? Судя по всему он запросто может потягаться со Spotify по количеству треков)
Я правильно понял, что если ссыль на файл в плеере будет прямой, то траф тратиться не будет, или как? И зачем Вам прокси с кешированием, если все-равно траф уходит?
@Acuna у ВК ограничение на кол-во запросов слишком строгое: 3 одновременных подключения.
Ссылка в плеере формируется так же как и у ВК, то есть с привязкой к IP, а следовательно отдавать её клиентам не получится, т.к. ip фигурирует серверный.
Проксирование с кешированием решает проблему ограничения доступа по ip, экономит входящий трафик (хотя он и бесплатен) и чуть быстрее работает (не нужно формировать новое подключение к хранилищу музыки). Если интересно, могу скинуть куски конфигурации nginx.
Ого! Вот это да! Даже не знал такого про ВК! Да, это никуда не годится... Ну как-то не знаю насчет этого Простоплеера, появился ниоткуда, вдруг прямо таки тонны музыки, скромный VPN, за ним не стоит крупная корпорация... Не канул бы он в лету со своей музыкой...
И все-таки мне интересно, если ссыль без привязки к IP, то трафик по ней улетать не будет? То есть прокси решает эту проблему?
И да, просмотрел бы их с большим удовольствием! Для этого требуется только конфигурация nginx?
P. S. И да, входящий трафик лично меня не волнует, например. Получается около гига в месяц, по сравнению с 3 Тб (!) на выход.
@Acuna ну если б сервис отдавал мне ссылку без привязки к ip, то мне не пришлось бы проксировать музыку, отдавал бы напрямую клиентам. А так получается, что формирую некие постоянные url в своем сервисе, куда передается id песни, а на выходе получаю временный url к своему прокси, отдающий уже поток.
Да, php в прокси отсутствует в принципе. nginx.conf
server {
listen 80;
server_name player.domain.ru;
resolver 8.8.8.8;
location ~* ^/(s\d+.*)$ {
access_log /var/log/nginx/proxy.log;
proxy_cache cache;
proxy_cache_min_uses 1;
proxy_cache_key "$track_id"; // в url к прокси добавляем параметр track_id, чтобы был однозначный ключ для доступа в кеш
proxy_cache_valid 200 206 30m;
proxy_http_version 1.1;
proxy_set_header X-Real-IP 123.123.123.123; // vps ip на всякий случай
proxy_set_header X-Forwarded-For 123.123.123.123;// vps ip на всякий случай
proxy_set_header Host $http_host;
proxy_pass_header Range;
proxy_pass http://$1;
}
}
О, спасибо, интересно! Только у Вас плеер всегда пишет "Неверный источник", хотя качается все нормально.
Кстати, если я не ошибаюсь, у Грувшарка очень скудное API, но у них вроде ссылки пока прямые. Хотя я не уверен... Посмотрите и Вы: developers.grooveshark.com/docs/public_api/v3
P. S. Понять, что все работает как надо можно только по логам?
@Acuna спасибо, поизучаю на досуге API.
Если плеер не работает, но скачивает, то скорее всего браузер не поддерживает html5 audio с mp3 файлами. Хром и свежие FF работают без проблем, но это дело десятое :)
@akubintsev кстати, давно хотел спросить, как у Вас теперь обстоят дела с трафиком, каков расход (если конечно посещалка позволяет судить об этом :/)?
И кстати, может ли собственный выделенный сервер решить эту досадную проблему? Что с ним будет при таком мощном расходе траффика? Медленнее канал будет работать, или что?
@Acuna у меня сервис пока в стадии экспериментального тестирования, то есть о нём не все знают и пользоваться не особо удобно. Поэтому трафик просто не существенен.
Собственный сервер не решит проблему, поскольку всё равно датацентр будет выставлять счёт за исходящий трафик.
Вообще мне кажется заморачиваться нет смысла на тему трафика, если только нет среднего онлайна на сайте в день порядка 1000 человек. Сами мп3 весят мало, а плеер в браузере не требует отдачи песни на максимальной скорости канала. Можно даже в nginx ограничить скорость этого контента.
А я вот кстати давно хотел спросить, если у Вас нет привязки к IP, почему Вы не вернетесь опять на ВК, вроде он запросто может потягаться со всеми известными сервисами...
Да и этот Простоплеер... Вот они раньше музыку брали из контакта, а теперь пишут, что вся музыка отныне хранится у них. Как же это так? Они что, слили себе весь контакт?) ВК не делится своей статистикой, но если примерно прикинуть, что его база насчитывает не менее 15 млн. треков (как на Spotify, например), дак неужели какой-то Простоплеер имеет такие мощности? Места не хватит, даже если своих венчей напихать в сервак) Да и на какие шиши? Монетизации у них никакой, сервис бесплатный для юзеров, только какая-то реклама от Бегуна стоит про увеличение разных органов, и все) Но это, по своему опыту скажу, копейки.
@Acuna да честно говоря мне показалось проще интегрироваться с pleer. Музыку они пополняют регурярно по крону из ВК. Кроме того, у них есть композиции, которые ВК выпилил из-за правообладателей.
Музыку они похоже хранят на сервисах Amazon, а на счёт объемов - мне кажется там не настолько уж и много места надо.
Вопрос про их монетизацию открытый, но меня не особо волновал. Что более-менее доверие вызывает это возраст сервиса.
@akubintsev да, вполне возможно. Но ведь это тоже бы жрало трафик - постоянная перекачка музла через провайдера...
Ну как сказать немного... Например, средний размер композиции в среднем качестве составляет около 6 Мб. В ВК хранится не менее 15 000 000 записей. Значит при самых грубых расчетах получаем (15 000 000 x 6 Мб) / (1024 ^ 2) ~= 85 Тб! Задумаешься тут, не стоит ли за этим заговор гнусных масонов?)