使用Apache的Flowplayer安全stream式传输

更新:现在,这是一个教程,如何在以下情况下为streamvideo提供某种级别的安全性:
1)你正在使用Flowplayer和Apache
2)你不希望用户能够下载video(仅stream媒体)
3)您不希望用户能够将video的url放入浏览器(限制访问video)
4)您只希望用户能够stream式传输video,如果他们有适当的凭据

您必须事先了解PHP.htaccess文件。

原帖:
我的客户希望他的video隐藏起来,以便在他的域名上购买它们之前不能stream式传输(他不希望用户能够下载video)。 我试图用Flowplayer的Secure Streaming来做到这一点,我想我现在差不多在这里了!)。 到处search后,我发现这个职位 。

我已经限制通过.htaccess的其他网站热链接现在我试图限制访问的人只是复制的url和粘贴在地址栏(即http://www.mydomain.com/videos/testVideo。 mov )

我使用PHP / AJAX来生成这个HTML(大部分例子使用JS Flowplayer插件,我使用<object>标签来embedded播放器,没有涉及JS。如果你使用JS插件,embedded式版本,.htaccess文件和video.php文件将是相同的。)

 $videofilename = 'testVideo.mov'; $hash = md5('1234'); $timestamp = time(); $videoPath = $hash.'/'.$timestamp.'/'.$videofilename; echo ' <object width="667" height="375" type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.8.swf"> <param name="wmode" value="transparent"/> <param name="movie" value="../swf/flowplayer.securestreaming-3.2.8.swf" /> <param name="allowfullscreen" value="true" /> <param name="timestamp" value="'.$timestamp.'" /> <param name="token" value="'.$hash.'" /> <param name="streamName" value="'.$videofilename.'" /> <param name="flashvars" value=\'config={ "playlist":[ {"url": "'.$videoPath.'", "baseUrl": "http://www.mydomain.com/videos", "autoPlay":false,"autoBuffering":true,"bufferLength":5} ] }\' /> </object>'; 

现在在目录videos我把这个.htaccess文件:

  RewriteEngine on RewriteRule ^(.*)/(.*)/(.*)$ http://www.mydomain.com/vidoeos/video.php?h=$1&t=$2&v=$3 RewriteRule ^$ - [F] RewriteRule ^[^/]+\.(mov|mp4)$ - [F] 

更新:的PHP文件的目的是为了1)获取数据哈希,时间戳,和video文件名(test.mov或其他) 2)确保一切检查(我故意省略在这个例子中的安全检查的长度)和3)给Flowplayer的videostream。 在给予访问权限之前,确保$originaltimestamp$hash是好的。 您还可以检查会话凭据,从数据库获取“真实”文件位置,或者在授予用户访问权限之前执行任何types的php安全检查。

还要记住要更改Content-type:字段,使其与正确的文件扩展名(即video/mp4如果video是* .mp4)相关联)

videos/video.php看起来像这样:

 <?php session_start(); $hash = $_GET['h']; $streamname = $_GET['v']; $originaltimestamp = $_GET['t']; header('Content-Description: File Transfer'); header('Content-type: video/quicktime'); header("Content-length: " . filesize($streamname)); header("Expires: 0"); header("Content-Transfer-Encoding: binary"); $file = fopen($streamname, 'r'); echo stream_get_contents($file); fclose($file); ?> 

总共三个文件,播放器的HTML.htaccess文件和最后的video.php文件。 我原来的问题是$streamname是错误的。 记住$streamname应该是$streamname之后(或之下)的文件位置。 希望这可以帮助像我这样的人!

任何人都以这种方式看到安全问题?

好,我解决了! 在这一行中:

$streamname = "http://www.mydomain.com/videos/".$streamname; (它不在那里了)

我错了。 我所要做的只是删除这一行,它的工作。 它将从你的baseUrl开始。 所以它已经在'videos'文件夹中,所以$ streamname应该等于baseUrl之后的文件位置。

在一个侧面说明,这花了我大约一个星期的时间来解决我正在寻找到处都在互联网上,把碎片放在一起。 我创建了这个教程,让其他人不会有这样的头痛(希望!)

花了我2天发现这个….

如果您的视频存储的目录是CHMOD到777那么它会停止流…

我绕着房子试图弄清楚为什么地狱的名字不会流出我的视频

我有一个已经建立的视频文件的目录,另一个流行的图片php脚本已经设置该目录CHMOD 777期间…简单地设置为CHMOD 755允许FLV或MP4流到我的播放器嵌入到我的PHP页面…我的救济!

所以,谢谢你的头痛缓解…这真的帮助了很多,欢呼声