9

Sto cercando di visualizzare video HTML5 nella mia app Rails 3 in fase di sviluppo, sto usando Sqlite3 e server web predefinito (Webrick). Ho messo il file video (film.ogg) sotto attività (assets/movie.ogg). La schermata della finestra video si presenta ma non ci sono video. Ho 3 domande ... Poiché le risorse delle app di rotaie non hanno una sottocartella per i video (come il modo in cui ha immagini), dove metti i file video? Webrick supporta il video Html5? Ecco il mio codice qui sotto, cosa mi manca qui, per far funzionare il video?HTML5 VIDEO non funziona nella mia app 3 rotaie

vista

 <video width="320" height="240" controls="controls"> 
     <source src="/assets/movie.mp4" type="video/mp4" /> 
     <source src="/assets/movie.ogg" type="video/ogg" /> 
     <source src="/assets/movie.webm" type="video/webm" /> 
     Your browser does not support the video tag. 
     </video> 

config/inizializzatori/mime_types.rb

Rack::Mime::MIME_TYPES.merge!({ 
    ".ogg"  => "application/ogg", 
    ".ogx"  => "application/ogg", 
    ".ogv"  => "video/ogg", 
    ".oga"  => "audio/ogg", 
    ".mp4"  => "video/mp4", 
    ".m4v"  => "video/mp4", 
    ".mp3"  => "audio/mpeg", 
    ".m4a"  => "audio/mpeg" 
}) 

risposta

10

L'helper video_tag crea un tag HTML 5 <video>.

Per impostazione predefinita, i file vengono caricati da pubblico/video. Per caricare da attività/video aggiungere la seguente riga al file config/application.rb:

config.assets.paths << "#{Rails.root}/app/assets/videos" 

Tag Usage:

<%= video_tag (["movie.mp4", "movie.ogg", "movie.webm"] :size => "320x240", :controls => true, :autobuffer => true) %> 
+0

Ho un modello chiamato Video che è qualcosa che l'utente crea ma devo anche essere in grado di avere video che incorporo nel sito. Quando creo questa configurazione e poi utilizzo il video_tag, l'app passa attraverso il video_controller che gli fa cercare un oggetto nella classe Video con id = "film" o qualunque sia il nome del file video. Qualche idea su come aggirare questo? – wuliwong

2

Supponendo tuo html è corretta, a meno che le cose sono radicalmente cambiate in Rails 3.1 con il nulla risorsa gasdotto contenuta nella cartella pubblica può essere servito dal server web, quindi la posizione esatta in cui archiviare i video spetta a te. In base alle tue fonti di cui sopra, dovresti mettere i tuoi video in pubblico/beni e poi confermare che i video sono stati pubblicati accedendo a http://localhost:3000/assets/movie.mp4 (oa qualsiasi altro URL di src per un video).

+0

Grazie. Ma nella cartella pubblica non c'è però una sottocartella delle risorse? – katie

+0

È necessario creare una nuova cartella denominata risorse in pubblico.Rails non viene fornito con valori predefiniti diversi da immagini, javascript e fogli di stile. –

4

La pipeline delle risorse viene utilizzata per le attività statiche. Se si aggiungono spesso file video all'app, è necessario inserirli altrove (ad esempio, public/videos o public/system/videos). Se sono davvero risorse statiche, prova prima a riavviare il server.

0

Per servire i video come attività statiche in Rails 4, il modo migliore è per utilizzare il tag video:

sufficiente creare una cartella in chiamata 'video' 'attivi' e memorizzare i video c'è:

app/assets/videos/mycoolvideo.mp4 

Poi, nel vostro punto di vista:

<%= video_tag "mycoolvideo.mp4" %> 

Se è necessario specificare l'immagine di un poster formato, o aggiungere i controlli, aggiungere (ma questo è HTML, non Rails):

<%= video_tag "mycoolvideo.mp4", width: "640", height: "480", poster: "mycoolvideo.jpg", controls: true %> 

Nota che Rails sa abilmente che l'immagine si trova nella cartella immagini, quindi è sufficiente specificare un nome, senza aggiungere immagini/o risorse/immagini/prima del nome dell'immagine.

Se si desidera passare a molti video (o per meglio dire, lo stesso video in diversi formati), passare una matrice:

<%= video_tag ["mycoolvideo.mp4", "mycoolvideo.ogg", "mycoolvideo.webm"], size: "620x480", controls: true %> 

Si noti che per il dimensionamento è possibile sia utilizzare dimensioni: "larghezzaxaltezza" ("640x360") o separatamente altezza: e larghezza: