它最初是 ActiveStorage 的一个简单用途,只需以 mp3 格式存储一些音频文件(轻松完成)并将其显示在网站上:
<%= audio_tag url_for(recording.audio_file), controls: true, preload: "none" %>
我在 Chrome 和 Firefox 上进行了测试,它可以正常工作,我可以随意播放音频,但是当我在 Safari 上测试它时,我遇到了 Safari 假设服务器支持 Content-Range 所以 Safari 认为它的问题是一个 Live Stream 并且 html5 元素只能播放一次。
所以我一直在互联网上搜索如何解决这个问题,我看到的答案指向:
- 网络服务器不支持它,但我使用的是 Apache 2.4,从 2.2 开始,它默认支持 Content-Range。
- Safari是垃圾,对我没有帮助
- 你应该在 Rails 上实现它,是的,这可能是一个解决方案,但我检查了 ActiveStorage 的代码(https://github.com/rails/rails/blob/master/activestorage/lib/active_storage/service/disk_service.rb# L41)但我必须更改它(我发现这个答案rails media file stream accept byte range request through send_data or send_file method)这似乎很有帮助,但似乎它应该更容易并且不应该要求我更改ActiveStorage 的实现。
- 所以最后一种可能性是我不理解一切如何编织在一起的概念,答案可能简单易行,这就是为什么互联网上没有信息,因为它很明显,但我真的不知道出来。
任何人都知道如何使用 ActiveStorage 存储和提供可以使用适用于 Chrome、FireFox 和 Safari 的 html5 音频标签呈现的音频。
谢谢你的帮助。