- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个仅限成员(member)的网站,需要保护网站上可用的视频 URL,以免它们被分享或传递给非成员(member)。
我听说过 URL 屏蔽,但不知道如何操作。还是有别的办法?
基本上,视频将保存在远程服务器 (vps) 上或通过 Amazon S3,该网站将调用视频并在 flowplayer、JW 播放器或我能找到的任何播放器中进行流式传输,以确保安全视频。
有人知道怎么做吗?或者知道可以为我做这件事的服务吗?
最佳答案
是的,你可以做到这一点。仅仅因为它在客户端“播放”并不意味着它会在客户端保存 - 您必须使用可以在播放时记录流的软件。屏幕捕获软件或类似软件。
无论如何,要做到这一点,您需要使用 .htaccess 将文件请求重定向到一个 php 文件,该文件将动态提供文件的位置并混淆 URL。
您的 html 代码中需要以下内容
<html>
<body>
<script type="text/javascript" src="flowplayer-3.2.12.min.js">
</script>
<script type="text/javascript">
// <![CDATA[
window.onload = function () {
$f("player", "flowplayer-3.2.16.swf", {
plugins: {
secure: {
url: "flowplayer.securestreaming-3.2.8.swf",
timestampUrl: "sectimestamp.php"
}
},
clip: {
baseUrl: "secure", // Im using a folder called "secure" you can call it whatever you want
url: "trailer.flv",
urlResolvers: "secure",
scaling: "fit",
onStart: function (clip) {
document.getElementById("info").innerHTML = clip.baseUrl + "/" + clip.url;
}
}
});
};
// ]]>
</script>
<div id="player"></div>
</body>
</html>
sectimestamp.php 中只有这一行:
<?php
echo time();
?>
然后您需要按如下方式编写您的 .htaccess 文件并将其放在您的“安全”文件夹中或保存视频的任何位置:
RewriteEngine on
RewriteRule ^(.*)/(.*)/(.*)$ video.php?h=$1&t=$2&v=$3
RewriteRule ^$ - [F]
RewriteRule ^[^/]+\.(flv|mp4)$ - [F]
下一步是你的 video.php 文件,它与你的 .htaccess 位于同一目录中(你可以将它放在其他地方,只需调整 .htaccess 中的 url
<?php
$hash = $_GET['h'];
$streamname = $_GET['v'];
$timestamp = $_GET['t'];
$current = time();
$token = 'kljaslidilhal9023402'; // I recommend a dynamic token to be generated using something like mt_rand() function
$checkhash = md5($token . '/' . $streamname . $timestamp);
if (($current - $timestamp) <= 2 && ($checkhash == $hash)) {
$fsize = filesize($streamname);
header('Content-Disposition: attachment; filename="' . $streamname . '"');
if (strrchr($streamname, '.') == '.mp4') {
header('Content-Type: video/mp4');
} else {
header('Content-Type: video/x-flv');
}
header('Content-Length: ' . $fsize);
session_cache_limiter('nocache');
header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
$file = fopen($streamname, 'rb');
print(fread($file, $fsize));
fclose($file);
exit;
} else {
header('Location: /secure');
}
?>
这是验证部分,根据流检查 token 以确保它不超过 2 秒 - 否则您将必须刷新页面并请求新 token 。
现在,如果您尝试访问 url.com/secure/trailer.flv,您将无法访问 .htaccess(下载管理器也无法正常工作)。但是由于 url.com/video.html 的 php 信息,您将能够流式传输该位置,FLV 文件中的源将类似于 url.com/md5hashtimestamp/md5hashstreamname/md5hashtimestamp/trailer.flv。因此很难直接从 Flash 文件中提取流,因为该 URL 不存在;由于 .htaccess,您无法直接通过 url.com/secure/trailer.flv 访问该站点;最后唯一的选择是屏幕捕获/在流式传输时录制的软件。
所以它不是 100% 安全,但它确实给最终用户带来了困难 - 最重要的是它是免费的
关于security - 如何保护 mp4 和 flv 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581101/
我正在使用以下代码播放声音,过一会儿它将停止播放声音,这是因为我相信有太多的Mediaplayer打开实例,所以我添加了一个额外的mp.release();,这只会使我的应用程序崩溃(目前已被注释掉)
我正在查看 XV-6 代码,它通过它识别 MP 结构。它首先在 EBDA 的第一个 kb 中搜索。代码是这样的 static struct mp* mpsearch(void) { uchar *
我在我的应用程序中使用 Mp 饼图。它显示非常小的尺寸,我试图增加它的尺寸但它没有增加它的尺寸。我无法找出问题所在。请告诉我们如何增加尺寸。 这是我的代码: public class MPpiecha
如何使用 MPAndroidChart 实现此目的? 使用版本:com.github.PhilJay:MPAndroidChart:v3.1.0-alpha 添加图例和饼图边距的代码: private
亲爱的社区,我面临以下问题,我正在使用此处提供的 MP android 图表库创建条形图:https://github.com/PhilJay/MPAndroidChart . 我想为我的条设置渐变背
我正在使用 SAS MP Connect 开发我的第一段代码,以运行同一个 sas 作业的并行线程。 我知道 MP CONNECT 仅受可用 CPU 数量的物理限制,但理想情况下我不想在我的工作中使用
我最近购买了在 Linux 服务器上运行的 Stata MP12(8 核)许可证。 有没有人写过 Stata 程序,比如说模拟研究来测试 Stata MP 的性能?我想监视在作业处理过程中实际使用的内
我将不胜感激任何“一步一步”指南,说明如何更改 PHP/HTML 页面上的动态数据库连接/连接字符串/等上的代码,使其“即插即用”工作通过 ftp 将页面和 MySQL 数据库托管在“Azure 网站
试图在我的应用程序中放置一个“暂停”按钮,以播放一些声音片段循环播放。 当我打电话mp.pause();一切都破了,我完全迷路了! 这是我正在使用的方法。 protected void man
我想使用 Mp Chart 创建折线图 我想要实现的是这张图片 但是到目前为止我已经得到了这个。 我使用的代码是这个 private fun setData() { val entries
通常,我可能会编写一个类似simd的循环: float * x = (float *) malloc(10 * sizeof(float)); float * y = (float *) malloc
在与堆栈空间、OpenMP 以及如何处理这些问题相关的其他帖子上,有很多回复。但是,我找不到信息来真正理解 OpenMP 调整编译器选项的原因: 原因是什么-fopenmp在 gfortran 中暗示
我有一段代码,可以根据漂移、波动性和随机数计算任意给定日期的股票价格。但是当我检查输出列表时 - 它们是算术级数,而不是几何级数(幂函数)。我共享的变量有问题吗? 代码如下: #include #i
我正在尝试在 C++11 中并行化动态编程算法使用这种方法: void buildBaseCases() { cout << "Building base cases" << endl
我正在 open MP 中实现并行点积 我有这个代码: #include #include #include #include #include #include #define SIZE
我有一台服务器已经将近 4 年了,直到现在我都没有遇到任何问题(主机端)。我一直在更换主机,因为 ddos 的东西试图找到最适合我的东西。现在我买了一个 VPS(这不是我的第一个)并尝试运行我的服
所以我有两个内部平行区域的外部平行区域。是否可以将 2 个线程放入外部平行线,将 4 个线程放入每个内部平行线?我做了这样的东西,但它似乎无法按照我想要的方式工作。有什么建议吗? start_r =
我希望有人指出我们遇到的问题或解决方法。 使用/MP 编译项目时,似乎只有同一文件夹中的文件会同时编译。我使用 Process Explorer 滑动命令行并确认行为。 项目过滤器似乎对并发编译的内容
本文整理了Java中me.chanjar.weixin.mp.api.WxMpMessageRouter类的一些代码示例,展示了WxMpMessageRouter类的具体用法。这些代码示例主要来源于G
我正在监视 Stata/MP(Stata/SE 的多核版本)的 CPU 和内存使用情况,但我不是 Stata 程序员(更像是 Perl 人)。 任何人都可以发布一些代码,利用公共(public)数据集
我是一名优秀的程序员,十分优秀!