Riproduci file video locale (disco rigido) con tag video HTML5?


91

Voglio ottenere quanto segue.

<video src="file:///Users/username/folder/video.webm">
</video>

L'intento è che l'utente possa selezionare un file dal proprio disco rigido.

E il motivo per non caricare è ovviamente i costi di trasmissione e la quota di archiviazione. Non ci sarà alcun motivo per salvare il file.

È possibile?


Sicuramente non funzionerà con un input di file. Potrebbe funzionare con HTML5 ondrop, ma non credo che tu possa sfruttarlo per caricare un file. La soluzione migliore sarebbe probabilmente fare un'estensione di Chrome.
Brian Nickel

Risposte:


245

È possibile riprodurre un file video locale.

<input type="file" accept="video/*"/>
<video controls autoplay></video>

Quando un file viene selezionato tramite l' inputelemento:

  1. viene generato l'evento "change"
  2. Ottieni il primo oggetto File da input.files FileList
  3. Crea un URL oggetto che punti all'oggetto File
  4. Imposta l'URL dell'oggetto sulla video.srcproprietà
  5. Rilassati e guarda :)

http://jsfiddle.net/dsbonev/cCCZ2/embedded/result,js,html,css/


Questo funziona per me in Chrome su un Mac. Non funziona con Safari 6.1
Patrick Cullen


Ottima soluzione, funziona anche su Chrome per Windows.
JT Taylor

Qualcuno ha fatto il lavoro per inserire ed estrarre porzioni di video appropriate in modo da non uccidere la memoria del browser per video di grandi dimensioni?
Eric Bloch

Incapace di anteprima .mov o .avi file ha fatto la domanda qui: stackoverflow.com/questions/32599806/...
mpsbhat

11

Ciò sarà possibile solo se il file HTML viene caricato anche con il fileprotocollo dal disco rigido dell'utente locale.

Se la pagina HTML è servita da HTTP da un server, non è possibile accedere a nessun file locale specificandoli in un srcattributo con il file://protocollo poiché ciò significherebbe che è possibile accedere a qualsiasi file sul computer dell'utente senza che l'utente sappia quale sarebbe un enorme rischio per la sicurezza.

Come ha detto Dimitar Bonev, puoi accedere a un file se l'utente lo seleziona utilizzando un selettore di file da solo. Senza questo passaggio, è vietato da tutti i browser per buone ragioni. Pertanto, sebbene la sua risposta possa rivelarsi utile per molte persone, allenta i requisiti dal codice nella domanda originale.


La soluzione di Dimitrov Bonev mostra che questa soluzione non è corretta: puoi accedere ai file locali tramite input type = file.
JT Taylor

1
Bene, la sua soluzione funziona solo se consenti all'utente di selezionare prima il file. Non è ancora possibile denominare il percorso del file nel codice sorgente HTML (come indicato nella domanda) e accedervi in ​​questo modo. Quindi, la sua soluzione è tecnicamente per un'altra domanda.
Holger solo il

Il lettore vlc può anche riprodurre qualsiasi file sul computer, ma quindi c'è anche un rischio per la sicurezza. Può scaricare file dal nostro disco rigido ai loro server senza che ce ne accorgiamo se lo desiderano, no? Allora perché non ci sono rischi per la sicurezza? Nel peggiore dei casi all'utente potrebbe essere consentito di accettare manualmente se consente al browser di riprodurre il file. Perché ci sono situazioni in cui l'utente si fida al 100% della pagina, perché gli utenti sono quelli che lavorano nella stessa azienda dei creatori di siti web.
Dariux

6

Mi sono imbattuto in questo problema qualche tempo fa. Il sito Web non poteva accedere al file video sul PC locale a causa delle impostazioni di sicurezza (comprensibile in realtà) L'UNICO modo in cui potevo aggirare il problema era eseguire un server Web sul PC locale (server2Go) e tutti i riferimenti al file video dal Web erano al localhost / video.mp4

<div id="videoDiv">
     <video id="video" src="http://127.0.0.1:4001/videos/<?php $videoFileName?>" width="70%" controls>
    </div>
<!--End videoDiv-->

Non è una soluzione ideale ma ha funzionato per me.


2
Se copi il file in una posizione cache e imposti il ​​percorso della sorgente video su di esso, verrà riprodotto. Copia il file in context.getExternalCacheDir (). GetAbsolutePath (). Per me va bene.
Derek Wade

può anche fare con qualsiasi server web nel computer degli utenti come apache o mongoose
Dariux
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.