使用Apache的Flowplayer安全流媒体


Flowplayer Secure Streaming with Apache

更新:这是一个关于如何在以下情况下为流媒体视频提供某种级别的安全性的教程:
1) 您正在将Flowplayer与Apache一起使用
2) 您不希望用户能够下载视频(仅限流媒体)
3) 您不希望用户能够将视频的URL放在浏览器中(访问受限的视频)
4) 你只希望用户能够流式传输视频,如果他们有正确的凭据

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

原始帖子:
我的客户希望他的视频被隐藏起来,这样在他的域上购买之前就无法进行流媒体播放(他也不希望用户能够下载视频)。我正试图用Flowplayer的安全流媒体来做到这一点,我想我已经快到了9我现在到了!)。在到处搜索后,我找到了这篇帖子。

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

我用PHP/AAJAX生成了这个HTML(大多数例子都使用JS Flowplayer插件,我使用<object>标签嵌入播放器,不涉及JS。如果你使用JS插件,请使用它而不是嵌入版本,.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>';

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

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

更新:php文件的目的是1)获取数据哈希、时间戳和视频文件名(test.mov或其他)2。在授予访问权限之前,请确保$originaltimestamp$hash良好。您还可以检查会话凭据,从数据库中获取"真实"文件位置,或者在授予用户访问权限之前进行任何类型的php安全检查。

还记得更改Content-type:字段,使其与正确的文件扩展名相关(即,如果视频是*.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应该是BaseUrl之后(或之下)的文件位置。希望这能帮助到像我这样的人!

有人认为这样做会带来安全问题吗?

好的,我解决了!在行中:

$streamname = "http://www.mydomain.com/videos/".$streamname;(它已经不在上面了)

我完全错了。我所要做的就是删除这一行,它成功了。它将从您的baseUrl开始。所以它已经在"videos"文件夹中了,所以$streamname应该等于baseUrl之后的文件位置。

顺便说一句,我花了大约一周的时间才解决这个问题。我在互联网上到处找,把这些碎片拼凑在一起。我把它创建成了一个教程,这样其他人就不会这么头疼了(希望如此!)

我花了两天时间才发现这个。。。。

如果存储视频的目录是CHMOD到777,那么它会暂停流。。。

我绕着房子转了一圈,试图弄清楚为什么这不会流式传输我的视频。。。

我有一个已经建立的视频文件目录,由另一个流行的图片php脚本使用,该脚本在当时将该目录设置为CHMOD 777。。。简单地将其设置为CHMOD 755允许flv或mp4流式传输到嵌入到我的php页面中的我的播放器。。。我松了一口气!

所以谢谢你的头痛缓解。。。这确实帮了很大的忙,欢呼