ป้องกันไม่ให้ดาวน์โหลดวิดีโอ HTML5 (คลิกขวาแล้วบันทึก)


171

ฉันจะปิดการใช้งาน "บันทึกวิดีโอเป็น ... " จากเมนูคลิกขวาของเบราว์เซอร์เพื่อป้องกันไม่ให้ลูกค้าดาวน์โหลดวิดีโอได้อย่างไร

มีวิธีแก้ไขปัญหาที่สมบูรณ์กว่าที่ป้องกันไม่ให้ไคลเอ็นต์เข้าถึงพา ธ ไฟล์โดยตรงหรือไม่?


3
ฉันโหวตคำถามนี้เพราะมันถามถึงวิธีการ "ปิดการคลิกขวาเท่านั้น" สำหรับวิดีโอ HTML5 ฉันไม่แน่ใจว่ามันคล้ายกับการคลิกขวาที่ปิดใช้งานสำหรับภาพปกติหรือหากมีเทคนิคการซ้อนทับอื่น ๆ ที่สามารถนำไปใช้

3
แม้ว่าคุณจะปิดใช้งานการคลิกขวาพวกเขายังสามารถบันทึกได้จากเมนูของเบราว์เซอร์ ( File→Save As) แม้ว่าคุณสามารถปิดกั้นได้ แต่ก็สามารถดูซอร์สเพื่อค้นหา URL ของไฟล์ แม้ว่าคุณจะปิดบังบิตก็ตาม แต่พวกเขาสามารถคัดลอกมาจากแคชได้ แม้ว่าคุณจะสามารถซับซ้อน (เช่นสตรีม) พวกเขาสามารถจับภาพการรับส่งข้อมูลเครือข่ายด้วยการดมกลิ่นหรืออะไรก็ได้ ความจริงก็คือถ้าคุณส่งให้ผู้ใช้พวกเขาสามารถบันทึกได้ ไม่มีทางรอบนั้น คำถามที่คุณต้องถามคือทำไมคุณต้องหยุดมันอย่างเลวร้าย มันจำเป็นจริงๆเหรอ? มันคุ้มค่ากับความพยายามและผู้ใช้ที่ไม่เป็นมิตรหรือไม่?
Synetech

ฉันชอบ TxRegex ตอบคำถามได้ดีที่สุดในฐานะวิธีแก้ปัญหาพื้นฐานอย่างรวดเร็ว
jsherk

ฉันจะดูเฉื่อยชาที่นี่ แต่คุณกำลังโหลดคำว่า "ดาวน์โหลด" มากเกินไป แน่นอนว่าคุณต้องการอนุญาตให้ดาวน์โหลดวิดีโอ
Johan Boulé

คำตอบ:


226

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

สิ่งแรกคือสิ่งแรกคุณสามารถปิดการใช้งานcontextmenuกิจกรรมหรือ "คลิกขวา" ที่จะป้องกัน skiddie ปกติของคุณอย่างโจ๋งครึ่มริปวิดีโอของคุณโดยการคลิกขวาและบันทึกเป็น แต่พวกเขาก็สามารถปิดการใช้งาน JS และหลีกเลี่ยงปัญหานี้หรือค้นหาแหล่งวิดีโอผ่านดีบักเกอร์ของเบราว์เซอร์ บวกนี่คือ UX ที่ไม่ดี มีหลายสิ่งที่ถูกต้องตามกฎหมายในเมนูบริบทมากกว่าเพียงแค่บันทึกเป็น

คุณสามารถใช้ไลบรารีเครื่องเล่นวิดีโอที่กำหนดเองได้เช่นกัน ส่วนใหญ่ใช้เครื่องเล่นวิดีโอที่ปรับแต่งเมนูบริบทตามที่คุณต้องการ ดังนั้นคุณจะไม่ได้รับเมนูบริบทเบราว์เซอร์เริ่มต้น และหากเคยให้บริการรายการเมนูที่คล้ายกับ Save As คุณสามารถปิดใช้งานได้ แต่อีกครั้งนี่เป็นวิธีแก้ปัญหาของ JS จุดอ่อนคล้ายกับตัวเลือกก่อนหน้า

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

อีกเทคนิคหนึ่งคือการวาด<video><canvas>บน ในเทคนิคนี้กับบิตของ JavaScript, สิ่งที่คุณเห็นบนหน้าเว็บเป็นองค์ประกอบการแสดงผลภาพจากที่ซ่อนอยู่<canvas> <video>และเพราะมันเป็น<canvas>เมนูบริบทจะใช้<img>เมนู 's ไม่<video>' s คุณจะได้รับการบันทึกภาพเป็นแทนการบันทึกวิดีโอเป็น

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

ในตอนท้ายของวันฉันจะอัปโหลดวิดีโอของฉันไปยังเว็บไซต์วิดีโอของบุคคลที่สามเช่น YouTube หรือ Vimeo พวกเขามีเครื่องมือการจัดการวิดีโอที่ดีเพิ่มประสิทธิภาพการเล่นให้กับอุปกรณ์และพวกเขาใช้ความพยายามในการป้องกันไม่ให้วิดีโอของพวกเขาถูกฉีกขาดโดยไม่มีความพยายามใด ๆ


1
ขอบคุณสำหรับคำตอบรายละเอียดอย่างน้อยเป็นไปได้อย่างน้อยปิดการใช้งานบันทึกเป็นตัวเลือกจากเมนูคลิกขวา มันจะครอบคลุมกรณีความรู้พื้นฐานส่วนใหญ่
หลาม

