Відтворити локальний (жорсткий диск) відеофайл із тегом відео HTML5?


89

Я хочу досягти наступного.

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

Намір полягає в тому, що користувач зможе вибрати файл зі свого жорсткого диска.

І причина не завантаження - це, звичайно, вартість передачі та квота на зберігання. Причин для збереження файлу не буде.

Це можливо?


Це точно не буде працювати з введенням файлу. Це може працювати з HTML5 ondrop, але я не думаю, що ви можете використовувати це для завантаження файлу. Найкращим варіантом було б зробити розширення Chrome.
Брайан Нікель

Відповіді:


241

Можна відтворити локальний відеофайл.

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

Коли файл вибирається через inputелемент:

  1. подія "зміни" запускається
  2. Отримайте перший об’єкт File із input.files FileList
  3. Створіть URL-адресу об’єкта, яка вказує на об’єкт «Файл»
  4. Встановіть URL-адресу об’єкта як video.srcвластивість
  5. Відкиньтесь і дивіться :)

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


Це працює для мене в chrome на mac. Не працює з сафарі 6.1
Патрік Каллен

1
Схоже , є відомі проблеми з сафарі: stackoverflow.com/questions/19088400 / ... і bugs.webkit.org/show_bug.cgi?id=101671
Патрік Каллен

Відмінне рішення, він також працює на Chrome для Windows.
JT Taylor

Хтось виконував роботу з розміщення та виведення відповідних фрагментів відео, щоб не вбивати пам’ять браузера для великих відео?
Eric Bloch,

Неможливо попереднього перегляду .mov або .avi файли На питання тут: stackoverflow.com/questions/32599806 / ...
mpsbhat

11

Це стане можливим, лише якщо файл HTML також завантажується з fileпротоколом з жорсткого диска локального користувача.

Якщо сторінка HTML обслуговується HTTP з сервера, ви не можете отримати доступ до будь-яких локальних файлів, вказавши їх в srcатрибуті разом із file://протоколом, оскільки це означало б, що ви могли отримати доступ до будь-якого файлу на комп'ютері користувачів, не користувач знаючи, який би був величезний ризик безпеки.

Як сказав Димитър Бонев, ви можете отримати доступ до файлу, якщо користувач вибере його за допомогою селектора файлів самостійно. Без цього кроку це заборонено всіма браузерами з поважних причин. Таким чином, хоча його відповідь може виявитись корисною для багатьох людей, вона послаблює вимоги з коду у вихідному питанні.


Рішення Димитрова Бонєва показує, що це рішення є неправильним - ви можете отримати доступ до локальних файлів через тип вводу = файл.
JT Taylor

1
Ну, його рішення працює лише в тому випадку, якщо ви дозволите користувачеві вибрати файл першим. Ви все ще не можете назвати шлях до файлу у джерелі HTML (як зазначено у питанні) і отримати до нього такий спосіб. Таким чином, технічно його рішення стосується іншого питання.
Holger Just

Програвач vlc також може відтворювати будь-який файл на комп’ютері, але тому існує також ризик безпеки. Він може завантажувати файли з нашого жорсткого диска на свої сервери, не помічаючи, якщо вони цього хочуть, чи не так? То чому тоді немає ризику для безпеки? У гіршому випадку їх користувачеві може бути дозволено приймати вручну, якщо він дозволяє браузеру відтворювати файл. Тому що бувають ситуації, коли користувачі на 100% довіряють сторінці, оскільки саме вони працюють в одній компанії з веб-розробниками.
Дарій. V

6

Нещодавно натрапив на цю проблему. Веб-сайт не зміг отримати доступ до відеофайлу на локальному ПК через налаштування безпеки (зрозуміло насправді) ТІЛЬКИ як я міг обійти його, це запустити веб-сервер на локальному ПК (server2Go), і всі посилання на відеофайл з Інтернету були на 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-->

Не ідеальне рішення, але працювало для мене.


2
Якщо скопіювати файл у кеш-пам’ять і встановити до нього шлях джерела відео, він відтвориться. Скопіюйте файл у context.getExternalCacheDir (). GetAbsolutePath (). Працює для мене.
Дерек Вейд,

також може мати справу з будь-яким веб-сервером на комп'ютері користувача, таким як apache або мангуст
Дарій. V
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.