Как использовать SoundManager2 для потоковой передачи из SoundCloud и создания визуализаций?

SoundManager2 получает ошибку данных, и я ничего не могу визуализировать?

or

Я не могу получить доступ к песне, доступ запрещен?

or

Это работает, когда я впервые играю, но если я приостановлю его и воспроизведу снова, я получу ошибку данных?


person Liam Bigelow    schedule 18.12.2012    source источник


Ответы (1)


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

Очевидным первым шагом является использование API для получения трека stream_url, который выглядит как http://api.soundcloud.com/tracks/69322564/stream?client_id=CLIENT_ID.

Если вы используете это в качестве URL-адреса мультимедиа в SoundCloud, вы обнаружите, что нажимаете кнопку воспроизведения, и если у вас есть визуализации, они будут работать, и все хорошо. Однако, если вы сейчас приостановите воспроизведение трека и снова нажмете кнопку воспроизведения, вы получите ошибку данных, метаданные перестанут быть доступными, а ваши визуализации сломаются. Это связано с тем, что api.soundcloud.com имеет междоменный файл, и при доступе к нему вы получаете перенаправление 3XX на ec-media.soundcloud.com. На этом сайте теперь также есть файл crossdomain.xml, однако эта надоедливая переадресация 3XX разрушает оба разрешения, поэтому вы сталкиваетесь с ошибкой.

Ответ на этот вопрос заключается в том, что вы сначала выполняете скачок перенаправления вне soundmanager2, чтобы не было перенаправления, которое сломает его. Например, в Python:

import urllib2
starturl = 'http://api.soundcloud.com/tracks/69322564/stream?client_id=CLIENT_ID'
res = urllib2.urlopen(starturl)
finalurl = res.geturl()
print finalurl

Это может быть более элегантно, но будет печатать URL-адрес, на который перенаправляет API. Этот URL будет выглядеть примерно так: http://ec-media.soundcloud.com/2j0lNF81jv9m.128.mp3?LONG_STRING&AWSAccessKeyId=ACCESS_KEY&Expires=1355864871&Signature=SIGNATURE

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

"Я сделал это, и это сработало, но теперь пишет, что файл запрещен"

Теперь обращаем ваше внимание на предыдущий адрес, в частности &Expires=1355864871. Файл, на который вы перенаправляетесь, не является постоянным, поэтому вам нужно каждый раз его захватывать. Для меня это легко, я работаю в django, поэтому я могу просто запустить python выше в своих сценариях представлений. Вам придется найти способ реализовать это в выбранном вами коде. (Должно работать и в javascript).

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

person Liam Bigelow    schedule 18.12.2012
comment
Привет, Лиам, еще раз спасибо за подробное объяснение. Кстати, вы можете принять свой ответ :-) - person Misha Reyzlin; 19.12.2012