2
ขึ้นอยู่กับเบราว์เซอร์ ฉันเคยเห็นครั้ง (โดยเฉพาะ firefox และ chrome) ว่าหากวิดีโอโหลดเต็มเมื่อคุณกด "บันทึก" พวกเขาเพียงแค่เลือกวิดีโอจากแคชแทนการดาวน์โหลดอีกครั้ง (วิดีโอถูกดาวน์โหลดในแคชแล้วทำไมต้องดาวน์โหลด อีกครั้ง?) ดังนั้นจึงไม่มีคำขอที่สอง วิธีการด้านบนใช้ได้เฉพาะเมื่อมีการใช้งานลิงก์อีกครั้ง
Joseph

1
ฉันพบบทความที่พูดถึงการซ้อนแท็กวิดีโอด้วย div อัปเดตคำตอบของฉัน
Joseph

2
ขอบคุณ ผมแค่อ่านcraftymind.com/factory/html5video/CanvasVideo.html แนวคิดนี้เกือบจะเหมือนกับคำตอบของคุณ
Trung

1
@Cupidvogel "onetime use url" เป็นปลายทางของเซิร์ฟเวอร์ซึ่งยอมรับโทเค็นของเซิร์ฟเวอร์ที่สร้างขึ้น โทเค็นถูกสร้างขึ้นเมื่อสร้างหน้าเว็บและบันทึกลงใน db นอกจากนี้ยังมาพร้อมกับหน้าเป็นของsrc <video>เมื่อหน้าของคุณโหลดแล้ว db จะมีโทเค็นหน้านั้นจะมีโทเค็น เมื่อ<video>เริ่มโหลด (เข้าถึงจุดสิ้นสุด) เซิร์ฟเวอร์จะตรวจสอบว่าโทเค็นนั้นอยู่ใน db หรือไม่และลบไฟล์นั้นและสตรีมไฟล์ หากโทเค็นไม่ได้อยู่ที่นั่นอันเป็นผลมาจากการเข้าถึงครั้งที่สองแล้วอย่าสตรีมไฟล์
โจเซฟ

118

นี่เป็นทางออกที่ง่ายสำหรับผู้ที่ต้องการเพียงแค่คลิกขวาที่ตัวเลือก "บันทึก" จากวิดีโอ html5

$(document).ready(function(){
   $('#videoElementID').bind('contextmenu',function() { return false; });
});

นั่นวิเศษมาก! มันเป็นงานที่ยอดเยี่ยมในการป้องกันไม่ให้คนธรรมดาดาวน์โหลดวิดีโอ!
Etienne Noël

2
สิ่งนี้ไม่ได้ช่วย แต่ถ้าปิดการใช้งานจาวาสคริปต์ในเบราว์เซอร์
mvark

2
ขอบคุณวิธีแก้ปัญหานี้เพียงพอสำหรับ 90% ของผู้เข้าชมทั้งหมดของเรา
Kai Noack

2
bleh เพียงตรวจสอบองค์ประกอบใน Firebug ดูsrcคุณลักษณะและเปิดสิ่งนั้นในแท็บอื่นหรือใช้wgetเพื่อดาวน์โหลด!
SexyBeast

11
ฉันคิดว่าเป้าหมายหลักของการทำเช่นนี้คือหลีกเลี่ยงผู้ใช้ที่ "ปกติ" ในการดาวน์โหลดวิดีโอ นี่เป็นทางออกที่ดีในการแก้ไขสถานการณ์นี้
Unapedra

37

คำตอบง่ายๆ

คุณไม่สามารถ

หากพวกเขากำลังดูวิดีโอของคุณพวกเขาก็มีอยู่แล้ว

คุณสามารถทำให้ช้าลง แต่ไม่สามารถหยุดพวกเขาได้


อย่างไรก็ตามคำตอบนี้ใช้กับวิดีโอ HTML5 วิดีโอแฟลชหรือเทคโนโลยีใด ๆ ที่คุณสามารถจินตนาการได้ในอนาคต มันง่าย: มันเป็นวิธีการทำงาน
Gustavo Rodrigues

แล้ว youtube ล่ะบน youtube คุณไม่สามารถแยกไฟล์วิดีโอออกได้อย่างง่ายดาย ฉันหมายความว่าตกลงคุณถูกต้องเราทำได้ แต่ซ่อนแหล่ง mp4 บน YouTube หรือวิดีโอโฮสติ้งที่คล้ายกันได้ง่ายกว่าโฮสต์ mp4 ง่ายๆในเซิร์ฟเวอร์ของเราและใช้เครื่องเล่น html5
dlopezgonzalez

2
นั่นไม่ใช่คำตอบของคำถามทั้งสองข้อ
Tzshand

1
ผู้คนสามารถบันทึกทั้งหน้าจอและเสียงและหลอกวิธีแก้ไขทั้งหมดนั่นคือเหตุผลที่พวกเขาสามารถชะลอตัวลงเท่านั้น
kintsukuroi

1
@IlanSchemoul น่าสนใจ ขอบคุณสำหรับการแบ่งปัน :)
Starx

33

