HTML5ビデオタグ付きのローカル(ハードドライブ)ビデオファイルを再生しますか?


89

以下を実現したい。

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

その目的は、ユーザーが自分のハードドライブからファイルを選択できるようにすることです。

そして、アップロードしない理由はもちろん、送信コストとストレージクォータです。ファイルを保存する理由はありません。

出来ますか?


それは間違いなくファイル入力では機能しません。HTML5オンドロップで動作する可能性がありますが、ファイルのアップロードにそれを活用できるとは思いません。あなたの最善の策はおそらくChrome拡張機能を実行することでしょう。
ブライアンニッケル

回答:


241

ローカルビデオファイルを再生することが可能です。

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

input要素を介してファイルが選択された場合:

  1. 「変更」イベントが発生します
  2. FileListから最初のFileオブジェクトを取得しますinput.files
  3. 作成したオブジェクトのURLをFileオブジェクトを指していること
  4. オブジェクトのURLをvideo.srcプロパティに設定します
  5. 身を乗り出して見てください:)

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


これは、MacのChromeで機能します。サファリ6.1では動作しません
Patrick Cullen 2013年

1
サファリには既知の問題があるようです: stackoverflow.com/questions/19088400/… および bugs.webkit.org/show_bug.cgi?id=101671
Patrick Cullen

優れたソリューションであり、Chrome forWindowsでも機能します。
JTテイラー

大きなビデオのブラウザメモリを殺さないように、ビデオの適切なチャンクをページインおよびページアウトする作業を行った人はいますか?
Eric Bloch

プレビュー.MOVまたは.AVIファイルにできませんが、ここで質問を:stackoverflow.com/questions/32599806/...
mpsbhat

11

これは、HTMLファイルにもfileローカルユーザーのハードディスクからプロトコルがロードされている場合にのみ可能になります。

HTMLページがサーバーからHTTPによって提供されている場合srcfile://プロトコルの属性でローカルファイルを指定してアクセスすることはできません。これは、ユーザーがどちらであるかを知らなくても、ユーザーのコンピューター上の任意のファイルにアクセスできることを意味します。巨大なセキュリティリスク。

Dimitar Bonevが言ったように、ユーザーが自分でファイルセレクターを使用してファイルを選択すると、ファイルにアクセスできます。その手順がないと、正当な理由ですべてのブラウザで禁止されます。したがって、彼の答えは多くの人にとって役立つかもしれませんが、元の質問のコードから要件を緩めます。


Dimitrov Bonevのソリューションは、このソリューションが正しくないことを示しています。inputtype= fileを介してローカルファイルにアクセスできます。
JTテイラー

1
彼の解決策は、ユーザーに最初にファイルを選択させた場合にのみ機能します。(質問で述べたように)HTMLソース内のファイルへのパスに名前を付けて、その方法でアクセスすることはできません。したがって、彼の解決策は技術的には別の質問に対するものです。
ホルガー2014

vlcプレーヤーは、コンピューター上の任意のファイルを再生することもできますが、セキュリティ上のリスクもあります。彼らが望むかどうか私たちが気付かないうちに、それは私たちのハードディスクから彼らのサーバーにファイルをダウンロードすることができますね?では、なぜセキュリティリスクがないのでしょうか。最悪の場合、ブラウザにファイルの再生を許可すると、ユーザーは手動で受け入れることができます。ユーザーがページを100%信頼する状況があるからです。なぜなら、ユーザーはWebクリエーターと同じ会社で働いているからです。
Darius.V 2015年

6

しばらく前にこの問題に遭遇しました。ウェブサイトはセキュリティ設定のためにローカルPC上のビデオファイルにアクセスできませんでした(本当に理解できます)それを回避する唯一の方法はローカルPC(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()にコピーします。私のために働きます。
デレクウェイド2014

また、Apacheやマングースなどのユーザーコンピューター内の任意のWebサーバーでも実行できます
Darius.V 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.