PHP家庭电影流


PHP Home movie streaming

我想在家里创建一个电影流媒体网站,这样就可以通过网络浏览器在家里的任何地方访问它。现在我遇到了浏览器不允许加载资源的问题,因为它位于另一个磁盘上,而不在网站文件夹中。

这是代码:

<!DOCTYPE html>
<html>
<body>
<?php 
$type = "video/mp4";
$src = "E:/Movies/Movie.mp4";
if (file_exists($src)) { 
    echo "<p>File exists.";
    echo '<video>
              <source type="$type" src="$src">
          </video>';
    }?>
</body>
</html>

如何启用加载资源?

从逻辑上考虑您在这里做什么。虽然服务器端代码确实可以看到文件,但客户端浏览器当然不能。目前,代码通过将其发送到客户端来依赖于此:

<source type="video/mp4" src="E:/Movies/Movie.mp4">

与其考虑文件本身,不如考虑浏览器需要对文件发出的请求。浏览器实际上在这里发出两个请求:

  1. 一个用于PHP输出的HTML
  2. 一个用于src属性中的文件

对于第二个请求,您需要制作另一个PHP"页面"。(虽然这个"页面"不会返回网页,但它会返回实际的文件。)第二个页面需要知道请求的是哪个文件,并且需要两件事:

  1. 它需要知道客户端想要哪个文件
  2. 它需要将文件流式传输到客户端

对于第一部分,您可以将文件名本身添加到URL上的查询字符串中您需要小心,因为客户端可以请求任何文件。因此,在服务器端代码中,您需要确保拒绝对未经授权文件的请求。但本质上,代码可能看起来像这样:

$src = "streamMovie.php?file=" . urlencode("E:/Movies/Movie.mp4");

这应该会产生类似的结果:

<source type="video/mp4" src="streamMovie.php?file=E%3A%2FMovies%2FMovie.mp4">

现在steamMovie.php通过检查$_GET["file"]中的值来知道正在请求哪个文件。然后它只需要流式传输该文件。我可以深入了解这部分的细节,但其他地方已经回答了。