首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有php的视频流。为什么反应缓慢?

带有php的视频流。为什么反应缓慢?
EN

Stack Overflow用户
提问于 2022-01-31 09:00:34
回答 1查看 251关注 0票数 1

我有个大问题。我有个视频彩带网站。该网站有公开和私人视频,购买后可以看到私人视频。

在这里您可以看到目录结构:

代码语言:javascript
复制
    /public_html
    |__/vendor
    |__/src
    |__/public
    |__/product
       |__/sample-video
          |__/video.mp4

如你所见,视频位于公用文件夹之外。其目的是使他们无法直接进入。

这是树枝:

代码语言:javascript
复制
<video id="myVideo">
   <source src="/products/12?video=10&cache={{ random(50, 10000) }}" type="video/webm" />
   <source src="/products/12?video=10&cache={{ random(50, 10000) }}" type="video/mp4" />
</video>

视频控制器:https://pastebin.com/sne1mSHH

和视频流逻辑:https://pastebin.com/2Sxd7Nqq

问题是:

我要去现场。你在书页之间切换。非常好。我转到一个视频仍然很好的页面,在我启动视频之后,页面就不太好了。页面只是加载,什么也不做。我不能再在页面之间切换了。我必须关闭隐匿模式并开始一个新的会话。

直到现在,我还以为会话锁是问题所在,但我关闭了写会话。

我试着在一个新的标签里打开视频。此外,错误是在视频流完成之前,页面不处理请求。

所以当视频播放的时候,我不能发送新的请求。我还能附加什么来使错误更加透明?救命啊!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-31 09:20:57

我个人不会使用PHP来流视频。问题是,您将不得不锁定许多PHP进程来读取和流一个大文件,而不是处理逻辑。在此过程中,您还将有一个PHP超时。

相反,我将使用Sendfile模块:

  • 您安装了Apache模块或其他类型的Sendfile模块,用于web服务器NGINX或其他什么.

  • 中,您可以执行保护的逻辑,只需发送一个header,表示您希望Sendfile处理流。这样,您的PHP代码就停止运行,它的web服务器处理文件的传输.

就像这样:

代码语言:javascript
复制
<?php
if (has_access_to_the_video($file))
{
    // Send the right HTTP headers.
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache');
    header('Content-type: ' . mime_content_type($file));
    header('Content-Length: ' . filesize($file));

    // Make sure you have X-Sendfile module installed on your server.
    header('X-Sendfile: ' . $file);
    exit;
}
else
{
    // Generate your 403 error or whatever.
}

这可能对你有帮助:

关于你的视频来源的另一条评论

对于<video>标记,您要声明两个<source>元素,一个使用type="video/webm",另一个使用type="video/mp4",但都指向相同的URL。在您的PHP逻辑中,我没有看到任何对所需内容类型的处理,因此您的服务器可能正在为两个编解码器返回相同的视频文件,这是有问题的。我会在URL和服务器端添加视频内容类型,用Sendfile进行内部重定向,以正确的文件(MP4、OGG、WEBM等)。如果浏览器请求一个WEBM文件,而不是接收一个MP4 H.264,我假设它不会正确加载。

似乎MP4 H.264被广泛使用,所以您可以只使用一个源。请参见当前的支持:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70923385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档