视频防止下载 仅播放技术 blob 方案
使用blob视频流加密的形式
使用blob视频流加密的形式主要涉及以下几个步骤:
-
视频文件转换为Blob对象: 首先,需要将视频文件转换为Blob对象。这可以通过JavaScript的
fetch
API来实现,将视频文件以Blob的形式获取。例如:javascriptfetch('video.mp4') .then(response => response.blob()) .then(blob => { const videoUrl = URL.createObjectURL(blob); document.querySelector('video').src = videoUrl; });
这样,视频文件就被转换成了一个Blob对象,并且通过
URL.createObjectURL
方法创建了一个可以被<video>
标签使用的URL。 -
服务端处理: 在服务端,需要读取视频文件,并将其作为流传输到前端。这通常涉及到将文件内容读取为二进制数据,并通过HTTP响应发送给客户端。PHP代码示例如下:
php$file_path = "...mp4"; //视频文件地址 ob_end_clean(); ob_start(); $handler = fopen($file_path, 'rb'); $file_size = filesize($file_path); Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".$file_size); Header("Content-Disposition: attachment; filename=" . basename( $file_path)); $oct_data = fread($handler,$file_size); fclose($handler); ob_end_flush(); return $oct_data;
这样,服务端将视频文件作为二进制流发送到客户端。
-
前端接收并播放: 在前端,使用
XMLHttpRequest
对象接收服务端发送的二进制流,并将其转换为Blob对象,然后创建一个URL并赋值给<video>
标签的src
属性,实现视频的播放。JavaScript代码示例如下:javascriptvar xhr = new XMLHttpRequest(); var url =""; //服务端地址 xhr.open('POST', url, true); xhr.responseType = 'blob'; xhr.onload = function (e) { if (this.status == 200) { var video = document.getElementById('video_player'); video.onload = function(e) { window.URL.revokeObjectURL(video.src); }; video.src = window.URL.createObjectURL(this.response); video.play(); } }; xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('id='+id);//传递参数
这样,前端就可以播放从服务端接收到的视频流,而不需要将视频文件下载到本地。
-
视频加密: 对于视频加密,可以使用WebCrypt API对视频进行加密解密操作。首先生成一个加密密钥,然后使用该密钥对视频数据进行加密。加密后的视频数据被封装成Blob对象,并创建一个URL用于播放。示例代码如下:
javascriptconst algorithm = { name: 'AES-GCM', iv: new Uint8Array(12) }; const key = crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']); fetch('video.mp4') .then(response => response.arrayBuffer()) .then(buffer => crypto.subtle.encrypt(algorithm, key, buffer)) .then(encryptedVideo => { const encryptedBlob = new Blob([encryptedVideo]); const encryptedUrl = URL.createObjectURL(encryptedBlob); document.querySelector('video').src = encryptedUrl; });
这样,视频在播放前就被加密,增加了视频内容的安全性。
通过上述步骤,可以实现使用blob视频流加密的形式,以防止视频被非法下载,只能在线观看。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端