MP4 Video - Safari -> Cloudflare -> nginx -> Rails = No Play - PullRequest
0 голосов
/ 24 мая 2018

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

В настоящее время это Cloudflareвозвращая 200, а не 206, но я не совсем уверен, что в других местах все настроено правильно.

Это мой метод контроллера Rails, который обслуживает видео:

def videos file_name = params.fetch(:filename, '') file_path = "#{Rails.root}/app/assets/videos/#{file_name}.#{params.fetch(:extension, '')}" raise ActionController::RoutingError, 'Not Found' unless file_name.index('/').nil? && File.exist?(file_path) send_file(file_path, type: 'video/mp4', disposition: 'inline', status: (request.headers['Range'].present? ? 206 : 200)) end

По сути, он проверяет, есть ли какие-либо / в имени файла (во избежание проблем с безопасностью ... все видео, обслуживаемые таким образом, находятся в одной папке на сервере),и убедитесь, что файл существует, затем использует send_file для его доставки, и, если присутствует заголовок Range, возвращает состояние 206, в противном случае - 200.

Я думаю, что это правильно ... и конфигурация nginxочень просто, в основном, просто проходя через Puma, но я не совсем понимаю, что это имеет значение, так как заголовок «Range», кажется, не проходит через Cloudflare к моей подачеr, независимо (я сбросил заголовки и ничего не увидел в 'Range').

Кодировка правильная, тип content / mime верный, он отлично работает в Chrome и Firefox, все выглядит великолепно, кромеон просто не играет в Safari.

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

Как мне заставить эту глупость работать в Safari?

...