.htaccess / php来播放视频?

时间:2013-08-13 01:41:51

标签: php apache .htaccess streaming

是否可以直接从网站流式传输视频,但是阻止使用.htaccess下载视频并将请求发送到php文件?

RewriteEngine On
RewriteCond %{REQUEST_URI} \.(mp4|flv|avi)$ [NC]
RewriteRule ^(.*)$ /stream-file.php?filename=$1 [L]

但是为此,我假设我需要编写一个可以通过php流式传输的脚本,我无法将其传递给媒体播放器,如jwplayer。

或者,我很好奇如何在这里做这样的事情: http://www.statsdoesntsuck.com/york/2320.html

如果您查看来源,您会在html中找到引用主页上视频的部分

<div style="background-color:#404040; border-radius:5px;">                              
<div style="width:98%; height:auto; margin-right:auto; margin-left:auto; padding-top:6px">

<script type="text/javascript" src="http://content.bitsontherun.com/players/EwneWxTl-8JZHlp0n.js">
</script>

</div>
</div>

并且可以在此处找到EwneWxTl-8JZHlp0n.js的内容http://content.bitsontherun.com/players/EwneWxTl-8JZHlp0n.js(脚本太长而无法在此处粘贴)。

基本上,我正在寻找一种方法,只是让它找到文件名或位置有点困难,但仍然能够流式传输它。它不必是100%安全的(我知道这是不可能的)但至少它不应该像viewsource一样容易---&gt; url.com/file.mp4

任何想法都将不胜感激。我也在使用joomla,所以如果有任何模块/插件可以为我做这个也很棒 - 虽然我不介意从头开始编写。

所以重新说明一下 - 保护文件不被下载(不损害流媒体)以及能够成为DIY项目而不是付费服务项目的最佳方法是什么。

编辑:1。通过apache寻找解决方案 2.我找到了以下Flowplayer Secure Streaming with Apache

它的问题是htaccess不允许我流式传输文件,当我删除它时它会流传输就好了。如果有人能帮助我弄清楚我能做些什么来改变它那就太棒了

我的.htaccess如下:

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

目前它显示为“找不到文件”。

2 个答案:

答案 0 :(得分:2)

是的,它很容易做到。下面是我为视频流代理编写的工作脚本 -

ob_start();

**// do any user checks here - authentication / ip restriction / max downloads / whatever**

**// if check fails, return back error message**

**// if check succeeds, proceed with code below**

if( isset($_SERVER['HTTP_RANGE']) )

$opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE'];

**// to add multiple headers to the final request, do something like

**// $opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE']."\r\nHeader1: value1\r\nHeader2: value2";

$opts['http']['method']= "HEAD";

$conh=stream_context_create($opts);

$opts['http']['method']= "GET";

$cong= stream_context_create($opts);

$out[]= file_get_contents($real_file_location_path_or_url,false,$conh);

$out[]= $http_response_header;

ob_end_clean();

array_map("header",$http_response_header);

readfile($real_file_location_path_or_url,false,$cong);

答案 1 :(得分:0)

如果你不受阿帕奇的束缚,我听说ffserver是你要走的路。

您可能还想尝试使用nginx的nginx-rtmp-module

使用apache,还有一个streaming module

最后,您可能只想尝试其中一种CDN服务。我知道你说你不想使用某项服务,但我觉得不提它就很傻。许多开发人员认为CDN是默认选择(包括我自己)。