前端拿到播放地址 给被人让别人无法播放 代码
时间: 2023-06-12 21:05:39 浏览: 120
如果你想在前端让别人无法播放视频,我建议你使用加密视频的方式。你可以使用 AES-128 等加密算法,对视频进行加密,并且在前端播放视频时,先进行解密操作,然后再将解密后的视频进行播放。
以下是一个使用 AES-128 加密视频的示例代码:
```javascript
// 定义加密密钥
let key = '1234567890123456';
// 加密视频
function encryptVideo(videoUrl) {
let xhr = new XMLHttpRequest();
xhr.open('GET', videoUrl, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
let videoData = new Uint8Array(xhr.response);
let iv = window.crypto.getRandomValues(new Uint8Array(16));
let encrypted = aesEncrypt(videoData, key, iv);
let encryptedBlob = new Blob([iv, encrypted], {type: 'video/mp4'});
let encryptedUrl = URL.createObjectURL(encryptedBlob);
// 在前端播放加密后的视频
playVideo(encryptedUrl);
};
xhr.send();
}
// 解密视频
function decryptVideo(encryptedUrl) {
let xhr = new XMLHttpRequest();
xhr.open('GET', encryptedUrl, true);
xhr.responseType = 'blob';
xhr.onload = function() {
let encryptedBlob = xhr.response;
let reader = new FileReader();
reader.onload = function() {
let encryptedData = new Uint8Array(reader.result);
let iv = encryptedData.slice(0, 16);
let encrypted = encryptedData.slice(16);
let decrypted = aesDecrypt(encrypted, key, iv);
let decryptedBlob = new Blob([decrypted], {type: 'video/mp4'});
let decryptedUrl = URL.createObjectURL(decryptedBlob);
// 在前端播放解密后的视频
playVideo(decryptedUrl);
};
reader.readAsArrayBuffer(encryptedBlob);
};
xhr.send();
}
// AES-128 加密算法
function aesEncrypt(data, key, iv) {
let algorithm = { name: 'AES-CBC', iv: iv };
let cryptoKey = crypto.subtle.importKey('raw', str2ab(key), 'AES-CBC', false, ['encrypt']);
return crypto.subtle.encrypt(algorithm, cryptoKey, data);
}
// AES-128 解密算法
function aesDecrypt(data, key, iv) {
let algorithm = { name: 'AES-CBC', iv: iv };
let cryptoKey = crypto.subtle.importKey('raw', str2ab(key), 'AES-CBC', false, ['decrypt']);
return crypto.subtle.decrypt(algorithm, cryptoKey, data);
}
// 字符串转 ArrayBuffer
function str2ab(str) {
let buf = new ArrayBuffer(str.length);
let bufView = new Uint8Array(buf);
for (let i = 0; i < str.length; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
// 播放视频
function playVideo(videoUrl) {
let video = document.createElement('video');
video.src = videoUrl;
document.body.appendChild(video);
video.play();
}
```
以上示例代码只是一个简单的加密和解密视频的实现,实际上你需要更加严密的逻辑来保证视频的安全性。同时,这种方式只是让别人无法直接播放视频文件,对于有一定技术水平的人来说,仍然可以通过其他方式来获取视频文件。
阅读全文