ビデオのダウンロードを防ぐいくつかの処理方法

1.ビデオダウンロード機能が無効になっています

<video controlslist="nodownload"></video>

2. マウスの右ボタンを非表示にし、リンクのコピーを禁止します。

document.oncontextmenu = function () {
    
    
	return false;
}

3. クラウド オン デマンドなどのサードパーティの再生コントロールを使用し、可能な場合はアンチリーチを設定します。

4. BLOB ビデオ ストリーム暗号化を使用します。

QQ ブラウザなどの一部のブラウザは、ビデオ タグをインターセプトして再生リンクを取得します。ユーザーがプレーヤーの上にマウスを移動すると、ダウンロードという単語が表示されます。この問題を解決するために、BLOB ビデオ ストリームの形式を使用します。暗号化する。

現在、図に示すように、Bilibili、Watermelon Video など、この方法を採用しているものが市場に多数存在します。

ここに画像の説明を挿入

BLOB : バイナリ ラージ オブジェクト、バイナリ ファイルを格納できるコンテナ。ビデオで BLOB バイナリ ストリームを使用するには、フロント エンドとバック エンドの両方からのサポートが必要です。

BLOB オブジェクトを取得したら、URL.createObjectURL を通じて一時アドレスを生成し、それを video タグの src 属性に割り当てます。これで完了です。しかし、実際には、バイナリ オブジェクトはサーバーから直接受け取ることができます。つまり、サーバーはビデオ ファイルをバイナリ オブジェクトに変換し、インターフェイスを介してフロント エンドに送信し、フロント エンドで再度 dom 文字列を生成します。

このうちBLOB関連のAPIはブラウザ側でも提供されており、new Blog(...)を通じてブログオブジェクトが生成されます。

フロントエンドが BLOB オブジェクトを取得した後の操作は次のようになります。

jqの書き方:

    let xhr = new XMLHttpRequest()
    xhr.open('GET', 'http://localhost:3001/video', true)
    xhr.responseType = 'blob'
    xhr.onload = function(e) {
    
    
      if (this.status === 200) {
    
    
        // 获取blob对象
        let blob = this.response
        console.log(blob)
        // 获取blob对象地址,并把值赋给容器
        $("#my-video").attr("src", URL.createObjectURL(blob));
      }
    }
    xhr.send()

jsネイティブの書き方:

 <script type="text/javascript">
  var video = document.getElementById("my-video");  
  window.URL = window.URL || window.webkitURL;  
  var xhr = new XMLHttpRequest();  
  var play_url = 'test.mp4';
  xhr.open("GET", play_url, true);
  xhr.responseType = "blob";
  xhr.onload = function() {
      
        
  	if (this.status == 200) {
      
        
  		var blob = this.response;  console.log(blob);
  		video.onload = function(e) {
      
        
  			window.URL.revokeObjectURL(video.src);
  		};
    	video.src = window.URL.createObjectURL(blob);
    }
  }
  xhr.send(); 
</script>

4. ビデオスライスの暗号化:

大きなビデオを読み込む場合、大量のトラフィックが無駄になり、読み込みプロセスが帯域幅を占有し続けます。

このとき、ビデオフラグメンテーション処理を使用します。

想像してみてください。ビデオをセクションに分割した場合、一度に 1 つのセクションだけをロードし、視聴後に別のセクションをロードすることで、リソースを効果的に節約できます。

ステーション B のビデオを例にとると、F12 のネットワークでは、Web サイトがセグメントごとにビデオ ストリーム データを要求していることがわかります。(追記:このm4sはHTMLのフォーマットです)

スライス暗号化の原理: MP4 ファイルからビデオを複数の ts ファイルにスライスし、AES-128 を使用して各ビデオを暗号化し、最終的に m3u8 ファイルを生成します。ここではffmpegを使用する必要があります。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44684357/article/details/131578308