Prevent HTML5 video from being downloaded (right-click saved)?

前端 未结 20 2304
醉酒成梦
醉酒成梦 2020-11-22 15:33

How can I disable \"Save Video As...\" from a browser\'s right-click menu to prevent clients from downloading a video?

Are there more complete solutions that prevent

20条回答
  •  执念已碎
    2020-11-22 16:33

    We ended up using AWS CloudFront with expiring URLs. The video will load, but by the time the user right clicks and chooses Save As the video url they initially received has expired. Do a search for CloudFront Origin Access Identity.

    Producing the video url requires a key pair which can be created in the AWS CLI. FYI this is not my code but it works great!

    $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 "

    Failed to load private key!

    "; return; } //Sign the policy with the private key if(!openssl_sign($json, $signed_policy, $key, OPENSSL_ALGO_SHA1)) { echo '

    Failed to sign policy: '.openssl_error_string().'

    '; 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 '
    ';

提交回复
热议问题