使用Apache的Flowplayer安全流媒体

php*_*Kid 10 php apache streaming .htaccess flowplayer

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

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

原帖:
我的客户希望隐藏他的视频,以便在他们的域上购买之前不能进行流式传输(他不希望用户能够下载视频).我正在尝试使用Flowplayer的Secure Streaming,我想我差不多9我现在在那里!).搜索到处后,我找到了这篇文章.

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

我已经使用PHP/AJAX生成这个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>';
Run Code Online (Sandbox Code Playgroud)

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

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

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

还要记得更改Content-type:字段,使其与正确的文件扩展名相关联(即video/mp4视频是*.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);
?>
Run Code Online (Sandbox Code Playgroud)

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

有人这样做会看到安全问题吗?

php*_*Kid 3

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

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

我全都错了。我所要做的就是删除这一行,它就起作用了。它将以您的 baseUrl 开头。因此它已经位于“videos”文件夹中,因此 $streamname 应等于 baseUrl 之后的文件位置。

顺便说一句,这花了我大约一周的时间来解决,我在互联网上到处寻找以将各个部分组合在一起。我将其创建为教程,这样其他人就不会那么头痛(希望如此!)