【发布时间】:2017-07-30 13:55:11
【问题描述】:
我有一个代码导致我的服务器向用户播放视频,没有 HTTP / 1.1 标头 206 Partial Content 速度非常低(介于 200 / 300kbps 之间),并且使用此标头它会跳转到最大速度.我不知道确切的原因。使用此标头,可以下载视频,但不能通过流媒体播放。流式传输的语法就像标签中的普通视频一样,不同之处在于 src 指向 stream.php 页面?链接 = mysite.com / link.mp4。
我不能使用 fseek,因为视频来自外部服务器
$link = $_GET['link']; $路径 = $链接; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $path); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch); $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); header("内容类型:视频/mp4"); header("内容长度:".$size); header('接受范围:字节'); $handle = fopen($path, "rb"); 而 (!feof($handle)) { header('HTTP/1.1 206 部分内容'); header('Content-Range: bytes 0-'.$size); 回声 fread($handle, 100 * 1024 ); } fclose($句柄);【问题讨论】:
-
你为什么要通过 PHP 返回文件开始?为什么不在你的播放器中只保留原始 URL(来自 $_GET 变量)?
-
我正在使用 API,但它不允许我请求下载不同 IP 的请求,所以我必须让服务器读取文件才能为任何用户播放它
-
它是一个流媒体平台,所以在使用之前下载文件是不可行的
-
啊,我看错了你的代码。我现在意识到你只用 curl 检查长度,但实际上是通过 fopen 流式传输...
-
我不确定您是否可以像这样流式传输它并能够在文件中查找和跳过。看看这个答案:stackoverflow.com/questions/15797762/reading-mp4-files-with-php