Потоковая передача аудио из AWS в приложение Rails с использованием Fog/Carrierwave

У меня есть приложение Rails, которое позволяет пользователю загружать mp3 в свою модель профиля, а затем сохранять его в AWS S3. Я пытаюсь выяснить, как установить соединение через Fog и транслировать их песню при нажатии, аналогично функциональности Soundcloud или Bandcamp. Я просматривал документы Fog и подобные сообщения, но застрял. Думаю, мне нужно использовать send_file, но я не уверен. Любая информация будет принята с благодарностью. Я планирую использовать jplayer или что-то подобное для воспроизведения звука, просто нужно, чтобы это соединение происходило по щелчку.

ОБНОВЛЕНИЕ:

В настоящее время я пытаюсь реализовать что-то для этого в своем контроллере профиля, следуя этому документу http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/Bucket.html

 bucket = s3.buckets.create('name', :grants => {
  :grant_read => [
    { :uri => "http://acs.amazonaws.com/groups/global/AllUsers" },
  ],
  :grant_full_control => [
    { :id => 'abc...mno' }               # cannonical user id
    { :email_address => '[email protected]' }, # email address
  ]
})

На мой взгляд, у меня есть следующее, просто чтобы мне было на что смотреть и с чем работать.

 <audio id="song" class="audio_player" controls="false" preload="true">
   <source src="/audios/ignite.mp3" type="audio/mpeg">
 </audio>

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


person Danny Sullivan    schedule 14.10.2014    source источник
comment
не могли бы вы показать нам что-то, что вы пробовали?   -  person Richlewis    schedule 14.10.2014
comment
@Richlewis, спасибо за внимание. Я добавил обновление к исходному сообщению. Я изучаю создание какого-то «аутентифицированного получения/чтения». Это звучит правильно? Идея состоит в том, чтобы пользователь мог прокручивать и слушать разные mp3 по своему желанию.   -  person Danny Sullivan    schedule 14.10.2014


Ответы (1)


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

Все сказанное, если действительно важно, чтобы он исходил с вашего сервера (вместо S3), вы можете захотеть настроить CNAME на S3, чтобы он все еще обслуживался оттуда, но появится исходить из поддомена вашего хоста (или аналогичного). Надеюсь, это поможет указать вам правильное направление, но дайте мне знать иначе, и я могу попытаться добавить дополнительную конкретику. Спасибо!

person geemus    schedule 15.10.2014
comment
Спасибо, @geemus, мне будет работать прямая ссылка на URL. Я пытался сделать это более сложным :) Еще раз спасибо. - person Danny Sullivan; 16.10.2014
comment
Рад помочь. Прямые ссылки — заманчивый/очевидный подход, но, в конце концов, вы обычно не хотите связывать часть своего собственного сервера на время. К счастью, именно в этом преуспевают службы хранения вариантов использования. Хорошо, что это вернуло вас в нужное русло! - person geemus; 16.10.2014
comment
Спасибо @geemus, просто чтобы немного прояснить собственное понимание. Это было так же просто, как вызвать user.profile.audio, чтобы получить ссылку на аудиофайл, которая отлично работает. Есть ли смысл в этом подходе? Кажется, я действительно пытался все усложнить раньше. - person Danny Sullivan; 16.10.2014
comment
Это немного зависит от специфики вашей реализации, но да, я думаю, что что-то в этом роде, вероятно, вам нужно. - person geemus; 17.10.2014