gpt4 book ai didi

php - 如何使用 PHP readfile() 优化资源使用

转载 作者:行者123 更新时间:2023-12-04 05:33:58 25 4
gpt4 key购买 nike

我正在使用 php 脚本向 JWPlayer 提供文件,以防止水蛭获取 URL 并在他们的 iPhone 和 Roku 应用程序中使用它。所以我调用 videoplay.php?id=myfile 。输出是 mp4 视频流。文件通常为 200-500MB。

php 脚本工作正常,经过一些调整后,它的性能甚至比我的初始版本要好得多。但它是一个资源 pig 。当我流式传输一个文件时,我无法在浏览器中打开另一个窗口到同一网站上的任何页面......我什至无法显示当前页面的来源。如果我通过将 url 直接提供给播放器来播放完全相同的视频文件,我没有资源占用问题,我可以在播放视频时查看页面源,并在同一浏览器中同时播放来自同一网站的两个视频(在两个不同的页面上)。

这是我的代码

// some code to query database and get the file url
//
$fh = fopen($filename, "rb") or die("Could not open movie\n");

while (!feof($fh) && connection_status() == 0)
{
print(fread($fh, 1024*8));
flush();
ob_flush();
usleep(10000);
}

fclose($fh);

我添加了 usleep 以尝试限制资源使用,但它不起作用,但视频加载速度似乎更快。当我让 usleep 更长(例如 1/10 秒)时,视频需要更长的时间来加载。如果我在 1024*4 和 1024*16 之间改变块大小,8kbyte 似乎会导致视频加载时间最快。 16kbyte 使用更多资源,似乎最大限度地利用了我的 25MBit 连接。视频根本不会从我的本地服务器加载(但我们云服务器上的远程视频会加载)。将块大小减少到 1kbyte 并没有解决资源问题。

我做错了什么?

最佳答案

这可能都是因为您错过了 session_write_close() 的使用.将函数调用添加到流式传输的开头。 session 锁定可能是您的脚本的原因,因为脚本在继续之前正在等待对方完成。

关于php - 如何使用 PHP readfile() 优化资源使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com