เล่นไฟล์วิดีโอในเครื่อง (ฮาร์ดไดรฟ์) ด้วยแท็กวิดีโอ HTML5 หรือไม่


91

ฉันต้องการบรรลุสิ่งต่อไปนี้

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

จุดประสงค์คือผู้ใช้จะสามารถเลือกไฟล์จากฮาร์ดไดรฟ์ของตนได้

และเหตุผลที่ไม่อัปโหลดก็คือค่าใช้จ่ายในการส่งและโควต้าพื้นที่จัดเก็บ จะไม่มีเหตุผลที่จะบันทึกไฟล์

เป็นไปได้ไหม?


มันใช้ไม่ได้กับการป้อนไฟล์อย่างแน่นอน อาจใช้งานได้กับ HTML5 ondrop แต่ฉันไม่คิดว่าคุณจะใช้ประโยชน์จากสิ่งนั้นในการอัปโหลดไฟล์ได้ ทางออกที่ดีที่สุดของคุณคือการใช้ส่วนขยาย Chrome
Brian Nickel

คำตอบ:


245

เป็นไปได้ที่จะเล่นไฟล์วิดีโอในเครื่อง

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

เมื่อไฟล์ถูกเลือกผ่านinputองค์ประกอบ:

  1. เหตุการณ์ "เปลี่ยนแปลง" เริ่มทำงาน
  2. รับวัตถุไฟล์แรกจากinput.files FileList
  3. สร้างURL ของวัตถุที่ชี้ไปที่วัตถุไฟล์
  4. ตั้งค่า URL ของวัตถุเป็นvideo.srcคุณสมบัติ
  5. เอนหลังดู :)

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


สิ่งนี้ใช้ได้กับฉันใน Chrome บน Mac ใช้ไม่ได้กับซาฟารี 6.1
Patrick Cullen

1
ดูเหมือนว่าจะมีปัญหาที่ทราบเกี่ยวกับซาฟารี: stackoverflow.com/questions/19088400/… และ bugs.webkit.org/show_bug.cgi?id=101671
Patrick Cullen

ทางออกที่ยอดเยี่ยมมันยังใช้งานได้กับ Chrome สำหรับ Windows
JT Taylor

มีใครทำงานในการจัดหน้าเข้าและออกส่วนของวิดีโอที่เหมาะสมเพื่อไม่ให้ทำลายหน่วยความจำของเบราว์เซอร์สำหรับวิดีโอขนาดใหญ่หรือไม่?
Eric Bloch

ไม่สามารถดูตัวอย่างไฟล์. mov หรือ. avi ถามคำถามได้ที่นี่: stackoverflow.com/questions/32599806/…
mpsbhat

11

ซึ่งจะเป็นไปได้ก็ต่อเมื่อไฟล์ HTML ถูกโหลดด้วยfileโปรโตคอลจากฮาร์ดดิสก์ของผู้ใช้ภายในเครื่อง

หากหน้า HTML ให้บริการโดย HTTP จากเซิร์ฟเวอร์คุณจะไม่สามารถเข้าถึงไฟล์ในเครื่องใด ๆ โดยระบุในsrcแอตทริบิวต์ด้วยfile://โปรโตคอลเนื่องจากจะหมายความว่าคุณสามารถเข้าถึงไฟล์ใด ๆ บนคอมพิวเตอร์ของผู้ใช้โดยที่ผู้ใช้ไม่ทราบว่าจะเป็น ความเสี่ยงด้านความปลอดภัยอย่างมาก

ดังที่ Dimitar Bonev กล่าวไว้คุณสามารถเข้าถึงไฟล์ได้หากผู้ใช้เลือกโดยใช้ตัวเลือกไฟล์ด้วยตัวเอง หากไม่มีขั้นตอนนั้นเบราว์เซอร์ทั้งหมดจะถูกห้ามด้วยเหตุผลที่ดี ดังนั้นในขณะที่คำตอบของเขาอาจพิสูจน์ได้ว่ามีประโยชน์สำหรับคนจำนวนมาก แต่ก็คลายความต้องการจากรหัสในคำถามเดิม


โซลูชันของ Dimitrov Bonev แสดงให้เห็นว่าโซลูชันนี้ไม่ถูกต้อง - คุณสามารถเข้าถึงไฟล์ในเครื่องผ่านประเภทอินพุต = ไฟล์
JT Taylor

1
วิธีแก้ปัญหาของเขาจะใช้ได้ก็ต่อเมื่อคุณปล่อยให้ผู้ใช้เลือกไฟล์ก่อน คุณยังไม่สามารถตั้งชื่อเส้นทางไปยังไฟล์ในซอร์ส HTML (ตามที่ระบุไว้ในคำถาม) และเข้าถึงด้วยวิธีนั้น ดังนั้นวิธีแก้ปัญหาของเขาในทางเทคนิคสำหรับคำถามอื่น
Holger เพิ่ง

เครื่องเล่น vlc ยังสามารถเล่นไฟล์ใดก็ได้บนคอมพิวเตอร์ แต่ก็มีความเสี่ยงด้านความปลอดภัยเช่นกัน สามารถดาวน์โหลดไฟล์จากฮาร์ดดิสก์ของเราไปยังเซิร์ฟเวอร์โดยที่เราไม่สังเกตเห็นว่าต้องการหรือไม่? เหตุใดจึงไม่มีความเสี่ยงด้านความปลอดภัย? ในกรณีที่เลวร้ายที่สุดผู้ใช้อาจได้รับอนุญาตให้ยอมรับด้วยตนเองหากเขาอนุญาตให้เบราว์เซอร์เล่นไฟล์ เนื่องจากมีสถานการณ์ที่ผู้ใช้เชื่อถือเพจได้ 100% เนื่องจากผู้ใช้เป็นคนที่ทำงานใน บริษัท เดียวกับผู้สร้างเว็บ
Dariux

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 () ใช้ได้ผลสำหรับฉัน
Derek Wade

ยังสามารถทำกับเว็บเซิร์ฟเวอร์ใด ๆ ในคอมพิวเตอร์ของผู้ใช้เช่น apache หรือพังพอน
Dariux
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.