gpt4 book ai didi

在 iPad 上播放 PHP 视频

转载 作者:行者123 更新时间:2023-12-02 22:44:13 25 4
gpt4 key购买 nike

所以这是我的 PHP 视频代码它可以在浏览器中运行,但是当我尝试让它在 iPhone 和 iPad 上播放时,它似乎会弹出带 x 的播放按钮。

<?php
header('Content-type: video/mp4');
$homepage = file_get_contents('http://cdn.videos.budtraffic.com/sodaradio/J/Jessie%20J%20-%20Laserlight.mp4');
echo $homepage;
exit;
?>

最佳答案

Explanation on Apple Web site

简答:

因为 iOS 设备要求服务器支持视频的字节范围请求,而您的代码不提供该功能。

长答案:

当 iOS 设备请求视频时,它们不会下载整个视频。他们一次只下载一小块,以尽量减少带宽使用,也因为用户可能想跳到视频的后面部分而不下载前面的部分。为此,他们提出了字节范围请求。基本上,他们告诉服务器“嘿,给我第 100 和第 200 字节之间的文件部分”。字节范围请求使用Range header ,如下所示

GET /myvideo.mp4 HTTP/1.1
Host: www.example.com
Range: bytes=500-999

在这种情况下,服务器必须回复类似的内容

HTTP/1.1 206 Partial Content
Content-Type: video/mp4
Content-Range: bytes 500-999/20000

所以你需要的不仅仅是这四个 php 行来支持 iOS 设备。首先,您将解析 Range header 。此信息在 $_SERVER['HTTP_RANGE'] 全局变量中可用。然后您将只需要获取文件的那部分并将其发送给客户端。您还需要填充 Content-Range header 。

请注意,Content-Range header 包含完整的文件大小,因此您的代码需要提供该信息。另请注意,几乎每个服务器都支持这种对静态文件的请求。如果您不需要对文件进行特殊处理,一个可能的选择是将文件复制到公共(public)服务器上,让它为您完成这项工作。

非相关评论

将其视为建设性的批评,但您当前形式的代码会使您的服务器崩溃。您基本上在发送之前将整个文件放入内存,更糟糕的是,您为每个请求 都这样做。如果 100 个人同时下载一个 100MB 的视频,您将需要服务器上有 10GB 的内存来为他们提供服务。这不会扩展,根本不会。

一个更好的解决方案是使用 readfile 发送从 CDN 读取的文件。功能。这样,您只需要使用一小块内存,就可以处理更多的并发请求。

编辑:实际上,您还需要使用特殊的响应代码(206 部分内容)进行响应。我在这个答案的第一个版本中忘记了这一点。现已修复

关于在 iPad 上播放 PHP 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10275730/

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