首页 > 解决方案 > 使用 PHP 将 http 数据从浏览器发送到另一台服务器

问题描述

我试图通过连接到浏览器的本地服务器上的 php 脚本从远程服务器流式传输 video.mp4 文件。所以它看起来像这样......

浏览器 <==http==> [运行 my.php 的服务器 1] <==> [带有 VIDEO.MP4 文件的服务器 2]

连接到服务器 1 的浏览器想要播放位于远程服务器 2 上的 video.mp4。

用户访问我的网站(服务器 1)并想要播放视频。该视频位于 server2 上。浏览器调用服务器 1 上的 my.php 脚本,将 url 提供给服务器 2,如下所示

http://www.server1.com/my.php?url=http://www.server2.com/video.mp4

我正在制作一个接受新服务器的 url 的 php 脚本,从远程服务器获取文件并将其发送回浏览器进行播放。

可以有几个远程服务器,其中一些我无法控制。

所以我的脚本在下面,该脚本有效,但它不进行渐进式下载,允许视频在下载其余部分时立即开始播放,而是浏览器等待很长时间让整个大视频首先下载到浏览器(2Gigs ),然后开始播放。

我需要它在下载整个文件之前立即开始播放。另一个优点也可以向前和向后寻找(也许在那里要求太多)。

任何人有任何想法如何解决它,或者我可以做一些其他的选择吗?

<?php
$url=$_GET["url"];  // URL to remote server that has the video file
$s = fopen($url, "rb");

if (!$s ) {
    echo "open failed";
$url = str_replace("https", "http",$url);
$s = fopen($url, "rb");
    if (!$s) {
        echo "\n<br>FAILED cant open:". $url;
        exit();
    }
}

if (isset($http_response_header)) {
    foreach ($http_response_header as $h) {
       header($h);
    }
}
else {
     $type = 'Content-Type:video/mp4';
     header($type);
 }
 ini_set('max_execution_time', 0);

 while (!feof($s)) { // read from other server, send to browser
     echo fread($s, 4096);
 }
 fclose($s);
?>

标签: php

解决方案


推荐阅读