使用HTML5视频标记播放本地(硬盘)视频文件?

chr*_*ris 80 video html5 offline html5-video

我想实现以下目标.

<video src="file:///Users/username/folder/video.webm">
</video>
Run Code Online (Sandbox Code Playgroud)

目的是用户将能够从他/她的硬盘驱动器中选择文件.

不上传的原因当然是传输成本和存储配额.没有理由保存文件.

可能吗?

Dim*_*nev 222

可以播放本地视频文件.

<input type="file" accept="video/*"/>
<video controls autoplay></video>
Run Code Online (Sandbox Code Playgroud)

通过input元素选择文件时:

  1. 'change'事件被解雇了
  2. FileList获取第一个File对象input.files
  3. 创建一个指向File对象的对象URL
  4. 将对象URL设置为video.src属性
  5. 精益回望:)

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

  • 帽子了.太棒了! (5认同)

Hol*_*ust 8

只有当HTML文件也加载file了本地用户的硬盘协议时,才有可能实现这一点.

如果HTML页面是由服务器的HTTP提供的,则您无法通过在src具有file://协议的属性中指定它们来访问任何本地文件,因为这意味着您可以访问用户计算机上的任何文件而用户不知道哪个文件是巨大的安全风险.

正如Dimitar Bonev所说,如果用户使用自己的文件选择器选择文件,则可以访问该文件.没有这一步,所有浏览器都禁止它,原因很充分.因此,尽管他的回答可能对许多人有用,但它会放松原始问题中代码的要求.

  • 好吧,他的解决方案仅在您让用户先选择文件时才有效。您仍然无法在 HTML 源代码中命名文件的路径(如问题中所述)并以这种方式访问​​它。因此,他的解决方案在技术上是针对另一个问题的。 (2认同)

jco*_*hea 6

不久前就遇到了这个问题.由于安全设置,网站无法访问本地PC上的视频文件(真的可以理解)只有我可以绕过它的方法是在本地PC(server2Go)上运行一个网络服务器,所有对网络视频文件的引用都是本地主机/ video.mp4

<div id="videoDiv">
     <video id="video" src="http://127.0.0.1:4001/videos/<?php $videoFileName?>" width="70%" controls>
    </div>
<!--End videoDiv-->
Run Code Online (Sandbox Code Playgroud)

不是一个理想的解决方案,但为我工作.

  • 如果将文件复制到缓存位置并将视频源的路径设置为缓存位置,则会播放该文件.将文件复制到context.getExternalCacheDir().getAbsolutePath().适合我. (2认同)

xer*_*mus 5

我试图尽可能简化Dimitar Bonev的答案。

<html>
<head>
<title>HTML5 local video file player example</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>HTML5 local video file player example</h1>
<input type="file" accept="video/*"><br>
<video controls></video>
<script type="text/javascript">
 (function localFileVideoPlayer() {
   'use strict'
   var playSelectedFile = function(event) {
   var file = this.files[0]
   var URL = window.URL || window.webkitURL 
   var fileURL = URL.createObjectURL(file)
   var videoNode = document.querySelector('video')
   videoNode.src = fileURL
   }
  var inputNode = document.querySelector('input')
  inputNode.addEventListener('change', playSelectedFile, false)
 })()
</script>
<p>I hereby signed confess solemnly that I have no idea what this code does. But it now works. 
<p>Firefox Lubuntu 18.03
<p>Simplified: `http://jsfiddle.net/dsbonev/cCCZ2/` `/sf/users/48391591/`
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我知道你想避免关于宗教的无用争吵。但无论如何,我希望我可以(私下)感谢上帝这段疯狂的代码能够工作,不是吗?:-) (2认同)