ใช่คุณสามารถทำได้ในสามขั้นตอน:


  1. วางไฟล์ที่คุณต้องการป้องกันในไดเรกทอรีย่อยของไดเรกทอรีที่ใช้รหัสของคุณ

    www.foo.com/player.html
    www.foo.com/videos/video.mp4

  2. บันทึกไฟล์ในไดเรกทอรีย่อยที่ชื่อ ".htaccess" และเพิ่มบรรทัดด้านล่าง

    www.foo.com/videos/.htaccess

    #Contents of .htaccess
    
    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^http://foo.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.foo.com/.*$ [NC]
    RewriteRule .(mp4|mp3|avi)$ - [F]

ตอนนี้ลิงก์ซอร์สนั้นไม่มีประโยชน์แต่เรายังต้องแน่ใจว่าผู้ใช้ที่พยายามดาวน์โหลดไฟล์ไม่สามารถให้บริการไฟล์ได้โดยตรง

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

    <body oncontextmenu="return false;">


ผลลัพธ์:

www.foo.com/player.html เล่นวิดีโอได้อย่างถูกต้องแต่ถ้าคุณไปที่ www.foo.com/videos/video.mp4:

รหัสข้อผิดพลาด 403: FORBIDDEN


สิ่งนี้จะใช้ได้กับการดาวน์โหลดโดยตรง, cURL, hotlinking คุณตั้งชื่อ

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


