【问题标题】:How to play audio files served from Rails / Active Storage如何播放 Rails / Active Storage 提供的音频文件
【发布时间】:2019-01-05 01:48:51
【问题描述】:

我有一个接受音频文件上传的模型(使用 Rails 5.2.2,active_storage)。为了进行测试,我创建了一个视图,为每个视图创建了一个播放按钮:

<% @page.uploads.each do |upload| %>
    <div class="player btn btn-outline-secondary">
        <%= audio_tag rails_blob_url upload %>
        Play
    </div>
<% end %>

<script>  
$(document).ready(function() {
    $(".player").click(function() {
        $(this).children('audio')[0].play();
    });
});          
</script>

这很好用,但 5 分钟后它停止工作,点击按钮不再播放声音,必须刷新页面才能再次工作。 (至少在 Chrome 和 FireFox 中,Safari 似乎可以继续工作)。

我认为这与活动存储生成的重定向 URL 在 5 分钟后过期有关......但我认为 rails_blob_url 总是返回一个新的 URL 到文件。这看起来像是正确的方法,还是我遗漏了什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5


    【解决方案1】:

    您可以像这样更改活动存储的到期时间

    # config/initializers/active_storage.rb
    ActiveStorage::Service.url_expires_in = 1.hour
    

    【讨论】:

    • 谢谢。它似乎可以工作,因为看起来浏览器正在预加载,然后在 URL 过期后再次尝试。我发现的另一个解决方案是添加 .load();在 .play() 之前;这会强制从头开始加载,尽管会增加一些延迟。最后我开始使用 howler.js 库来播放效果很好的声音。
    猜你喜欢
    • 2020-09-17
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 2016-06-29
    • 1970-01-01
    相关资源
    最近更新 更多