Stiamo riscontrando problemi nella pubblicazione di mp4 che verranno riprodotti su un ipad utilizzando un'app predefinita di rails 3. L'mp4 viene pubblicato correttamente quando si visualizza il percorso in Chrome e altri browser su un desktop.Qual è il modo corretto di servire i file mp4 attraverso i binari su un Ipad?
Ecco il nostro codice:
file_path = File.join(Rails.root, 'test.mp4')
send_file(file_path, :disposition => "inline", :type => "video/mp4")
abbiamo colpito 0.0.0.0:3000/video/test.mp4 per visualizzare il video e sono rappresentati con non può giocare icona sulla ipad. Abbiamo provato a modificare varie intestazioni "Content-Length", "Content-Range", ecc. Ma non sembrano influenzare il risultato finale.
Abbiamo provato anche utilizzando Send_Data in una certa misura
cioè
File.open(file_path, "r") do |f|
send_data f.read, :type => "video/mp4"
end
Lo stesso video serve una raffinata dalla cartella pubblica quando viene visualizzato sul Ipad.
Qual è il modo corretto di servire i file mp4 attraverso i binari su un Ipad?
Penso che ci sia un errore fencepost nel codice. Credo che la lunghezza dovrebbe essere 'bytes.end - bytes.begin + 1' - se l'intervallo di byte è dal byte 10 al 12, dovrebbe essere 3 byte. Inoltre, se stai usando 'send_data' per qualche motivo, assicurati di impostare' Content-Length' nelle intestazioni di risposta. – tovodeverett
Grazie per questa soluzione! Ho aggiunto correzioni basate sul commento di @tovodeverett. Usando Sinatra (invece di Rails) per lo sviluppo, sono riuscito a replicare il comportamento send_data usando contrib come sinatra/streaming come segue: 'stream {| out | out.write IO.binread (percorso_file, lunghezza, offset); out.flush} ' –
Grazie per la soluzione! Abbiamo notato che per fare in modo che questo approccio funzioni in Chrome, è necessario impostare esplicitamente lo stato della risposta su '206'. –