1
คำตอบที่ยอดเยี่ยม แต่คุณมี `คุณควรลบมันออกจาก.htaccessเนื้อหาของคุณ
MAZux

2
คุณยังสามารถปลอม HTTP Referer ซึ่งจะอนุญาตให้บุคคลดาวน์โหลด อย่างไรก็ตามนี่เป็นทางออกที่ฉลาดมาก หากคุณใส่รหัสนี้ด้วยรหัสเพียงครั้งเดียวคุณก็พร้อมที่จะไป!
Shiroy

ดูเหมือนว่า IDM ยังสามารถดาวน์โหลดได้!
เปอร์เซีย

@PersianMan ถูกต้อง - ฉันขอแนะนำให้คุณอ่านคำตอบแรก
Tzshand

1
หากคุณปิดการใช้งานจาวาสคริปต์จากเบราว์เซอร์เคล็ดลับนี้จะไม่ทำงานเนื่องจากการคลิกขวาจะเปิดใช้งาน เพื่อหลีกเลี่ยงปัญหานี้คุณควรดึงและโหลดองค์ประกอบวิดีโอแบบไดนามิกโดยใช้ jquery
Anindya Sankar Dasgupta

23

วิธีที่ดีที่สุดที่ฉันมักจะใช้นั้นง่ายมากฉันปิดการใช้งานเมนูบริบทอย่างเต็มรูปแบบในหน้าทั้งหมด html + javascript ล้วน:

 <body oncontextmenu="return false;">

แค่นั้นแหละ! ฉันทำเช่นนี้เพราะคุณสามารถดูแหล่งได้โดยคลิกขวา
ตกลงคุณพูดว่า: "ฉันสามารถใช้โดยตรงกับแหล่งที่มาของมุมมองเบราว์เซอร์" และมันเป็นความจริง แต่เราเริ่มจากความจริงที่ว่าคุณไม่สามารถหยุดการดาวน์โหลดhtml5วิดีโอ


ฉันคิดว่าsoluciónจะต้องเป็นหนึ่งที่ไม่รบกวนผู้ใช้ "ปกติ" ปิดการใช้งานการคลิกขวาจะป้องกันไม่ให้ผู้ใช้คัดลอกและวางข้อความบางส่วนหรือค้นหาคำที่พวกเขาจะถูกแยกในตัวอย่างเช่นชื่อเรื่องของวิดีโอไม่ ผู้ใช้ทุกคนมีแนวโน้มที่จะทำเช่นนั้น แต่อาจเป็นเรื่องน่ารำคาญสำหรับบางคน
John Balvin Arias

14

ในฐานะนักพัฒนาฝั่งไคลเอ็นต์ฉันแนะนำให้ใช้ blob URL, blob URL เป็น URL ฝั่งไคลเอ็นต์ซึ่งอ้างถึงวัตถุไบนารี

<video id="id" width="320" height="240"  type='video/mp4' controls  > </video>

ใน HTML ปล่อยให้วิดีโอของคุณsrcว่างเปล่าและใน JS ดึงไฟล์วิดีโอโดยใช้ AJAX ตรวจสอบให้แน่ใจว่าประเภทการตอบสนองคือหยด

window.onload = function() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'mov_bbb.mp4', true);
    xhr.responseType = 'blob'; //important
    xhr.onload = function(e) {
        if (this.status == 200) {
            console.log("loaded");
            var blob = this.response;
            var video = document.getElementById('id');
            video.oncanplaythrough = function() {
                console.log("Can play through video without stopping");
                URL.revokeObjectURL(this.src);
            };
            video.src = URL.createObjectURL(blob);
            video.load();
        }
    };
    xhr.send();
}

หมายเหตุ: วิธีนี้ไม่แนะนำสำหรับไฟล์ขนาดใหญ่

แก้ไข

  • ใช้การบล็อกข้ามทางเพื่อหลีกเลี่ยงการดาวน์โหลดโดยตรง

  • ถ้า API ส่งวิดีโอให้ใช้วิธีอื่น (PUT / POST) แทน 'GET'


3
YouTube ใช้ Blob ด้วยฉันคิดเช่นกัน :)
C0nw0nk

1
คุณช่วยอธิบายสิ่งที่เกิดขึ้นที่นี่ให้ชัดเจนยิ่งขึ้นและจะตั้งค่าเซิร์ฟเวอร์สำหรับสิ่งนี้ได้อย่างไร
Anthony

1
@nerdofcode มันทำงานอย่างไรเมื่อผู้ใช้พยายามส่งต่อวิดีโอ พวกเขาจะต้องรอจนกว่าการดาวน์โหลดวิดีโอทั้งหมดหรือไม่
John Balvin Arias

1
@JohnBalvinArias! ฉันไม่ได้ทดสอบ 100% นี้ แต่ฉันจะบอกว่ามันต้องการเพียงบัฟเฟอร์ด่วน ... อย่าพูดถึงสิ่งนี้แม้ว่า ...
NerdOfCode

1
หากฉันตรวจสอบหน้าในแท็บเครือข่ายฉันได้รับคำขอวิดีโอที่ฉันสามารถเปิดได้ในแท็บใหม่
Simone

10

PHP ส่งแท็กวิดีโอ html5 พร้อมกับเซสชันที่คีย์เป็นสตริงแบบสุ่มและค่าเป็นชื่อไฟล์

ini_set('session.use_cookies',1);
session_start();
$ogv=uniqid(); 
$_SESSION[$ogv]='myVideo.ogv';
$webm=uniqid(); 
$_SESSION[$webm]='myVideo.webm';
echo '<video autoplay="autoplay">'
    .'<source src="video.php?video='.$ogv.' type="video/ogg">'
    .'<source src="video.php?video='.$webm.' type="video/webm">'
    .'</video>'; 

ตอนนี้ขอให้ PHP ส่งวิดีโอ PHP กู้คืนชื่อไฟล์; ลบเซสชั่นและส่งวิดีโอทันที นอกจากนี้จะต้องมีส่วนหัว 'no cache' และประเภท mime

ini_set('session.use_cookies',1);
session_start();
$file='myhiddenvideos/'.$_SESSION[$_GET['video']];
$_SESSION=array();
$params = session_get_cookie_params();
setcookie(session_name(),'', time()-42000,$params["path"],$params["domain"],
                                         $params["secure"], $params["httponly"]);
if(!file_exists($file) or $file==='' or !is_readable($file)){
  header('HTTP/1.1 404 File not found',true);
  exit;
  }
readfile($file);
exit:

ตอนนี้หากผู้ใช้คัดลอก URL ในแท็บใหม่หรือใช้เมนูบริบทเขาจะไม่มีโชค


ฉันชอบโซลูชัน - มันแก้ปัญหา OPs ได้ สิ่งหนึ่งที่โชคร้ายคือเมื่อตรวจสอบซอร์สโค้ดใน Chrome และคลิกขวาที่ลิงค์ ผู้ใช้จะดาวน์โหลดไฟล์ html ซึ่งอันที่จริงแล้วจะเป็นไฟล์วิดีโอ
user1252280

5

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

oncontextmenu="return false;"

ใช้งานได้กับองค์ประกอบร่างกาย (ทั้งหน้า) หรือเพียงวิดีโอเดียวที่ใช้ภายในแท็กวิดีโอ

<video oncontextmenu="return false;" controls>...</video>

5

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

การสร้าง URL วิดีโอนั้นจำเป็นต้องใช้คู่คีย์ซึ่งสามารถสร้างได้ใน AWS CLI FYI นี่ไม่ใช่รหัสของฉัน แต่ใช้งานได้ดี!

$resource = 'http://cdn.yourwebsite.com/videos/yourvideourl.mp4';
$timeout = 4;

//This comes from key pair you generated for cloudfront
$keyPairId = "AKAJSDHFKASWERASDF";

$expires = time() + $timeout; //Time out in seconds
$json = '{"Statement":[{"Resource":"'.$resource.'","Condition" {"DateLessThan":{"AWS:EpochTime":'.$expires.'}}}]}';     

//Read Cloudfront Private Key Pair
$fp=fopen("/absolute/path/to/your/cloudfront_privatekey.pem","r"); 
$priv_key=fread($fp,8192); 
fclose($fp); 

//Create the private key
$key = openssl_get_privatekey($priv_key);
if(!$key)
{
    echo "<p>Failed to load private key!</p>";
    return;
}

//Sign the policy with the private key
if(!openssl_sign($json, $signed_policy, $key, OPENSSL_ALGO_SHA1))
{
    echo '<p>Failed to sign policy: '.openssl_error_string().'</p>';
    return;
}

//Create url safe signed policy
$base64_signed_policy = base64_encode($signed_policy);
$signature = str_replace(array('+','=','/'), array('-','_','~'), $base64_signed_policy);

//Construct the URL
$url = $resource.'?Expires='.$expires.'&Signature='.$signature.'&Key-Pair-Id='.$keyPairId;

return '<div class="videowrapper" ><video autoplay controls style="width:100%!important;height:auto!important;"><source src="'.$url.'" type="video/mp4">Your browser does not support the video tag.</video></div>';

1
ความคิดเห็นที่มีการประเมินต่ำมาก ฉันแนะนำให้ใช้docs.aws.amazon.com/sdk-for-php/v3/developer-guide/ …ทุกวันนี้
Zmart

หากโทเค็นหมดอายุหมายความว่าพวกเขาไม่สามารถนำทางไปรอบ ๆ วิดีโอได้หรือไม่ เช่นนี้ดูเหมือนจะติดต่อ URL วิดีโออีกครั้ง
Chud37

4

เราสามารถทำให้มันไม่ง่ายนักโดยการซ่อนเมนูบริบทเช่นนี้:

<video oncontextmenu="return false;"  controls>
  <source src="https://yoursite.com/yourvideo.mp4" >
</video>

3

+1 วิธีที่ง่ายและข้ามเบราว์เซอร์: คุณสามารถใส่ภาพที่โปร่งใสเหนือวิดีโอด้วยดัชนี css z และความทึบ ดังนั้นผู้ใช้จะเห็น "บันทึกรูปภาพเป็น" แทนที่จะ "บันทึกวิดีโอ" ในเมนูบริบท


2
ทำไม pic ต้องใช้เวลาโหลดจึงใส่แท็ก div เท่านั้นและพวกเขาจะได้รับเมนูใหญ่ของ chrome เช่น back reload เป็นต้น
Waqas Tahir

ฉันไม่แน่ใจ แต่ยังสามารถดาวน์โหลดวิดีโอได้ทางไฟล์> SaveAs
Arun Kumar

3

The

<body oncontextmenu="return false;"> 

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


2

การใช้บริการเช่น Vimeo: ลงชื่อเข้าใช้Vimeo > Goto Video > Settings > Privacy > Mark as Securedและเลือกโดเมนฝัง เมื่อตั้งค่าโดเมนฝังแล้วจะไม่อนุญาตให้ทุกคนฝังวิดีโอหรือแสดงจากเบราว์เซอร์เว้นแต่จะเชื่อมต่อจากโดเมนที่ระบุ ดังนั้นหากคุณมีหน้าเว็บที่ปลอดภัยบนเซิร์ฟเวอร์ของคุณซึ่งโหลดโปรแกรมเล่น Vimeo ใน iframe สิ่งนี้จะทำให้ยากต่อการรับชม


2

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

เว็บเบราว์เซอร์ดาวน์โหลดวิดีโอชั่วคราวในบัฟเฟอร์ดังนั้นหากสามารถป้องกันการดาวน์โหลดคุณจะป้องกันไม่ให้วิดีโอดูเช่นกัน

คุณควรทราบด้วยว่า <1% ของประชากรทั้งหมดของโลกจะสามารถเข้าใจซอร์สโค้ดทำให้ค่อนข้างปลอดภัยอยู่แล้ว แต่นั่นไม่ได้หมายความว่าคุณไม่ควรจะซ่อนมันไว้ในแหล่งที่มาเช่นกัน - คุณควร

คุณควรจะไม่"You cannot save this video for copyright reasons. Sorry about that."คลิกขวาปิดการใช้งานและยังน้อยกว่าที่คุณควรจะแสดงข้อความว่า ตามที่แนะนำในคำตอบนี้

สิ่งนี้อาจสร้างความรำคาญและสร้างความสับสนให้กับผู้ใช้ นอกเหนือจากนี้; หากพวกเขาปิดการใช้งาน JavaScript บนเบราว์เซอร์พวกเขาจะสามารถคลิกขวาและบันทึกได้

นี่คือเคล็ดลับ CSS ที่คุณสามารถใช้ได้:

video {
    pointer-events: none;
}

ไม่สามารถปิด CSS ในเบราว์เซอร์ปกป้องวิดีโอของคุณโดยไม่ต้องปิดการคลิกขวา แต่ปัญหาหนึ่งคือการที่controlsไม่สามารถเปิดใช้งานอย่างใดอย่างหนึ่งในคำอื่น ๆ falseที่พวกเขาจะต้องตั้งค่า หากคุณกำลังจะเข้าไปฟังก์ชั่นเล่น / หยุดชั่วคราวของคุณเองหรือใช้ API ที่มีปุ่มแยกไปยังvideoแท็กนี่เป็นตัวเลือกที่เป็นไปได้

controls ยังมีปุ่มดาวน์โหลดดังนั้นการใช้มันจึงไม่ใช่ความคิดที่ดีเช่นกัน

นี่คือตัวอย่างJSFiddle


หากคุณกำลังจะปิดการใช้งานคลิกขวาโดยใช้ JavaScript จากนั้นเก็บที่มาของวิดีโอใน JavaScript เช่นกัน ด้วยวิธีนี้หากผู้ใช้ปิดการใช้งาน JavaScript (อนุญาตให้คลิกขวา) วิดีโอจะไม่โหลด (นอกจากนี้ยังซ่อนแหล่งวิดีโอให้ดีขึ้นอีกเล็กน้อย)

จากคำตอบ TxRegex :

<video oncontextmenu="return false;" controls>
    <source type="video/mp4" id="video">
</video>

ตอนนี้เพิ่มวิดีโอผ่าน JavaScript:

document.getElementById("video").src = "https://www.w3schools.com/html/mov_bbb.mp4";

ฟังก์ชั่นJSFiddle


อีกวิธีในการป้องกันการคลิกขวาเกี่ยวข้องกับการใช้embedแท็ก อย่างไรก็ตามนี่ไม่ได้จัดเตรียมการควบคุมเพื่อเรียกใช้วิดีโอดังนั้นจึงจำเป็นต้องมีการฝังไว้ใน JavaScript:

<embed src="https://www.w3schools.com/html/mov_bbb.mp4"></embed>

1
การเพิ่ม src URL ผ่าน JavaScript ไม่มีประโยชน์มาก การตรวจสอบ DOM จะแสดง URL อย่างเห็นได้ชัดหลังจากสคริปต์ตั้งค่า
Simone

@Simone ฉันเห็นด้วย แต่มันดีกว่าการแสดงมันโดยตรงในแหล่ง html ที่ทุกคนที่คลิกขวาสามารถดูได้ทันที คุณสามารถแยก URL หรือเข้ารหัสได้เสมอ แต่จำไว้ว่าเป็นการประมวลผลเพิ่มเติม
Simon

"ไม่สามารถปิด CSS ในเบราว์เซอร์" - ในทางเทคนิคคุณสามารถปรับเปลี่ยน CSS ในเครื่องมือสำหรับนักพัฒนาเว็บเบราว์เซอร์เพื่อปิดการใช้งานกฎ CSS บางอย่างดังนั้นบุคคลที่มีความเชี่ยวชาญด้านเทคโนโลยีมากขึ้นสามารถลบออกได้pointer-events: none;
Phil Gibbins

2

ดีคุณไม่สามารถป้องกันได้ 100% แต่คุณสามารถทำให้มันยากขึ้น วิธีการเหล่านี้ที่ฉันอธิบายผมต้องเผชิญกับพวกเขาในระหว่างการศึกษาวิธีการป้องกันในPluralsightและBestDotNetTraining อย่างไรก็ตามไม่มีวิธีการใดที่ทำให้ฉันไม่สามารถดาวน์โหลดสิ่งที่ฉันต้องการได้ แต่ฉันมีเวลายากที่จะดูแลการดาวน์โหลดเพื่อให้ผ่านการป้องกัน

นอกเหนือจากวิธีการอื่นที่กล่าวถึงเพื่อปิดใช้งานเมนูบริบท ผู้ใช้ยังคงสามารถใช้เครื่องมือของบุคคลที่สามเช่น InternetDownload manager หรือซอฟต์แวร์อื่นที่คล้ายคลึงกันเพื่อดาวน์โหลดวิดีโอ วิธีการป้องกันที่ฉันอธิบายที่นี่คือการลดซอฟต์แวร์บุคคลที่สามเหล่านั้น

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

คำปฏิเสธ

ฉันจะไม่ยอมรับความรับผิดชอบใด ๆ หากมีผู้ใช้วิธีการเหล่านี้ในทางที่ผิดหรือใช้เพื่อเป็นอันตรายต่อผู้อื่นหรือเว็บไซต์ที่ฉันกล่าวถึงเป็นตัวอย่าง เป็นเพียงการแบ่งปันความรู้เพื่อช่วยคุณปกป้องผลิตภัณฑ์ทางปัญญาของคุณ

สร้างลิงค์ด้วยการหมดอายุ

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

เมื่อกดปุ่มเหตุการณ์คุณจะส่งคำขอไปยังเซิร์ฟเวอร์และรับลิงก์และอัปเดตแหล่งที่มา

เร่งอัตราการร้องขอวิดีโอ

จากนั้นคุณตรวจสอบความเร็วของการร้องขอของผู้ใช้สำหรับวิดีโอที่สอง ถ้าผู้ใช้ร้องขอลิงค์ดาวน์โหลดเร็วเกินไปคุณก็บล็อกมันทันที คุณไม่สามารถวางขีด จำกัด นี้ใหญ่เกินไปเนื่องจากคุณสามารถปิดกั้นผู้ใช้ที่กำลังดูหรือ skimming ผ่านวิดีโอโดยไม่ตั้งใจ

เปิดใช้งานช่วง HTTP

ใช้ไลบรารี js เช่นvideojsเพื่อเล่นวิดีโอของคุณและคุณต้องส่งคืน AcceptRange ในส่วนหัวของคุณ พื้นที่เก็บข้อมูลสีน้ำเงินของ Azure รองรับสิ่งนี้ได้นอกกรอบ เบราว์เซอร์เริ่มดาวน์โหลดวิดีโอก้อนด้วยวิธีนี้ โดยปกติแล้ว 32byte โดย 32byte จากนั้นคุณต้องฟัง videojs timeupdateเปลี่ยนแปลงและอัปเดตเซิร์ฟเวอร์ของคุณเกี่ยวกับเปอร์เซ็นต์ที่ดูวิดีโอ เปอร์เซ็นต์ที่ดูวิดีโอนั้นไม่สามารถมากกว่าร้อยละของวิดีโอที่แสดง และหากคุณกำลังส่งเนื้อหาวิดีโอโดยไม่ได้รับการเปลี่ยนแปลงร้อยละใด ๆ จากนั้นคุณสามารถบล็อกผู้ใช้ เพราะแน่นอนว่าพวกเขากำลังดาวน์โหลด

การใช้สิ่งนี้เป็นเรื่องยุ่งยากเพราะผู้ใช้สามารถข้ามวิดีโอไปข้างหน้าหรือข้างหลังดังนั้นควรคำนึงถึงเรื่องนี้เมื่อคุณใช้งานสิ่งนี้

นี่คือวิธีที่ BestDotnetTraining จัดการ timeupdate

myPlayer.ready(function () {
    //var player = this;
    this.src({
        type: "video/mp4",
        src: videoURL
    });
    if (videoId) {
        myPlayer.play();
        this.on('timeupdate', function () {
            var currentPercent = parseInt(100 * myPlayer.currentTime() / myPlayer.duration());//calcualte as percentage
            if (currentPercent % 5 == 0) {
                //send percentage to server 
                SaveVideoDurationWatched(currentPercent, videoId);
            }
        });
    }

});

อย่างไรก็ตามผู้ใช้สามารถหลีกเลี่ยงปัญหานี้ได้โดยใช้วิธีการดาวน์โหลดที่ดาวน์โหลดไฟล์ผ่านการสตรีม เกือบ c # ทำออกจากกล่องและสำหรับ nodejs คุณสามารถใช้requestโมดูล จากนั้นคุณต้องเริ่มต้น stopWatch ฟังแพ็กเกจที่ได้รับและเปรียบเทียบไบต์ทั้งหมดที่ได้รับเปรียบเทียบกับขนาดทั้งหมด วิธีนี้คุณสามารถคำนวณเปอร์เซ็นต์และเวลาที่ใช้ในการรับเปอร์เซ็นต์นั้น จากนั้นใช้Thread.Sleep()หรือสิ่งที่คล้ายกันเพื่อหน่วงจำนวนเธรดที่คุณต้องรอถ้าคุณดูวิดีโอตามปกติ ก่อนนอนผู้ใช้สามารถโทรเซิร์ฟเวอร์และอัพเดตเปอร์เซ็นต์ที่ได้รับ ดังนั้นเซิร์ฟเวอร์จึงคิดว่าผู้ใช้กำลังดูวิดีโอจริง ๆ

การคำนวณจะเป็นแบบนี้ตัวอย่างเช่นถ้าคุณคำนวณว่าคุณได้รับ 1 เปอร์เซ็นต์จนถึงตอนนี้คุณสามารถคำนวณจำนวนเงินที่คุณควรรอให้สลีปดาวน์โหลด ด้วยวิธีนี้คุณจะไม่สามารถดาวน์โหลดวิดีโอได้เร็วกว่าความยาวจริง ถ้าวิดีโอคือ 24 นาที มันจะใช้เวลา 24 นาทีในการดาวน์โหลด (บวกเกณฑ์ที่เราใส่ในวิธีแรก)

original video length 24 minute
24 min *60000 = 1,440,000 miliseconds 
1,440,000 % 100 = 14,400 milisecond is needed to download one percent

ตรวจสอบตัวแทนเบราว์เซอร์

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

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

เพื่อหลีกเลี่ยงปัญหานี้ผู้ใช้สามารถตั้งค่าส่วนหัวของตัวแทนเบราว์เซอร์ได้ด้วยตนเองเช่นเดียวกับเบราว์เซอร์ที่ไม่มีส่วนหัวที่ใช้ในการจับลิงค์ดาวน์โหลด

ตรวจสอบส่วนอ้างอิง

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

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

เพื่อหลีกเลี่ยงปัญหานี้ผู้ใช้สามารถตั้งค่าส่วนหัวผู้อ้างอิงด้วยตนเองเท่ากับ URL หน้าดาวน์โหลดเมื่อดาวน์โหลดวิดีโอ

คำนวณเวลาระหว่างคำขอ

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

เพื่อแก้ไขปัญหานี้ผู้ใช้สามารถกำหนดเวลาพักเครื่องแบบสุ่มระหว่างคำขอได้

รหัสตัวอย่าง

ฉันมี repo PluralSight-Downloaderที่ใช้งานได้ครึ่งทางแล้ว ฉันสร้าง repo นี้เกือบ 5 ปีที่แล้ว เพราะฉันเขียนเพื่อการศึกษาและใช้งานส่วนตัวเท่านั้น repo ยังไม่ได้รับการอัปเดตใด ๆ จนถึงตอนนี้และฉันจะไม่อัปเดตหรือทำให้ใช้งานได้ง่าย มันเป็นเพียงตัวอย่างของวิธีการทำ



1

คำตอบสั้น ๆ :เข้ารหัสลิงก์เช่นเดียวกับที่ YouTube ทำไม่ทราบว่าจะถาม youtube / google ได้อย่างไรว่าพวกเขาทำได้อย่างไร (ในกรณีที่คุณต้องการตรงเข้าไปในจุด)

ฉันอยากจะชี้ให้ทุกคนเห็นว่าสิ่งนี้เป็นไปได้เพราะ youtube ทำและถ้าพวกเขาสามารถทำเว็บไซต์อื่นได้และมันไม่ได้มาจากเบราว์เซอร์เช่นกันเพราะฉันทดสอบบนเบราว์เซอร์คู่เช่น microsoft edge และ internet explorer และ ดังนั้นจึงมีวิธีการปิดการใช้งานและเห็นว่าผู้คนยังคงพูดว่า ... ฉันพยายามหาคำตอบเพราะหาก youtube สามารถทำได้มากกว่าที่จะต้องมีวิธีการและวิธีเดียวที่จะดูว่าพวกเขาทำอย่างไรถ้ามีคนมองเข้าไป สคริปต์ของ youtube ที่ฉันทำอยู่ตอนนี้ ฉันยังตรวจสอบเพื่อดูว่ามันเป็นเมนูบริบทที่กำหนดเองด้วยหรือไม่และไม่ใช่เพราะเมนูบริบทนั้นผ่านการตรวจสอบองค์ประกอบและฉันหมายถึงว่ามันจบลงแล้วและฉันก็มองและมันก็ไม่เคยสร้างคลาสใหม่อีกด้วย เป็นไปไม่ได้ที่จะเข้าถึงองค์ประกอบการตรวจสอบด้วย javascript จริง ๆ จึงไม่สามารถทำได้ คุณสามารถบอกได้เมื่อดับเบิลคลิกขวาวิดีโอ youtube ที่ปรากฏขึ้นในเมนูบริบทสำหรับโครเมี่ยม นอกจากนี้ ... youtube จะไม่เพิ่มฟังก์ชั่นนั้นฉันกำลังทำการค้นคว้าและค้นหาแหล่งที่มาของ youtube ดังนั้นฉันจะกลับมาอีกครั้งหากฉันพบคำตอบ ... ถ้ามีคนบอกว่าคุณทำไม่ได้ ทำวิจัยอย่างที่ฉันมี วิธีเดียวในการดาวน์โหลดวิดีโอ youtube คือผ่านการดาวน์โหลดวิดีโอ

โอเค ... ฉันทำการวิจัยและการวิจัยของฉันยังคงอยู่ที่คุณสามารถปิดการใช้งานได้ยกเว้นไม่มีจาวาสคริปต์ที่จะต้อง ... คุณจะต้องสามารถเข้ารหัสลิงก์ไปยังวิดีโอเพื่อให้คุณสามารถปิดการใช้งานเพราะฉันคิดว่า เบราว์เซอร์จะไม่แสดงหากไม่สามารถค้นหาได้และเมื่อฉันเปิดลิงก์วิดีโอ youtube แสดงว่าเป็น "blob: https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275""ถ้าไม่มีเครื่องหมายอัญประกาศดังนั้นจึงเข้ารหัสได้ดังนั้นจึงไม่สามารถบันทึกได้ ... คุณจำเป็นต้องรู้ php สำหรับสิ่งนั้น แต่เช่นเดียวกับคำตอบที่คุณเลือกให้ยากขึ้น youtube ทำให้มันเข้ารหัสได้ยากที่สุดคุณต้องเป็น โปรแกรมเมอร์ php ขั้นสูง แต่ถ้าคุณไม่รู้ว่าเอาคนที่คุณเลือกเป็นคำตอบที่ดีที่สุดในการดาวน์โหลดมันยาก ... แต่ถ้าคุณรู้ php มากกว่าการเข้ารหัสลิงค์วิดีโออย่างหนักดังนั้นมันจึงสามารถอ่านได้เท่านั้น ของคุณ ... ฉันไม่รู้จะอธิบายวิธีที่พวกเขาทำ แต่พวกเขาทำและมีวิธีวิธีที่ YouTube เข้ารหัสวิดีโอมีสมาร์ทค่อนข้างดังนั้นถ้าคุณต้องการที่จะรู้วิธีกว่าแค่ถาม youtube / google ของวิธี พวกเขาทำมัน ... หวังว่าสิ่งนี้จะช่วยคุณแม้ว่าคุณจะได้เลือกคำตอบที่ดีที่สุดแล้วดังนั้นการเข้ารหัสลิงก์จึงดีที่สุดในระยะสั้น


0

ดูเหมือนว่าการสตรีมวิดีโอผ่าน websocket เป็นตัวเลือกที่ทำงานได้เช่นเดียวกับในการสตรีมเฟรมและวาดพวกมันบนผืนผ้าใบ

การสตรีมวิดีโอผ่านเว็บกระเป๋าโดยใช้ JavaScript

ฉันคิดว่ามันจะให้การป้องกันในระดับอื่นทำให้ลูกค้าได้รับวิดีโอยากขึ้นและแน่นอนแก้ปัญหาของคุณด้วย "บันทึกวิดีโอเป็น ... " ตัวเลือกเมนูบริบทคลิกขวา (overkill?!)


0

นี่คือสิ่งที่ฉันทำ:

function noRightClick() {
      alert("You cannot save this video for copyright reasons. Sorry about that.");
}
    <body oncontextmenu="noRightClick();">
    <video>
    <source src="http://calumchilds.com/videos/big_buck_bunny.mp4" type="video/mp4">
    </video>
    </body>
นอกจากนี้ยังสามารถใช้งานกับรูปภาพข้อความและอะไรก็ได้ อย่างไรก็ตามคุณยังสามารถเข้าถึงเครื่องมือ "ตรวจสอบ" และ "ดูแหล่งที่มา" ผ่านทางแป้นพิมพ์ลัด (ดังที่คำตอบที่ด้านบนบอกว่าคุณไม่สามารถหยุดมันได้ทั้งหมด) แต่คุณสามารถพยายามวางสิ่งกีดขวางเพื่อหยุดพวกเขา


-1

@ Clayton-Graul มีสิ่งที่ฉันกำลังมองหายกเว้นฉันต้องการเวอร์ชัน CoffeeScript สำหรับไซต์ที่ใช้ AngularJS ในกรณีที่คุณต้องการเช่นกันนี่คือสิ่งที่คุณใส่ไว้ใน AngularJS คอนโทรลเลอร์ที่เป็นปัญหา:

    # This is how to we do JQuery ready() dom stuff
    $ ->
        # let's hide those annoying download video options.
        # of course anyone who knows how can still download
        # the video, but hey... more power to 'em.
        $('#my-video').bind 'contextmenu', -> 
            false

"สิ่งแปลก ๆ กำลังเคลื่อนไหวที่วงกลม k" (จริง)

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