Это началось как простое использование ActiveStorage, просто сохраните некоторые аудиофайлы в формате mp3 (сделано легко) и отобразите их на сайте:
<%= audio_tag url_for(recording.audio_file), controls: true, preload: "none" %>
Я тестировал в Chrome и Firefox, и он работает, я могу без проблем воспроизводить звук столько раз, сколько захочу, но когда я тестировал его в Safari, я столкнулся с проблемой, что Safari предполагает, что сервер поддерживает Content-Range, поэтому Safari думает, что это является прямой трансляцией, и элемент 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 принимает запрос диапазона байтов с помощью метода send_data или send_file), что кажется полезным, но может показаться, что это должно быть проще и не должно требовать от меня изменить реализацию ActiveStorage.
- Итак, последняя возможность заключается в том, что я не понимаю концепцию того, как все сплетено вместе, и ответ, вероятно, прост и легко реализуем, поэтому в Интернете нет информации, потому что это очевидно, но я не могу понять это из.
Кто-нибудь может подсказать, как использовать ActiveStorage для хранения и передачи звука, который можно представить с помощью аудиотега html5, который работает в Chrome, FireFox и Safari.
Спасибо за вашу помощь.
send_data
использоватьsend_file
, и это было исправлено в основной ветке rails, см.:(github.com/rails/rails/blob/master/activestorage/app/), так что это вопрос просто жду. - person Derik Ramirez   schedule 19.06.2018file_status, file_headers, file_body = Rack::File.new(nil).serving(request, path) response.status = file_status response.headers.merge!(file_headers) self.response_body = file_body
- person Derik Ramirez   schedule 21.06.2018