SoundCloud + Soundmanager2 + EQData

По сути, это то же самое, что и этот вопрос, но с более подробной информацией:

Ошибка Soundcloud + SoundManager: чтение eqData потока

Итак, у меня есть визуализатор, использующий canvas / svg / what have you, который выглядит ОТЛИЧНО, когда он получает EQData из SoundCloud / SoundManager2, но происходят некоторые очень странные события, которые делают его не таким крутым.

1.) Когда вы используете SMSound.pause() или любой вариант (SoundManager.togglePause и т. д.), а затем возобновляете, все EQData / WaveformData перестают поступать в SoundManager2 и просто обнуляются.

2.) Если вы остановите трек и перезапустите его, все EQData/WaveformData остановятся.

3.) Время от времени и без предупреждения EQData/WaveformData просто перестает поступать на SM2 и визуализатор просто останавливается, если я перехожу к следующему треку, он снова запускается, но никогда не работал на 100% для песни более 30 секунд.

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

Ссылка доступна здесь: http://nikru.com/viz/. Он удален с сайта, потому что он предназначен для еще не запущенного сайта клиента, который они еще не хотят видеть публикой. :)

Любая помощь ОЧЕНЬ приветствуется.

Спасибо!


person krut    schedule 25.07.2012    source источник
comment
Я изучал потенциальную возможность того, что это проблема перенаправления или проблем с crossdomain.xml. Я верю, что это может быть и то, и другое. Прежде всего, soundcloud перенаправляет поток своих треков на настройку облачного хранилища (ec-media.soundcloud.com), которую я исправил с помощью php-файла, который разрешил бы их в их окончательный URL-адрес. Однако я обнаружил, что для их облачного хостинга нет междоменного файла: ec-media.soundcloud.com/ crossdomain.xml, что означает, что когда я пытаюсь извлечь напрямую оттуда, это не удается. Для этого может потребоваться исправление от SoundCloud ...   -  person krut    schedule 25.07.2012


Ответы (1)


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

Что происходит, когда SoundManager2 вызывает песню при первом запросе из http://api.soundcloud.com/tracks/9708215/stream?consumer_key= {ВАШ КЛЮЧ}. Это здорово, и песня может воспроизводиться, просто найдя файл crossdomain.xml на api.soundcloud.com. Что отстойно, так это то, что SoundManager2 при следующем запросе (пауза/воспроизведение или следующий/предыдущий трек) просто возвращается к тому, что он знает (это страница 301 на ec-media.soundcloud.com и, как я упоминал ранее, ec- media.soundcloud.com не имеет файла crossdomain.xml), это не очень хорошо. Мое исправление заключается в том, что каждый раз, когда я запускаю песню снова, я изменяю URL-адрес звука, чтобы включить новый аргумент ts={time}, а затем запускаю .load() в SMSound, что вызывает перезагрузку и устраняет проблему.

var $track = $(this),
    data = $track.data('track'),
    playing = $track.is('.active');
newURL  = soundManager.sounds["track_" + data.id].url.split("&ts=")[0];
newURL += "&ts=" + Math.round((new Date()).getTime() / 1000);
soundManager.sounds["track_" + data.id].url = newURL;
soundManager.sounds["track_" + data.id].load();
soundManager.sounds["track_" + data.id].url = newURL;

А затем, чтобы сэкономить на пропускной способности, когда песня приостановлена, я просто отключаю звук и сохраняю позицию, в которой песня была приостановлена. Когда они снимают паузу, я играю этот трек в том месте, где они остановились, и включаю звук... Это не очень красиво, но это лучшее, что мы можем сделать с тем, что у нас есть (я думаю).

Надеюсь, это поможет кому-то. :)

person krut    schedule 25.07.2012